diff --git a/Build/Sources/TypeScript/backend/recordlist.ts b/Build/Sources/TypeScript/backend/recordlist.ts index 6bd978fa54ea4dbf9e042d13d29acc29af6c744d..2a211f1e8bd40daf365b41538f7f53f3d1426636 100644 --- a/Build/Sources/TypeScript/backend/recordlist.ts +++ b/Build/Sources/TypeScript/backend/recordlist.ts @@ -113,11 +113,11 @@ class Recordlist { const table = $me.data('table'); const $target = $($me.data('bs-target')); const isExpanded = $target.data('state') === 'expanded'; - const $collapseIcon = $me.find('.collapseIcon'); + const $collapseIcon = $me.find('.t3js-icon'); const toggleIcon = isExpanded ? this.identifier.icons.expand : this.identifier.icons.collapse; Icons.getIcon(toggleIcon, Icons.sizes.small).then((icon: string): void => { - $collapseIcon.html(icon); + $collapseIcon.replaceWith(icon); }); // Store collapse state in UC diff --git a/Build/Sources/TypeScript/scheduler/scheduler.ts b/Build/Sources/TypeScript/scheduler/scheduler.ts index 80d2cbaaa2fd95232d98fbad432300a62360fb57..ac1623bf93504eec8d2d4260effa7ac810fa8822 100644 --- a/Build/Sources/TypeScript/scheduler/scheduler.ts +++ b/Build/Sources/TypeScript/scheduler/scheduler.ts @@ -256,12 +256,12 @@ class Scheduler { private toggleCollapseIcon(e: Event): void { const isCollapsed: boolean = e.type === 'hide.bs.collapse'; - const collapseIcon: HTMLElement = document.querySelector('.t3js-toggle-table[data-bs-target="#' + (e.target as HTMLElement).id + '"] .collapseIcon'); + const collapseIcon: HTMLElement = document.querySelector('.t3js-toggle-table[data-bs-target="#' + (e.target as HTMLElement).id + '"] .t3js-icon'); if (collapseIcon !== null) { Icons .getIcon((isCollapsed ? 'actions-view-list-expand' : 'actions-view-list-collapse'), Icons.sizes.small) .then((icon: string): void => { - collapseIcon.innerHTML = icon; + collapseIcon.replaceWith(document.createRange().createContextualFragment(icon)); }); } Scheduler.storeCollapseState((e.target as HTMLElement).dataset.table, isCollapsed); diff --git a/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php b/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php index 844d4d56edc0069570876dc1d598f4d32938b96c..75a046eaa805c264d2401f62772b38f84d5ce940 100644 --- a/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php +++ b/typo3/sysext/backend/Classes/RecordList/DatabaseRecordList.php @@ -641,7 +641,6 @@ class DatabaseRecordList // Render collapse button if in multi table mode if (!$this->table) { $title = sprintf(htmlspecialchars($lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:collapseExpandTable')), $tableTitle); - $icon = '<span class="collapseIcon">' . $this->iconFactory->getIcon(($tableCollapsed ? 'actions-view-list-expand' : 'actions-view-list-collapse'), Icon::SIZE_SMALL)->render() . '</span>'; $tableActions .= ' <button type="button"' . ' class="btn btn-sm btn-default t3js-toggle-recordlist"' @@ -652,7 +651,7 @@ class DatabaseRecordList . ' data-table="' . htmlspecialchars($tableIdentifier) . '"' . ' data-bs-toggle="collapse"' . ' data-bs-target="#recordlist-' . htmlspecialchars($tableIdentifier) . '">' - . $icon + . $this->iconFactory->getIcon(($tableCollapsed ? 'actions-view-list-expand' : 'actions-view-list-collapse'), Icon::SIZE_SMALL)->render() . '</button>'; } // Show the select box diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/recordlist.js b/typo3/sysext/backend/Resources/Public/JavaScript/recordlist.js index f8cf8ccdf4f76de6d782179116b3d0fa802e5f3e..1297c84027d61eb99e05b8f03ff7e8fff4df258b 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/recordlist.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/recordlist.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -import $ from"jquery";import Icons from"@typo3/backend/icons.js";import PersistentStorage from"@typo3/backend/storage/persistent.js";import RegularEvent from"@typo3/core/event/regular-event.js";import DocumentService from"@typo3/core/document-service.js";import{default as Modal}from"@typo3/backend/modal.js";import{SeverityEnum}from"@typo3/backend/enum/severity.js";import Severity from"@typo3/backend/severity.js";import{MultiRecordSelectionSelectors}from"@typo3/backend/multi-record-selection.js";class Recordlist{constructor(){this.identifier={entity:".t3js-entity",toggle:".t3js-toggle-recordlist",localize:".t3js-action-localize",icons:{collapse:"actions-view-list-collapse",expand:"actions-view-list-expand",editMultiple:".t3js-record-edit-multiple"}},this.toggleClick=(e,t)=>{e.preventDefault();const i=$(t),n=i.data("table"),o=$(i.data("bs-target")),a="expanded"===o.data("state"),l=i.find(".collapseIcon"),r=a?this.identifier.icons.expand:this.identifier.icons.collapse;Icons.getIcon(r,Icons.sizes.small).then((e=>{l.html(e)}));let s={};PersistentStorage.isset("moduleData.web_list.collapsedTables")&&(s=PersistentStorage.get("moduleData.web_list.collapsedTables"));const d={};d[n]=a?1:0,$.extend(s,d),PersistentStorage.set("moduleData.web_list.collapsedTables",s).then((()=>{o.data("state",a?"collapsed":"expanded")}))},this.onEditMultiple=e=>{e.preventDefault();let t="",i="",n="";const o=[];if("multiRecordSelection:action:edit"===e.type){const n=e.detail,a=n.configuration;if(i=a.returnUrl||"",t=a.tableName||"",""===t)return;n.checkboxes.forEach((e=>{const t=e.closest(MultiRecordSelectionSelectors.elementSelector);null!==t&&t.dataset[a.idField]&&o.push(t.dataset[a.idField])}))}else{const a=e.currentTarget,l=a.closest("[data-table]");if(null===l)return;if(t=l.dataset.table||"",""===t)return;i=a.dataset.returnUrl||"",n=a.dataset.columnsOnly||"";const r=l.querySelectorAll(this.identifier.entity+'[data-uid][data-table="'+t+'"] td.col-checkbox input[type="checkbox"]:checked');if(r.length)r.forEach((e=>{o.push(e.closest(this.identifier.entity+'[data-uid][data-table="'+t+'"]').dataset.uid)}));else{const e=l.querySelectorAll(this.identifier.entity+'[data-uid][data-table="'+t+'"]');if(!e.length)return;e.forEach((e=>{o.push(e.dataset.uid)}))}}if(!o.length)return;let a=top.TYPO3.settings.FormEngine.moduleUrl+"&edit["+t+"]["+o.join(",")+"]=edit&returnUrl="+Recordlist.getReturnUrl(i);""!==n&&(a+="&columnsOnly="+n),window.location.href=a},this.disableButton=e=>{$(e.currentTarget).prop("disable",!0).addClass("disabled")},this.deleteRow=e=>{const t=$(`table[data-table="${e.table}"]`),i=t.find(`tr[data-uid="${e.uid}"]`),n=t.closest(".panel"),o=n.find(".panel-heading"),a=t.find(`[data-l10nparent="${e.uid}"]`),l=$().add(i).add(a);if(l.fadeTo("slow",.4,(()=>{l.slideUp("slow",(()=>{l.remove(),0===t.find("tbody tr").length&&n.slideUp("slow")}))})),"0"===i.data("l10nparent")||""===i.data("l10nparent")){const e=Number(o.find(".t3js-table-total-items").html());o.find(".t3js-table-total-items").text(e-1)}"pages"===e.table&&top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh"))},this.registerPaginationEvents=()=>{document.querySelectorAll(".t3js-recordlist-paging").forEach((e=>{e.addEventListener("keyup",(t=>{t.preventDefault();let i=parseInt(e.value,10);i<parseInt(e.min,10)&&(i=parseInt(e.min,10)),i>parseInt(e.max,10)&&(i=parseInt(e.max,10)),"Enter"===t.key&&i!==parseInt(e.dataset.currentpage,10)&&(window.location.href=e.dataset.currenturl+i.toString())}))}))},new RegularEvent("click",this.toggleClick).delegateTo(document,this.identifier.toggle),$(document).on("click",this.identifier.icons.editMultiple,this.onEditMultiple),$(document).on("click",this.identifier.localize,this.disableButton),DocumentService.ready().then((()=>{this.registerPaginationEvents()})),new RegularEvent("typo3:datahandler:process",this.handleDataHandlerResult.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:edit",this.onEditMultiple).bindTo(document),new RegularEvent("multiRecordSelection:action:delete",this.deleteMultiple).bindTo(document),new RegularEvent("multiRecordSelection:action:copyMarked",(e=>{Recordlist.submitClipboardFormWithCommand("copyMarked",e.target)})).bindTo(document),new RegularEvent("multiRecordSelection:action:removeMarked",(e=>{Recordlist.submitClipboardFormWithCommand("removeMarked",e.target)})).bindTo(document)}static submitClipboardFormWithCommand(e,t){const i=t.closest("form");if(!i)return;const n=i.querySelector('input[name="cmd"]');n&&(n.value=e,i.submit())}static getReturnUrl(e){return""===e&&(e=top.list_frame.document.location.pathname+top.list_frame.document.location.search),encodeURIComponent(e)}handleDataHandlerResult(e){const t=e.detail.payload;t.hasErrors||"datahandler"!==t.component&&"delete"===t.action&&this.deleteRow(t)}deleteMultiple(e){e.preventDefault();const t=e.detail.configuration;Modal.advanced({title:t.title||"Delete",content:t.content||"Are you sure you want to delete those records?",severity:SeverityEnum.warning,buttons:[{text:TYPO3.lang["button.close"]||"Close",active:!0,btnClass:"btn-default",trigger:(e,t)=>t.hideModal()},{text:t.ok||TYPO3.lang["button.ok"]||"OK",btnClass:"btn-"+Severity.getCssClass(SeverityEnum.warning),trigger:(t,i)=>{i.hideModal(),Recordlist.submitClipboardFormWithCommand("delete",e.target)}}]})}}export default new Recordlist; \ No newline at end of file +import $ from"jquery";import Icons from"@typo3/backend/icons.js";import PersistentStorage from"@typo3/backend/storage/persistent.js";import RegularEvent from"@typo3/core/event/regular-event.js";import DocumentService from"@typo3/core/document-service.js";import{default as Modal}from"@typo3/backend/modal.js";import{SeverityEnum}from"@typo3/backend/enum/severity.js";import Severity from"@typo3/backend/severity.js";import{MultiRecordSelectionSelectors}from"@typo3/backend/multi-record-selection.js";class Recordlist{constructor(){this.identifier={entity:".t3js-entity",toggle:".t3js-toggle-recordlist",localize:".t3js-action-localize",icons:{collapse:"actions-view-list-collapse",expand:"actions-view-list-expand",editMultiple:".t3js-record-edit-multiple"}},this.toggleClick=(e,t)=>{e.preventDefault();const i=$(t),n=i.data("table"),o=$(i.data("bs-target")),a="expanded"===o.data("state"),l=i.find(".t3js-icon"),r=a?this.identifier.icons.expand:this.identifier.icons.collapse;Icons.getIcon(r,Icons.sizes.small).then((e=>{l.replaceWith(e)}));let s={};PersistentStorage.isset("moduleData.web_list.collapsedTables")&&(s=PersistentStorage.get("moduleData.web_list.collapsedTables"));const d={};d[n]=a?1:0,$.extend(s,d),PersistentStorage.set("moduleData.web_list.collapsedTables",s).then((()=>{o.data("state",a?"collapsed":"expanded")}))},this.onEditMultiple=e=>{e.preventDefault();let t="",i="",n="";const o=[];if("multiRecordSelection:action:edit"===e.type){const n=e.detail,a=n.configuration;if(i=a.returnUrl||"",t=a.tableName||"",""===t)return;n.checkboxes.forEach((e=>{const t=e.closest(MultiRecordSelectionSelectors.elementSelector);null!==t&&t.dataset[a.idField]&&o.push(t.dataset[a.idField])}))}else{const a=e.currentTarget,l=a.closest("[data-table]");if(null===l)return;if(t=l.dataset.table||"",""===t)return;i=a.dataset.returnUrl||"",n=a.dataset.columnsOnly||"";const r=l.querySelectorAll(this.identifier.entity+'[data-uid][data-table="'+t+'"] td.col-checkbox input[type="checkbox"]:checked');if(r.length)r.forEach((e=>{o.push(e.closest(this.identifier.entity+'[data-uid][data-table="'+t+'"]').dataset.uid)}));else{const e=l.querySelectorAll(this.identifier.entity+'[data-uid][data-table="'+t+'"]');if(!e.length)return;e.forEach((e=>{o.push(e.dataset.uid)}))}}if(!o.length)return;let a=top.TYPO3.settings.FormEngine.moduleUrl+"&edit["+t+"]["+o.join(",")+"]=edit&returnUrl="+Recordlist.getReturnUrl(i);""!==n&&(a+="&columnsOnly="+n),window.location.href=a},this.disableButton=e=>{$(e.currentTarget).prop("disable",!0).addClass("disabled")},this.deleteRow=e=>{const t=$(`table[data-table="${e.table}"]`),i=t.find(`tr[data-uid="${e.uid}"]`),n=t.closest(".panel"),o=n.find(".panel-heading"),a=t.find(`[data-l10nparent="${e.uid}"]`),l=$().add(i).add(a);if(l.fadeTo("slow",.4,(()=>{l.slideUp("slow",(()=>{l.remove(),0===t.find("tbody tr").length&&n.slideUp("slow")}))})),"0"===i.data("l10nparent")||""===i.data("l10nparent")){const e=Number(o.find(".t3js-table-total-items").html());o.find(".t3js-table-total-items").text(e-1)}"pages"===e.table&&top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh"))},this.registerPaginationEvents=()=>{document.querySelectorAll(".t3js-recordlist-paging").forEach((e=>{e.addEventListener("keyup",(t=>{t.preventDefault();let i=parseInt(e.value,10);i<parseInt(e.min,10)&&(i=parseInt(e.min,10)),i>parseInt(e.max,10)&&(i=parseInt(e.max,10)),"Enter"===t.key&&i!==parseInt(e.dataset.currentpage,10)&&(window.location.href=e.dataset.currenturl+i.toString())}))}))},new RegularEvent("click",this.toggleClick).delegateTo(document,this.identifier.toggle),$(document).on("click",this.identifier.icons.editMultiple,this.onEditMultiple),$(document).on("click",this.identifier.localize,this.disableButton),DocumentService.ready().then((()=>{this.registerPaginationEvents()})),new RegularEvent("typo3:datahandler:process",this.handleDataHandlerResult.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:edit",this.onEditMultiple).bindTo(document),new RegularEvent("multiRecordSelection:action:delete",this.deleteMultiple).bindTo(document),new RegularEvent("multiRecordSelection:action:copyMarked",(e=>{Recordlist.submitClipboardFormWithCommand("copyMarked",e.target)})).bindTo(document),new RegularEvent("multiRecordSelection:action:removeMarked",(e=>{Recordlist.submitClipboardFormWithCommand("removeMarked",e.target)})).bindTo(document)}static submitClipboardFormWithCommand(e,t){const i=t.closest("form");if(!i)return;const n=i.querySelector('input[name="cmd"]');n&&(n.value=e,i.submit())}static getReturnUrl(e){return""===e&&(e=top.list_frame.document.location.pathname+top.list_frame.document.location.search),encodeURIComponent(e)}handleDataHandlerResult(e){const t=e.detail.payload;t.hasErrors||"datahandler"!==t.component&&"delete"===t.action&&this.deleteRow(t)}deleteMultiple(e){e.preventDefault();const t=e.detail.configuration;Modal.advanced({title:t.title||"Delete",content:t.content||"Are you sure you want to delete those records?",severity:SeverityEnum.warning,buttons:[{text:TYPO3.lang["button.close"]||"Close",active:!0,btnClass:"btn-default",trigger:(e,t)=>t.hideModal()},{text:t.ok||TYPO3.lang["button.ok"]||"OK",btnClass:"btn-"+Severity.getCssClass(SeverityEnum.warning),trigger:(t,i)=>{i.hideModal(),Recordlist.submitClipboardFormWithCommand("delete",e.target)}}]})}}export default new Recordlist; \ No newline at end of file diff --git a/typo3/sysext/scheduler/Resources/Private/Partials/TaskList.html b/typo3/sysext/scheduler/Resources/Private/Partials/TaskList.html index 8e9f48ad006412cfa2670ce128539f5193ae3867..8880286c22075eec5b50de57fdd424d37001ba91 100644 --- a/typo3/sysext/scheduler/Resources/Private/Partials/TaskList.html +++ b/typo3/sysext/scheduler/Resources/Private/Partials/TaskList.html @@ -41,9 +41,7 @@ data-bs-target="#scheduler-task-group-missing" aria-expanded="{f:if(condition: errorClassesCollapsed, then: 'false', else: 'true')}" > - <span class="collapseIcon"> - <core:icon identifier="{f:if(condition: errorClassesCollapsed, then: 'actions-view-list-expand', else: 'actions-view-list-collapse')}" size="small" /> - </span> + <core:icon identifier="{f:if(condition: errorClassesCollapsed, then: 'actions-view-list-expand', else: 'actions-view-list-collapse')}" size="small" /> </button> </div> <div class="panel-collapse collapse {f:if(condition: '!{errorClassesCollapsed}', then: 'show')}" id="scheduler-task-group-missing" data-table="task-group-missing" > @@ -167,9 +165,7 @@ data-bs-target="#scheduler-task-group-{taskGroupId}" aria-expanded="{f:if(condition: taskGroup.taskGroupCollapsed, then: 'false', else: 'true')}" > - <span class="collapseIcon"> - <core:icon identifier="{f:if(condition: taskGroup.taskGroupCollapsed, then: 'actions-view-list-expand', else: 'actions-view-list-collapse')}" size="small" /> - </span> + <core:icon identifier="{f:if(condition: taskGroup.taskGroupCollapsed, then: 'actions-view-list-expand', else: 'actions-view-list-collapse')}" size="small" /> </button> </form> </div> diff --git a/typo3/sysext/scheduler/Resources/Public/JavaScript/scheduler.js b/typo3/sysext/scheduler/Resources/Public/JavaScript/scheduler.js index aeccc967df5cd36552ae8e7ee84365951532e2cb..0e47bf936775ac37237a4914567eecd700f1b376 100644 --- a/typo3/sysext/scheduler/Resources/Public/JavaScript/scheduler.js +++ b/typo3/sysext/scheduler/Resources/Public/JavaScript/scheduler.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -import SortableTable from"@typo3/backend/sortable-table.js";import DocumentSaveActions from"@typo3/backend/document-save-actions.js";import RegularEvent from"@typo3/core/event/regular-event.js";import Modal from"@typo3/backend/modal.js";import Icons from"@typo3/backend/icons.js";import{MessageUtility}from"@typo3/backend/utility/message-utility.js";import PersistentStorage from"@typo3/backend/storage/persistent.js";import DateTimePicker from"@typo3/backend/date-time-picker.js";import{MultiRecordSelectionSelectors}from"@typo3/backend/multi-record-selection.js";import Severity from"@typo3/backend/severity.js";import DocumentService from"@typo3/core/document-service.js";class Scheduler{constructor(){DocumentService.ready().then((()=>{this.initializeEvents(),this.initializeDefaultStates(),this.initializeCloseConfirm()})),DocumentSaveActions.getInstance().addPreSubmitCallback((()=>{document.querySelector("#extraFieldsHidden").append(...document.querySelectorAll(".extraFields[hidden]"))}))}static updateClearableInputs(){const e=document.querySelectorAll(".t3js-clearable");e.length>0&&import("@typo3/backend/input/clearable.js").then((function(){e.forEach((e=>e.clearable()))}))}static updateElementBrowserTriggers(){document.querySelectorAll(".t3js-element-browser").forEach((e=>{const t=document.getElementById(e.dataset.triggerFor);e.dataset.params=t.name+"|||pages"}))}static resolveDefaultNumberOfDays(){const e=document.getElementById("task_tableGarbageCollection_numberOfDays");return null===e||void 0===e.dataset.defaultNumberOfDays?null:JSON.parse(e.dataset.defaultNumberOfDays)}static storeCollapseState(e,t){let a={};PersistentStorage.isset("moduleData.scheduler_manage")&&(a=PersistentStorage.get("moduleData.scheduler_manage"));const n={};n[e]=t?1:0,a={...a,...n},PersistentStorage.set("moduleData.scheduler_manage",a)}actOnChangedTaskClass(e){let t=e.value;t=t.toLowerCase().replace(/\\/g,"-");for(const e of document.querySelectorAll(".extraFields"))e.hidden=!e.classList.contains("extra_fields_"+t)}actOnChangeSchedulerTableGarbageCollectionAllTables(e){const t=document.querySelector("#task_tableGarbageCollection_numberOfDays"),a=document.querySelector("#task_tableGarbageCollection_table");if(e.checked)a.disabled=!0,t.disabled=!0;else{let e=parseInt(t.value,10);if(e<1){const t=a.value,n=Scheduler.resolveDefaultNumberOfDays();null!==n&&(e=n[t])}a.disabled=!1,e>0&&(t.disabled=!1)}}actOnChangeSchedulerTableGarbageCollectionTable(e){const t=document.querySelector("#task_tableGarbageCollection_numberOfDays"),a=Scheduler.resolveDefaultNumberOfDays();null!==a&&a[e.value]>0?(t.disabled=!1,t.value=a[e.value].toString(10)):(t.disabled=!0,t.value="0")}toggleFieldsByTaskType(e){const t=2===(e=parseInt(e+"",10));document.querySelector("#task_end_col").hidden=!t,document.querySelector("#task_frequency_row").hidden=!t,document.querySelector("#task_multiple_row").hidden=!t}initializeEvents(){new RegularEvent("change",(e=>{this.actOnChangedTaskClass(e.target)})).bindTo(document.querySelector("#task_class")),new RegularEvent("change",(e=>{this.toggleFieldsByTaskType(e.target.value)})).bindTo(document.querySelector("#task_type")),new RegularEvent("change",(e=>{this.actOnChangeSchedulerTableGarbageCollectionAllTables(e.target)})).bindTo(document.querySelector("#task_tableGarbageCollection_allTables")),new RegularEvent("change",(e=>{this.actOnChangeSchedulerTableGarbageCollectionTable(e.target)})).bindTo(document.querySelector("#task_tableGarbageCollection_table")),new RegularEvent("change",(e=>{const t=e.target;document.querySelector("#task_frequency").value=t.value,t.value="",t.blur()})).bindTo(document.querySelector("[data-update-task-frequency]")),document.querySelectorAll("[data-scheduler-table]").forEach((e=>{new SortableTable(e)})),document.querySelectorAll("#tx_scheduler_form .t3js-datetimepicker").forEach((e=>DateTimePicker.initialize(e))),new RegularEvent("click",((e,t)=>{e.preventDefault();const a=new URL(t.href,window.origin);a.searchParams.set("mode",t.dataset.mode),a.searchParams.set("bparams",t.dataset.params),Modal.advanced({type:Modal.types.iframe,content:a.toString(),size:Modal.sizes.large})})).delegateTo(document,".t3js-element-browser"),new RegularEvent("show.bs.collapse",this.toggleCollapseIcon.bind(this)).bindTo(document),new RegularEvent("hide.bs.collapse",this.toggleCollapseIcon.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:go",this.executeTasks.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:go_cron",this.executeTasks.bind(this)).bindTo(document),window.addEventListener("message",this.listenOnElementBrowser.bind(this))}initializeDefaultStates(){const e=document.querySelector("#task_type");null!==e&&this.toggleFieldsByTaskType(e.value);const t=document.querySelector("#task_class");null!==t&&(this.actOnChangedTaskClass(t),Scheduler.updateClearableInputs(),Scheduler.updateElementBrowserTriggers())}listenOnElementBrowser(e){if(!MessageUtility.verifyOrigin(e.origin))throw"Denied message sent by "+e.origin;if("typo3:elementBrowser:elementAdded"===e.data.actionName){if(void 0===e.data.fieldName)throw"fieldName not defined in message";if(void 0===e.data.value)throw"value not defined in message";document.querySelector('input[name="'+e.data.fieldName+'"]').value=e.data.value.split("_").pop()}}toggleCollapseIcon(e){const t="hide.bs.collapse"===e.type,a=document.querySelector('.t3js-toggle-table[data-bs-target="#'+e.target.id+'"] .collapseIcon');null!==a&&Icons.getIcon(t?"actions-view-list-expand":"actions-view-list-collapse",Icons.sizes.small).then((e=>{a.innerHTML=e})),Scheduler.storeCollapseState(e.target.dataset.table,t)}executeTasks(e){const t=document.querySelector("#tx_scheduler_form");if(null===t)return;const a=[];if(e.detail.checkboxes.forEach((e=>{const t=e.closest(MultiRecordSelectionSelectors.elementSelector);null!==t&&t.dataset.taskId&&a.push(t.dataset.taskId)})),a.length){if("multiRecordSelection:action:go_cron"===e.type){const e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","scheduleCron"),e.setAttribute("value",a.join(",")),t.append(e)}else{const e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","execute"),e.setAttribute("value",a.join(",")),t.append(e)}t.submit()}}initializeCloseConfirm(){const e=document.querySelector("form[name=tx_scheduler_form]");if(!e)return;const t=new FormData(e);document.querySelector(".t3js-scheduler-close").addEventListener("click",(a=>{const n=new FormData(e),l=Object.fromEntries(t.entries()),o=Object.fromEntries(n.entries());if(JSON.stringify(l)!==JSON.stringify(o)||e.querySelector('input[value="add"]')){a.preventDefault();const t=a.target.href;Modal.confirm(TYPO3.lang["label.confirm.close_without_save.title"]||"Do you want to close without saving?",TYPO3.lang["label.confirm.close_without_save.content"]||"You currently have unsaved changes. Are you sure you want to discard these changes?",Severity.warning,[{text:TYPO3.lang["buttons.confirm.close_without_save.no"]||"No, I will continue editing",btnClass:"btn-default",name:"no",trigger:()=>Modal.dismiss()},{text:TYPO3.lang["buttons.confirm.close_without_save.yes"]||"Yes, discard my changes",btnClass:"btn-default",name:"yes",trigger:()=>{Modal.dismiss(),window.location.href=t}},{text:TYPO3.lang["buttons.confirm.save_and_close"]||"Save and close",btnClass:"btn-primary",name:"save",active:!0,trigger:()=>{Modal.dismiss();const t=document.createElement("input");t.type="hidden",t.value="saveclose",t.name="CMD",e.append(t),e.submit()}}])}}))}}export default new Scheduler; \ No newline at end of file +import SortableTable from"@typo3/backend/sortable-table.js";import DocumentSaveActions from"@typo3/backend/document-save-actions.js";import RegularEvent from"@typo3/core/event/regular-event.js";import Modal from"@typo3/backend/modal.js";import Icons from"@typo3/backend/icons.js";import{MessageUtility}from"@typo3/backend/utility/message-utility.js";import PersistentStorage from"@typo3/backend/storage/persistent.js";import DateTimePicker from"@typo3/backend/date-time-picker.js";import{MultiRecordSelectionSelectors}from"@typo3/backend/multi-record-selection.js";import Severity from"@typo3/backend/severity.js";import DocumentService from"@typo3/core/document-service.js";class Scheduler{constructor(){DocumentService.ready().then((()=>{this.initializeEvents(),this.initializeDefaultStates(),this.initializeCloseConfirm()})),DocumentSaveActions.getInstance().addPreSubmitCallback((()=>{document.querySelector("#extraFieldsHidden").append(...document.querySelectorAll(".extraFields[hidden]"))}))}static updateClearableInputs(){const e=document.querySelectorAll(".t3js-clearable");e.length>0&&import("@typo3/backend/input/clearable.js").then((function(){e.forEach((e=>e.clearable()))}))}static updateElementBrowserTriggers(){document.querySelectorAll(".t3js-element-browser").forEach((e=>{const t=document.getElementById(e.dataset.triggerFor);e.dataset.params=t.name+"|||pages"}))}static resolveDefaultNumberOfDays(){const e=document.getElementById("task_tableGarbageCollection_numberOfDays");return null===e||void 0===e.dataset.defaultNumberOfDays?null:JSON.parse(e.dataset.defaultNumberOfDays)}static storeCollapseState(e,t){let a={};PersistentStorage.isset("moduleData.scheduler_manage")&&(a=PersistentStorage.get("moduleData.scheduler_manage"));const n={};n[e]=t?1:0,a={...a,...n},PersistentStorage.set("moduleData.scheduler_manage",a)}actOnChangedTaskClass(e){let t=e.value;t=t.toLowerCase().replace(/\\/g,"-");for(const e of document.querySelectorAll(".extraFields"))e.hidden=!e.classList.contains("extra_fields_"+t)}actOnChangeSchedulerTableGarbageCollectionAllTables(e){const t=document.querySelector("#task_tableGarbageCollection_numberOfDays"),a=document.querySelector("#task_tableGarbageCollection_table");if(e.checked)a.disabled=!0,t.disabled=!0;else{let e=parseInt(t.value,10);if(e<1){const t=a.value,n=Scheduler.resolveDefaultNumberOfDays();null!==n&&(e=n[t])}a.disabled=!1,e>0&&(t.disabled=!1)}}actOnChangeSchedulerTableGarbageCollectionTable(e){const t=document.querySelector("#task_tableGarbageCollection_numberOfDays"),a=Scheduler.resolveDefaultNumberOfDays();null!==a&&a[e.value]>0?(t.disabled=!1,t.value=a[e.value].toString(10)):(t.disabled=!0,t.value="0")}toggleFieldsByTaskType(e){const t=2===(e=parseInt(e+"",10));document.querySelector("#task_end_col").hidden=!t,document.querySelector("#task_frequency_row").hidden=!t,document.querySelector("#task_multiple_row").hidden=!t}initializeEvents(){new RegularEvent("change",(e=>{this.actOnChangedTaskClass(e.target)})).bindTo(document.querySelector("#task_class")),new RegularEvent("change",(e=>{this.toggleFieldsByTaskType(e.target.value)})).bindTo(document.querySelector("#task_type")),new RegularEvent("change",(e=>{this.actOnChangeSchedulerTableGarbageCollectionAllTables(e.target)})).bindTo(document.querySelector("#task_tableGarbageCollection_allTables")),new RegularEvent("change",(e=>{this.actOnChangeSchedulerTableGarbageCollectionTable(e.target)})).bindTo(document.querySelector("#task_tableGarbageCollection_table")),new RegularEvent("change",(e=>{const t=e.target;document.querySelector("#task_frequency").value=t.value,t.value="",t.blur()})).bindTo(document.querySelector("[data-update-task-frequency]")),document.querySelectorAll("[data-scheduler-table]").forEach((e=>{new SortableTable(e)})),document.querySelectorAll("#tx_scheduler_form .t3js-datetimepicker").forEach((e=>DateTimePicker.initialize(e))),new RegularEvent("click",((e,t)=>{e.preventDefault();const a=new URL(t.href,window.origin);a.searchParams.set("mode",t.dataset.mode),a.searchParams.set("bparams",t.dataset.params),Modal.advanced({type:Modal.types.iframe,content:a.toString(),size:Modal.sizes.large})})).delegateTo(document,".t3js-element-browser"),new RegularEvent("show.bs.collapse",this.toggleCollapseIcon.bind(this)).bindTo(document),new RegularEvent("hide.bs.collapse",this.toggleCollapseIcon.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:go",this.executeTasks.bind(this)).bindTo(document),new RegularEvent("multiRecordSelection:action:go_cron",this.executeTasks.bind(this)).bindTo(document),window.addEventListener("message",this.listenOnElementBrowser.bind(this))}initializeDefaultStates(){const e=document.querySelector("#task_type");null!==e&&this.toggleFieldsByTaskType(e.value);const t=document.querySelector("#task_class");null!==t&&(this.actOnChangedTaskClass(t),Scheduler.updateClearableInputs(),Scheduler.updateElementBrowserTriggers())}listenOnElementBrowser(e){if(!MessageUtility.verifyOrigin(e.origin))throw"Denied message sent by "+e.origin;if("typo3:elementBrowser:elementAdded"===e.data.actionName){if(void 0===e.data.fieldName)throw"fieldName not defined in message";if(void 0===e.data.value)throw"value not defined in message";document.querySelector('input[name="'+e.data.fieldName+'"]').value=e.data.value.split("_").pop()}}toggleCollapseIcon(e){const t="hide.bs.collapse"===e.type,a=document.querySelector('.t3js-toggle-table[data-bs-target="#'+e.target.id+'"] .t3js-icon');null!==a&&Icons.getIcon(t?"actions-view-list-expand":"actions-view-list-collapse",Icons.sizes.small).then((e=>{a.replaceWith(document.createRange().createContextualFragment(e))})),Scheduler.storeCollapseState(e.target.dataset.table,t)}executeTasks(e){const t=document.querySelector("#tx_scheduler_form");if(null===t)return;const a=[];if(e.detail.checkboxes.forEach((e=>{const t=e.closest(MultiRecordSelectionSelectors.elementSelector);null!==t&&t.dataset.taskId&&a.push(t.dataset.taskId)})),a.length){if("multiRecordSelection:action:go_cron"===e.type){const e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","scheduleCron"),e.setAttribute("value",a.join(",")),t.append(e)}else{const e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","execute"),e.setAttribute("value",a.join(",")),t.append(e)}t.submit()}}initializeCloseConfirm(){const e=document.querySelector("form[name=tx_scheduler_form]");if(!e)return;const t=new FormData(e);document.querySelector(".t3js-scheduler-close").addEventListener("click",(a=>{const n=new FormData(e),l=Object.fromEntries(t.entries()),o=Object.fromEntries(n.entries());if(JSON.stringify(l)!==JSON.stringify(o)||e.querySelector('input[value="add"]')){a.preventDefault();const t=a.target.href;Modal.confirm(TYPO3.lang["label.confirm.close_without_save.title"]||"Do you want to close without saving?",TYPO3.lang["label.confirm.close_without_save.content"]||"You currently have unsaved changes. Are you sure you want to discard these changes?",Severity.warning,[{text:TYPO3.lang["buttons.confirm.close_without_save.no"]||"No, I will continue editing",btnClass:"btn-default",name:"no",trigger:()=>Modal.dismiss()},{text:TYPO3.lang["buttons.confirm.close_without_save.yes"]||"Yes, discard my changes",btnClass:"btn-default",name:"yes",trigger:()=>{Modal.dismiss(),window.location.href=t}},{text:TYPO3.lang["buttons.confirm.save_and_close"]||"Save and close",btnClass:"btn-primary",name:"save",active:!0,trigger:()=>{Modal.dismiss();const t=document.createElement("input");t.type="hidden",t.value="saveclose",t.name="CMD",e.append(t),e.submit()}}])}}))}}export default new Scheduler; \ No newline at end of file