From 5d4e79391cde5c7082b428f4f47b3a0f38d08f3d Mon Sep 17 00:00:00 2001
From: Oliver Bartsch <bo@cedev.de>
Date: Sat, 21 Aug 2021 02:19:24 +0200
Subject: [PATCH] [BUGFIX] Keep checked state of record relations in sync

The workspace review features the collapse/expand
functionality for record relations. An example is tt_content
which may contain several sys_file_reference relations.
They are included in the listing as well but collapsed by
default.

Since at least v10 those relations are always processed
together. This means, in case an editor checks a parent
record and executes an action, e.g. publish, the same
action is also executed for the relations. However,
the UX was previously not really helpful as this was
not visible to the editor.

Therefore, and to improve the UX in workspace review,
those relations are now always "bound together". This
means, when selecting the parent record all relations
are selected, too. The same goes the other way round.
When selecting a relation, all corresponding relations
as well as the parent record are selected.

As mentioned, this does not change any functionality as
this process was already done "under the hood". This
process is now just visualized for the editor.

Resolves: #94404
Releases: master, 10.4
Change-Id: I28d2c9e67747dde5ffdfb36d24f8cc7f36c246a8
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/70712
Tested-by: core-ci <typo3@b13.com>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Jochen <rothjochen@gmail.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Jochen <rothjochen@gmail.com>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
---
 .../Resources/Public/TypeScript/Backend.ts    | 60 ++++++++++++++++++-
 .../Resources/Public/JavaScript/Backend.js    |  2 +-
 2 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/Build/Sources/TypeScript/workspaces/Resources/Public/TypeScript/Backend.ts b/Build/Sources/TypeScript/workspaces/Resources/Public/TypeScript/Backend.ts
index 2c38678f441f..42b5a3e1ba28 100644
--- a/Build/Sources/TypeScript/workspaces/Resources/Public/TypeScript/Backend.ts
+++ b/Build/Sources/TypeScript/workspaces/Resources/Public/TypeScript/Backend.ts
@@ -190,6 +190,51 @@ class Backend extends Workspaces {
     return $history;
   }
 
+  /**
+   * This changes the checked state of a parent checkbox belonging
+   * to the given collection (e.g. sys_file_reference > tt_content).
+   *
+   * This also sets a data attribute which will be respected by
+   * the multi record selection module. This is to prevent the
+   * module from overriding the manually changed state.
+   *
+   * @param {string} collection The collection identifier
+   * @param {boolean} check The checked state
+   */
+  private static changeCollectionParentState(collection: string, check: boolean): void {
+    const parent: HTMLInputElement = document.querySelector('tr[data-collection-current="' + collection + '"] input[type=checkbox]');
+    if (parent !== null && parent.checked !== check) {
+      parent.checked = check;
+      parent.dataset.manuallyChanged = 'true';
+      parent.dispatchEvent(new Event('checkbox:state:changed', {bubbles: true, cancelable: false}));
+    }
+  }
+
+  /**
+   * This changes the checked state of all checkboxes belonging
+   * to the given collectionCurrent. Those are the child records
+   * of a parent record (e.g. tt_content > sys_file_reference).
+   *
+   * This also sets a data attribute which will be respected by
+   * the multi record selection module. This is to prevent the
+   * module from overriding the manually changed state.
+   *
+   * @param {string} collectionCurrent The collection current identifier
+   * @param {boolean} check The checked state
+   */
+  private static changeCollectionChildrenState(collectionCurrent: string, check: boolean): void {
+    const collectionChildren: NodeListOf<HTMLInputElement> = document.querySelectorAll('tr[data-collection="' + collectionCurrent + '"] input[type=checkbox]');
+    if (collectionChildren.length) {
+      collectionChildren.forEach((checkbox: HTMLInputElement): void => {
+        if (checkbox.checked !== check) {
+          checkbox.checked = check;
+          checkbox.dataset.manuallyChanged = 'true';
+          checkbox.dispatchEvent(new Event('checkbox:state:changed', {bubbles: true, cancelable: false}));
+        }
+      })
+    }
+  }
+
   constructor() {
     super();
 
@@ -434,12 +479,13 @@ class Backend extends Workspaces {
   private handleCheckboxStateChanged = (e: Event): void => {
     const $checkbox = $(e.target);
     const $tr = $checkbox.parents('tr');
+    const checked = $checkbox.prop('checked');
     const table = $tr.data('table');
     const uid = $tr.data('uid');
     const t3ver_oid = $tr.data('t3ver_oid');
     const record = table + ':' + uid + ':' + t3ver_oid;
 
-    if ($checkbox.prop('checked')) {
+    if (checked) {
       this.markedRecordsForMassAction.push(record);
     } else {
       const index = this.markedRecordsForMassAction.indexOf(record);
@@ -448,6 +494,15 @@ class Backend extends Workspaces {
       }
     }
 
+    if ($tr.data('collectionCurrent')) {
+      // change checked state from all collection children
+      Backend.changeCollectionChildrenState($tr.data('collectionCurrent'), checked);
+    } else if ($tr.data('collection')) {
+      // change checked state from all collection children and the collection parent
+      Backend.changeCollectionChildrenState($tr.data('collection'), checked);
+      Backend.changeCollectionParentState($tr.data('collection'), checked);
+    }
+
     this.elements.$chooseMassAction.prop('disabled', this.markedRecordsForMassAction.length > 0);
   }
 
@@ -626,6 +681,9 @@ class Backend extends Workspaces {
         });
         rowConfiguration['data-collection'] = item.Workspaces_CollectionParent;
         rowConfiguration.class = 'collapse' + (parentItem.expanded ? ' show' :  '');
+      } else if (item.Workspaces_CollectionCurrent !== '') {
+        // Set CollectionCurrent attribute for parent records
+        rowConfiguration['data-collection-current'] = item.Workspaces_CollectionCurrent
       }
 
       this.elements.$tableBody.append(
diff --git a/typo3/sysext/workspaces/Resources/Public/JavaScript/Backend.js b/typo3/sysext/workspaces/Resources/Public/JavaScript/Backend.js
index 7722975fa27c..c380ff9d52af 100644
--- a/typo3/sysext/workspaces/Resources/Public/JavaScript/Backend.js
+++ b/typo3/sysext/workspaces/Resources/Public/JavaScript/Backend.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};define(["require","exports","jquery","TYPO3/CMS/Backend/Enum/Severity","./Workspaces","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Storage/Persistent","TYPO3/CMS/Backend/Tooltip","TYPO3/CMS/Backend/Utility","TYPO3/CMS/Backend/Wizard","TYPO3/CMS/Core/SecurityUtility","TYPO3/CMS/Backend/WindowManager","TYPO3/CMS/Core/Event/RegularEvent","TYPO3/CMS/Backend/Input/Clearable"],(function(e,t,a,s,n,i,o,l,r,d,c,p,g){"use strict";var h;a=__importDefault(a),n=__importDefault(n),g=__importDefault(g),function(e){e.searchForm="#workspace-settings-form",e.searchTextField='#workspace-settings-form input[name="search-text"]',e.searchSubmitBtn='#workspace-settings-form button[type="submit"]',e.depthSelector='#workspace-settings-form [name="depth"]',e.languageSelector='#workspace-settings-form select[name="languages"]',e.workspaceActions=".workspace-actions",e.chooseStageAction='.workspace-actions [name="stage-action"]',e.chooseSelectionAction='.workspace-actions [name="selection-action"]',e.chooseMassAction='.workspace-actions [name="mass-action"]',e.container="#workspace-panel",e.contentsContainer="#workspace-contents",e.noContentsContainer="#workspace-contents-empty",e.actionIcons="#workspace-action-icons",e.previewLinksButton=".t3js-preview-link",e.pagination="#workspace-pagination"}(h||(h={}));class u extends n.default{constructor(){super(),this.elements={},this.settings={dir:"ASC",id:TYPO3.settings.Workspaces.id,depth:1,language:"all",limit:30,query:"",sort:"label_Live",start:0,filterTxt:""},this.paging={currentPage:1,totalPages:1,totalItems:0},this.latestPath="",this.markedRecordsForMassAction=[],this.indentationPadding=26,this.handleCheckboxStateChanged=e=>{const t=a.default(e.target),s=t.parents("tr"),n=s.data("table")+":"+s.data("uid")+":"+s.data("t3ver_oid");if(t.prop("checked"))this.markedRecordsForMassAction.push(n);else{const e=this.markedRecordsForMassAction.indexOf(n);e>-1&&this.markedRecordsForMassAction.splice(e,1)}this.elements.$chooseMassAction.prop("disabled",this.markedRecordsForMassAction.length>0)},this.viewChanges=e=>{e.preventDefault();const t=a.default(e.currentTarget).closest("tr");this.sendRemoteRequest(this.generateRemotePayload("getRowDetails",{stage:t.data("stage"),t3ver_oid:t.data("t3ver_oid"),table:t.data("table"),uid:t.data("uid"),filterFields:!0})).then(async e=>{const n=(await e.resolve())[0].result.data[0],o=a.default("<div />"),l=a.default("<ul />",{class:"nav nav-tabs",role:"tablist"}),r=a.default("<div />",{class:"tab-content"}),d=[];o.append(a.default("<p />").html(TYPO3.lang.path.replace("{0}",n.path_Live)),a.default("<p />").html(TYPO3.lang.current_step.replace("{0}",n.label_Stage).replace("{1}",n.stage_position).replace("{2}",n.stage_count))),n.diff.length>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-changes","aria-controls":"workspace-changes",role:"tab","data-bs-toggle":"tab"}).text(TYPO3.lang["window.recordChanges.tabs.changeSummary"]))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-changes"}).append(a.default("<div />",{class:"form-section"}).append(u.generateDiffView(n.diff))))),n.comments.length>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-comments","aria-controls":"workspace-comments",role:"tab","data-bs-toggle":"tab"}).html(TYPO3.lang["window.recordChanges.tabs.comments"]+"&nbsp;").append(a.default("<span />",{class:"badge"}).text(n.comments.length)))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-comments"}).append(a.default("<div />",{class:"form-section"}).append(u.generateCommentView(n.comments))))),n.history.total>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-history","aria-controls":"workspace-history",role:"tab","data-bs-toggle":"tab"}).text(TYPO3.lang["window.recordChanges.tabs.history"]))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-history"}).append(a.default("<div />",{class:"form-section"}).append(u.generateHistoryView(n.history.data))))),l.find("li > a").first().addClass("active"),r.find(".tab-pane").first().addClass("active"),o.append(a.default("<div />").append(l,r)),!1!==n.label_PrevStage&&t.data("stage")!==t.data("prevStage")&&d.push({text:n.label_PrevStage.title,active:!0,btnClass:"btn-default",name:"prevstage",trigger:()=>{i.currentModal.trigger("modal-dismiss"),this.sendToStage(t,"prev")}}),!1!==n.label_NextStage&&d.push({text:n.label_NextStage.title,active:!0,btnClass:"btn-default",name:"nextstage",trigger:()=>{i.currentModal.trigger("modal-dismiss"),this.sendToStage(t,"next")}}),d.push({text:TYPO3.lang.close,active:!0,btnClass:"btn-info",name:"cancel",trigger:()=>{i.currentModal.trigger("modal-dismiss")}}),i.advanced({type:i.types.default,title:TYPO3.lang["window.recordInformation"].replace("{0}",t.find(".t3js-title-live").text().trim()),content:o,severity:s.SeverityEnum.info,buttons:d,size:i.sizes.medium})})},this.confirmDeleteRecordFromWorkspace=e=>{const t=a.default(e.target).closest("tr"),n=i.confirm(TYPO3.lang["window.discard.title"],TYPO3.lang["window.discard.message"],s.SeverityEnum.warning,[{text:TYPO3.lang.cancel,active:!0,btnClass:"btn-default",name:"cancel",trigger:()=>{n.modal("hide")}},{text:TYPO3.lang.ok,btnClass:"btn-warning",name:"ok"}]);n.on("button.clicked",e=>{"ok"===e.target.name&&this.sendRemoteRequest([this.generateRemoteActionsPayload("deleteSingleRecord",[t.data("table"),t.data("uid")])]).then(()=>{n.modal("hide"),this.getWorkspaceInfos(),u.refreshPageTree()})})},this.runSelectionAction=e=>{const t=a.default(e.currentTarget).val(),s="discard"!==t;if(0===t.length)return;const n=[];for(let e=0;e<this.markedRecordsForMassAction.length;++e){const t=this.markedRecordsForMassAction[e].split(":");n.push({table:t[0],liveId:t[2],versionId:t[1]})}s?this.checkIntegrity({selection:n,type:"selection"}).then(async e=>{d.setForceSelection(!1),"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),this.renderSelectionActionWizard(t,n)}):(d.setForceSelection(!1),this.renderSelectionActionWizard(t,n))},this.addIntegrityCheckWarningToWizard=()=>{d.addSlide("integrity-warning","Warning",TYPO3.lang["integrity.hasIssuesDescription"]+"<br>"+TYPO3.lang["integrity.hasIssuesQuestion"],s.SeverityEnum.warning)},this.runMassAction=e=>{const t=a.default(e.currentTarget).val(),s="discard"!==t;0!==t.length&&(s?this.checkIntegrity({language:this.settings.language,type:t}).then(async e=>{d.setForceSelection(!1),"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),this.renderMassActionWizard(t)}):(d.setForceSelection(!1),this.renderMassActionWizard(t)))},this.sendToSpecificStageAction=e=>{const t=[],s=a.default(e.currentTarget).val();for(let e=0;e<this.markedRecordsForMassAction.length;++e){const a=this.markedRecordsForMassAction[e].split(":");t.push({table:a[0],uid:a[1],t3ver_oid:a[2]})}this.sendRemoteRequest(this.generateRemoteActionsPayload("sendToSpecificStageWindow",[s,t])).then(async e=>{const a=this.renderSendToStageWindow(await e.resolve());a.on("button.clicked",e=>{if("ok"===e.target.name){const n=r.convertFormToObject(e.currentTarget.querySelector("form"));n.affects={elements:t,nextStage:s},this.sendRemoteRequest([this.generateRemoteActionsPayload("sendToSpecificStageExecute",[n]),this.generateRemotePayload("getWorkspaceInfos",this.settings)]).then(async e=>{const t=await e.resolve();a.modal("hide"),this.renderWorkspaceInfos(t[1].result),u.refreshPageTree()})}}).on("modal-destroyed",()=>{this.elements.$chooseStageAction.val("")})})},this.generatePreviewLinks=()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("generateWorkspacePreviewLinksForAllLanguages",[this.settings.id])).then(async e=>{const t=(await e.resolve())[0].result,n=a.default("<dl />");a.default.each(t,(e,t)=>{n.append(a.default("<dt />").text(e),a.default("<dd />").append(a.default("<a />",{href:t,target:"_blank"}).text(t)))}),i.show(TYPO3.lang.previewLink,n,s.SeverityEnum.info,[{text:TYPO3.lang.ok,active:!0,btnClass:"btn-info",name:"ok",trigger:()=>{i.currentModal.trigger("modal-dismiss")}}],["modal-inner-scroll"])})},a.default(()=>{this.getElements(),this.registerEvents(),this.notifyWorkspaceSwitchAction(),this.settings.depth=this.elements.$depthSelector.val(),this.settings.language=this.elements.$languageSelector.val(),this.elements.$container.length&&this.getWorkspaceInfos()})}static refreshPageTree(){top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh"))}static generateDiffView(e){const t=a.default("<div />",{class:"diff"});for(let s of e)t.append(a.default("<div />",{class:"diff-item"}).append(a.default("<div />",{class:"diff-item-title"}).text(s.label),a.default("<div />",{class:"diff-item-result diff-item-result-inline"}).html(s.content)));return t}static generateCommentView(e){const t=a.default("<div />");for(let s of e){const e=a.default("<div />",{class:"panel panel-default"});s.user_comment.length>0&&e.append(a.default("<div />",{class:"panel-body"}).html(s.user_comment)),e.append(a.default("<div />",{class:"panel-footer"}).append(a.default("<span />",{class:"label label-success"}).text(s.stage_title),a.default("<span />",{class:"label label-info"}).text(s.tstamp))),t.append(a.default("<div />",{class:"media"}).append(a.default("<div />",{class:"media-left text-center"}).text(s.user_username).prepend(a.default("<div />").html(s.user_avatar)),a.default("<div />",{class:"media-body"}).append(e)))}return t}static generateHistoryView(e){const t=a.default("<div />");for(let s of e){const e=a.default("<div />",{class:"panel panel-default"});let n;if("object"==typeof s.differences){if(0===s.differences.length)continue;n=a.default("<div />",{class:"diff"});for(let e=0;e<s.differences.length;++e)n.append(a.default("<div />",{class:"diff-item"}).append(a.default("<div />",{class:"diff-item-title"}).text(s.differences[e].label),a.default("<div />",{class:"diff-item-result diff-item-result-inline"}).html(s.differences[e].html)));e.append(a.default("<div />").append(n))}else e.append(a.default("<div />",{class:"panel-body"}).text(s.differences));e.append(a.default("<div />",{class:"panel-footer"}).append(a.default("<span />",{class:"label label-info"}).text(s.datetime))),t.append(a.default("<div />",{class:"media"}).append(a.default("<div />",{class:"media-left text-center"}).text(s.user).prepend(a.default("<div />").html(s.user_avatar)),a.default("<div />",{class:"media-body"}).append(e)))}return t}notifyWorkspaceSwitchAction(){const e=document.querySelector("main[data-workspace-switch-action]");if(e.dataset.workspaceSwitchAction){const t=JSON.parse(e.dataset.workspaceSwitchAction);top.TYPO3.WorkspacesMenu.performWorkspaceSwitch(t.id,t.title),top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh")),top.TYPO3.ModuleMenu.App.refreshMenu()}}checkIntegrity(e){return this.sendRemoteRequest(this.generateRemotePayload("checkIntegrity",e))}getElements(){this.elements.$searchForm=a.default(h.searchForm),this.elements.$searchTextField=a.default(h.searchTextField),this.elements.$searchSubmitBtn=a.default(h.searchSubmitBtn),this.elements.$depthSelector=a.default(h.depthSelector),this.elements.$languageSelector=a.default(h.languageSelector),this.elements.$container=a.default(h.container),this.elements.$contentsContainer=a.default(h.contentsContainer),this.elements.$noContentsContainer=a.default(h.noContentsContainer),this.elements.$tableBody=this.elements.$contentsContainer.find("tbody"),this.elements.$actionIcons=a.default(h.actionIcons),this.elements.$workspaceActions=a.default(h.workspaceActions),this.elements.$chooseStageAction=a.default(h.chooseStageAction),this.elements.$chooseSelectionAction=a.default(h.chooseSelectionAction),this.elements.$chooseMassAction=a.default(h.chooseMassAction),this.elements.$previewLinksButton=a.default(h.previewLinksButton),this.elements.$pagination=a.default(h.pagination)}registerEvents(){a.default(document).on("click",'[data-action="publish"]',e=>{const t=e.target.closest("tr");this.checkIntegrity({selection:[{liveId:t.dataset.uid,versionId:t.dataset.t3ver_oid,table:t.dataset.table}],type:"selection"}).then(async e=>{"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),d.setForceSelection(!1),d.addSlide("publish-confirm","Publish",TYPO3.lang["window.publish.message"],s.SeverityEnum.info),d.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("publishSingleRecord",[t.dataset.table,t.dataset.t3ver_oid,t.dataset.uid])).then(()=>{d.dismiss(),this.getWorkspaceInfos(),u.refreshPageTree()})}).done(()=>{d.show()})})}).on("click",'[data-action="prevstage"]',e=>{this.sendToStage(a.default(e.currentTarget).closest("tr"),"prev")}).on("click",'[data-action="nextstage"]',e=>{this.sendToStage(a.default(e.currentTarget).closest("tr"),"next")}).on("click",'[data-action="changes"]',this.viewChanges).on("click",'[data-action="preview"]',this.openPreview.bind(this)).on("click",'[data-action="open"]',e=>{const t=e.currentTarget.closest("tr");let a=TYPO3.settings.FormEngine.moduleUrl+"&returnUrl="+encodeURIComponent(document.location.href)+"&id="+TYPO3.settings.Workspaces.id+"&edit["+t.dataset.table+"]["+t.dataset.uid+"]=edit";window.location.href=a}).on("click",'[data-action="version"]',e=>{const t=e.currentTarget.closest("tr"),a="pages"===t.dataset.table?t.dataset.t3ver_oid:t.dataset.pid;window.location.href=top.TYPO3.configuration.pageModuleUrl+"&id="+a+"&returnUrl="+encodeURIComponent(window.location.href)}).on("click",'[data-action="remove"]',this.confirmDeleteRecordFromWorkspace).on("click",'[data-action="expand"]',e=>{const t=a.default(e.currentTarget);let s;s="true"===t.first().attr("aria-expanded")?"apps-pagetree-expand":"apps-pagetree-collapse",t.empty().append(this.getPreRenderedIcon(s))}),a.default(window.top.document).on("click",".t3js-workspace-recipients-selectall",()=>{a.default(".t3js-workspace-recipient",window.top.document).not(":disabled").prop("checked",!0)}).on("click",".t3js-workspace-recipients-deselectall",()=>{a.default(".t3js-workspace-recipient",window.top.document).not(":disabled").prop("checked",!1)}),this.elements.$searchForm.on("submit",e=>{e.preventDefault(),this.settings.filterTxt=this.elements.$searchTextField.val(),this.getWorkspaceInfos()}),this.elements.$searchTextField.on("keyup",e=>{""!==e.target.value?this.elements.$searchSubmitBtn.removeClass("disabled"):(this.elements.$searchSubmitBtn.addClass("disabled"),this.getWorkspaceInfos())});const e=this.elements.$searchTextField.get(0);void 0!==e&&e.clearable({onClear:()=>{this.elements.$searchSubmitBtn.addClass("disabled"),this.settings.filterTxt="",this.getWorkspaceInfos()}}),new g.default("checkbox:state:changed",this.handleCheckboxStateChanged).bindTo(document),this.elements.$depthSelector.on("change",e=>{const t=e.target.value;o.set("moduleData.workspaces.settings.depth",t),this.settings.depth=t,this.getWorkspaceInfos()}),this.elements.$previewLinksButton.on("click",this.generatePreviewLinks),this.elements.$languageSelector.on("change",e=>{const t=a.default(e.target);o.set("moduleData.workspaces.settings.language",t.val()),this.settings.language=t.val(),this.sendRemoteRequest(this.generateRemotePayload("getWorkspaceInfos",this.settings)).then(async e=>{const a=await e.resolve();this.elements.$languageSelector.prev().html(t.find(":selected").data("icon")),this.renderWorkspaceInfos(a[0].result)})}),this.elements.$chooseStageAction.on("change",this.sendToSpecificStageAction),this.elements.$chooseSelectionAction.on("change",this.runSelectionAction),this.elements.$chooseMassAction.on("change",this.runMassAction),this.elements.$pagination.on("click","a[data-action]",e=>{e.preventDefault();const t=a.default(e.currentTarget);let s=!1;switch(t.data("action")){case"previous":this.paging.currentPage>1&&(this.paging.currentPage--,s=!0);break;case"next":this.paging.currentPage<this.paging.totalPages&&(this.paging.currentPage++,s=!0);break;case"page":this.paging.currentPage=parseInt(t.data("page"),10),s=!0;break;default:throw'Unknown action "'+t.data("action")+'"'}s&&(this.settings.start=parseInt(this.settings.limit.toString(),10)*(this.paging.currentPage-1),this.getWorkspaceInfos())})}sendToStage(e,t){let a,s,n;if("next"===t)a=e.data("nextStage"),s="sendToNextStageWindow",n="sendToNextStageExecute";else{if("prev"!==t)throw"Invalid direction given.";a=e.data("prevStage"),s="sendToPrevStageWindow",n="sendToPrevStageExecute"}this.sendRemoteRequest(this.generateRemoteActionsPayload(s,[e.data("uid"),e.data("table"),e.data("t3ver_oid")])).then(async t=>{const s=this.renderSendToStageWindow(await t.resolve());s.on("button.clicked",t=>{if("ok"===t.target.name){const i=r.convertFormToObject(t.currentTarget.querySelector("form"));i.affects={table:e.data("table"),nextStage:a,t3ver_oid:e.data("t3ver_oid"),uid:e.data("uid"),elements:[]},this.sendRemoteRequest([this.generateRemoteActionsPayload(n,[i]),this.generateRemotePayload("getWorkspaceInfos",this.settings)]).then(async e=>{const t=await e.resolve();s.modal("hide"),this.renderWorkspaceInfos(t[1].result),u.refreshPageTree()})}})})}getWorkspaceInfos(){this.sendRemoteRequest(this.generateRemotePayload("getWorkspaceInfos",this.settings)).then(async e=>{this.renderWorkspaceInfos((await e.resolve())[0].result)})}renderWorkspaceInfos(e){this.elements.$tableBody.children().remove(),this.resetMassActionState(e.data.length),this.buildPagination(e.total),0===e.total?(this.elements.$contentsContainer.hide(),this.elements.$noContentsContainer.show()):(this.elements.$contentsContainer.show(),this.elements.$noContentsContainer.hide());for(let t=0;t<e.data.length;++t){const s=e.data[t],n=a.default("<div />",{class:"btn-group"});let i,o=s.Workspaces_CollectionChildren>0&&""!==s.Workspaces_CollectionCurrent;n.append(this.getAction(o,"expand",s.expanded?"apps-pagetree-expand":"apps-pagetree-collapse").attr("title",TYPO3.lang["tooltip.expand"]).attr("data-bs-target",'[data-collection="'+s.Workspaces_CollectionCurrent+'"]').attr("aria-expanded",!o||s.expanded?"true":"false").attr("data-bs-toggle","collapse"),this.getAction(s.hasChanges,"changes","actions-document-info").attr("title",TYPO3.lang["tooltip.showChanges"]),this.getAction(s.allowedAction_publish&&""===s.Workspaces_CollectionParent,"publish","actions-version-swap-version").attr("title",TYPO3.lang["tooltip.publish"]),this.getAction(s.allowedAction_view,"preview","actions-version-workspace-preview").attr("title",TYPO3.lang["tooltip.viewElementAction"]),this.getAction(s.allowedAction_edit,"open","actions-open").attr("title",TYPO3.lang["tooltip.editElementAction"]),this.getAction(!0,"version","actions-version-page-open").attr("title",TYPO3.lang["tooltip.openPage"]),this.getAction(s.allowedAction_delete,"remove","actions-version-document-remove").attr("title",TYPO3.lang["tooltip.discardVersion"])),""!==s.integrity.messages&&(i=a.default(TYPO3.settings.Workspaces.icons[s.integrity.status]),i.attr("data-bs-toggle","tooltip").attr("data-bs-placement","top").attr("data-bs-html","true").attr("title",s.integrity.messages)),this.latestPath!==s.path_Workspace&&(this.latestPath=s.path_Workspace,this.elements.$tableBody.append(a.default("<tr />").append(a.default("<th />"),a.default("<th />",{colspan:6}).html('<span title="'+s.path_Workspace+'">'+s.path_Workspace_crop+"</span>"))));const r=a.default("<span />",{class:"form-check form-toggle"}).append(a.default("<input />",{type:"checkbox",class:"form-check-input t3js-multi-record-selection-check"})),d={"data-uid":s.uid,"data-pid":s.livepid,"data-t3ver_oid":s.t3ver_oid,"data-t3ver_wsid":s.t3ver_wsid,"data-table":s.table,"data-next-stage":s.value_nextStage,"data-prev-stage":s.value_prevStage,"data-stage":s.stage};if(""!==s.Workspaces_CollectionParent){let t=e.data.find(e=>e.Workspaces_CollectionCurrent===s.Workspaces_CollectionParent);d["data-collection"]=s.Workspaces_CollectionParent,d.class="collapse"+(t.expanded?" show":"")}this.elements.$tableBody.append(a.default("<tr />",d).append(a.default("<td />").empty().append(r),a.default("<td />",{class:"t3js-title-workspace",style:s.Workspaces_CollectionLevel>0?"padding-left: "+this.indentationPadding*s.Workspaces_CollectionLevel+"px":""}).html(s.icon_Workspace+'&nbsp;<a href="#" data-action="changes"><span class="workspace-state-'+s.state_Workspace+'" title="'+s.label_Workspace+'">'+s.label_Workspace_crop+"</span></a>"),a.default("<td />",{class:"t3js-title-live"}).html(s.icon_Live+'&nbsp;<span class"workspace-live-title title="'+s.label_Live+'">'+s.label_Live_crop+"</span>"),a.default("<td />").text(s.label_Stage),a.default("<td />").empty().append(i),a.default("<td />").html(s.language.icon),a.default("<td />",{class:"text-right nowrap"}).append(n))),l.initialize('[data-bs-toggle="tooltip"]',{delay:{show:500,hide:100},trigger:"hover",container:"body"})}}buildPagination(e){if(0===e)return void this.elements.$pagination.contents().remove();if(this.paging.totalItems=e,this.paging.totalPages=Math.ceil(e/parseInt(this.settings.limit.toString(),10)),1===this.paging.totalPages)return void this.elements.$pagination.contents().remove();const t=a.default("<ul />",{class:"pagination"}),s=[],n=a.default("<li />",{class:"page-item"}).append(a.default("<a />",{class:"page-link","data-action":"previous"}).append(a.default("<span />",{class:"t3-icon fa fa-arrow-left"}))),i=a.default("<li />",{class:"page-item"}).append(a.default("<a />",{class:"page-link","data-action":"next"}).append(a.default("<span />",{class:"t3-icon fa fa-arrow-right"})));1===this.paging.currentPage&&n.disablePagingAction(),this.paging.currentPage===this.paging.totalPages&&i.disablePagingAction();for(let e=1;e<=this.paging.totalPages;e++){const t=a.default("<li />",{class:"page-item"+(this.paging.currentPage===e?" active":"")});t.append(a.default("<a />",{class:"page-link","data-action":"page","data-page":e}).append(a.default("<span />").text(e))),s.push(t)}t.append(n,s,i),this.elements.$pagination.empty().append(t)}openPreview(e){const t=a.default(e.currentTarget).closest("tr");this.sendRemoteRequest(this.generateRemoteActionsPayload("viewSingleRecord",[t.data("table"),t.data("uid")])).then(async e=>{const t=(await e.resolve())[0].result;p.localOpen(t)})}renderSelectionActionWizard(e,t){d.addSlide("mass-action-confirmation",TYPO3.lang["window.selectionAction.title"],"<p>"+(new c).encodeHtml(TYPO3.lang["tooltip."+e+"Selected"])+"</p>",s.SeverityEnum.warning),d.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("executeSelectionAction",{action:e,selection:t})).then(()=>{this.markedRecordsForMassAction=[],this.getWorkspaceInfos(),d.dismiss(),u.refreshPageTree()})}).done(()=>{d.show(),d.getComponent().on("wizard-dismissed",()=>{this.elements.$chooseSelectionAction.val("")})})}renderMassActionWizard(e){let t;switch(e){case"publish":t="publishWorkspace";break;case"discard":t="flushWorkspace";break;default:throw"Invalid mass action "+e+" called."}const a=new c;d.setForceSelection(!1),d.addSlide("mass-action-confirmation",TYPO3.lang["window.massAction.title"],"<p>"+a.encodeHtml(TYPO3.lang["tooltip."+e+"All"])+"<br><br>"+a.encodeHtml(TYPO3.lang["tooltip.affectWholeWorkspace"])+"</p>",s.SeverityEnum.warning);const n=async e=>{const a=(await e.resolve())[0].result;a.processed<a.total?this.sendRemoteRequest(this.generateRemoteMassActionsPayload(t,a)).then(n):(this.getWorkspaceInfos(),d.dismiss())};d.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteMassActionsPayload(t,{init:!0,total:0,processed:0,language:this.settings.language})).then(n)}).done(()=>{d.show(),d.getComponent().on("wizard-dismissed",()=>{this.elements.$chooseMassAction.val("")})})}getAction(e,t,s){return e?a.default("<button />",{class:"btn btn-default","data-action":t,"data-bs-toggle":"tooltip"}).append(this.getPreRenderedIcon(s)):a.default("<span />",{class:"btn btn-default disabled"}).append(this.getPreRenderedIcon("empty-empty"))}getPreRenderedIcon(e){return this.elements.$actionIcons.find('[data-identifier="'+e+'"]').clone()}resetMassActionState(e){this.markedRecordsForMassAction=[],e&&(this.elements.$workspaceActions.removeClass("hidden"),this.elements.$chooseMassAction.prop("disabled",!1)),document.dispatchEvent(new Event("multiRecordSelection:actions:hide"))}}return a.default.fn.disablePagingAction=function(){a.default(this).addClass("disabled").find(".t3-icon").unwrap().wrap(a.default("<span />",{class:"page-link"}))},new u}));
\ No newline at end of file
+var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};define(["require","exports","jquery","TYPO3/CMS/Backend/Enum/Severity","./Workspaces","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Storage/Persistent","TYPO3/CMS/Backend/Tooltip","TYPO3/CMS/Backend/Utility","TYPO3/CMS/Backend/Wizard","TYPO3/CMS/Core/SecurityUtility","TYPO3/CMS/Backend/WindowManager","TYPO3/CMS/Core/Event/RegularEvent","TYPO3/CMS/Backend/Input/Clearable"],(function(e,t,a,s,n,i,o,l,r,c,d,p,h){"use strict";var g;a=__importDefault(a),n=__importDefault(n),h=__importDefault(h),function(e){e.searchForm="#workspace-settings-form",e.searchTextField='#workspace-settings-form input[name="search-text"]',e.searchSubmitBtn='#workspace-settings-form button[type="submit"]',e.depthSelector='#workspace-settings-form [name="depth"]',e.languageSelector='#workspace-settings-form select[name="languages"]',e.workspaceActions=".workspace-actions",e.chooseStageAction='.workspace-actions [name="stage-action"]',e.chooseSelectionAction='.workspace-actions [name="selection-action"]',e.chooseMassAction='.workspace-actions [name="mass-action"]',e.container="#workspace-panel",e.contentsContainer="#workspace-contents",e.noContentsContainer="#workspace-contents-empty",e.actionIcons="#workspace-action-icons",e.previewLinksButton=".t3js-preview-link",e.pagination="#workspace-pagination"}(g||(g={}));class u extends n.default{constructor(){super(),this.elements={},this.settings={dir:"ASC",id:TYPO3.settings.Workspaces.id,depth:1,language:"all",limit:30,query:"",sort:"label_Live",start:0,filterTxt:""},this.paging={currentPage:1,totalPages:1,totalItems:0},this.latestPath="",this.markedRecordsForMassAction=[],this.indentationPadding=26,this.handleCheckboxStateChanged=e=>{const t=a.default(e.target),s=t.parents("tr"),n=t.prop("checked"),i=s.data("table")+":"+s.data("uid")+":"+s.data("t3ver_oid");if(n)this.markedRecordsForMassAction.push(i);else{const e=this.markedRecordsForMassAction.indexOf(i);e>-1&&this.markedRecordsForMassAction.splice(e,1)}s.data("collectionCurrent")?u.changeCollectionChildrenState(s.data("collectionCurrent"),n):s.data("collection")&&(u.changeCollectionChildrenState(s.data("collection"),n),u.changeCollectionParentState(s.data("collection"),n)),this.elements.$chooseMassAction.prop("disabled",this.markedRecordsForMassAction.length>0)},this.viewChanges=e=>{e.preventDefault();const t=a.default(e.currentTarget).closest("tr");this.sendRemoteRequest(this.generateRemotePayload("getRowDetails",{stage:t.data("stage"),t3ver_oid:t.data("t3ver_oid"),table:t.data("table"),uid:t.data("uid"),filterFields:!0})).then(async e=>{const n=(await e.resolve())[0].result.data[0],o=a.default("<div />"),l=a.default("<ul />",{class:"nav nav-tabs",role:"tablist"}),r=a.default("<div />",{class:"tab-content"}),c=[];o.append(a.default("<p />").html(TYPO3.lang.path.replace("{0}",n.path_Live)),a.default("<p />").html(TYPO3.lang.current_step.replace("{0}",n.label_Stage).replace("{1}",n.stage_position).replace("{2}",n.stage_count))),n.diff.length>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-changes","aria-controls":"workspace-changes",role:"tab","data-bs-toggle":"tab"}).text(TYPO3.lang["window.recordChanges.tabs.changeSummary"]))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-changes"}).append(a.default("<div />",{class:"form-section"}).append(u.generateDiffView(n.diff))))),n.comments.length>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-comments","aria-controls":"workspace-comments",role:"tab","data-bs-toggle":"tab"}).html(TYPO3.lang["window.recordChanges.tabs.comments"]+"&nbsp;").append(a.default("<span />",{class:"badge"}).text(n.comments.length)))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-comments"}).append(a.default("<div />",{class:"form-section"}).append(u.generateCommentView(n.comments))))),n.history.total>0&&(l.append(a.default("<li />",{role:"presentation",class:"nav-item"}).append(a.default("<a />",{class:"nav-link",href:"#workspace-history","aria-controls":"workspace-history",role:"tab","data-bs-toggle":"tab"}).text(TYPO3.lang["window.recordChanges.tabs.history"]))),r.append(a.default("<div />",{role:"tabpanel",class:"tab-pane",id:"workspace-history"}).append(a.default("<div />",{class:"form-section"}).append(u.generateHistoryView(n.history.data))))),l.find("li > a").first().addClass("active"),r.find(".tab-pane").first().addClass("active"),o.append(a.default("<div />").append(l,r)),!1!==n.label_PrevStage&&t.data("stage")!==t.data("prevStage")&&c.push({text:n.label_PrevStage.title,active:!0,btnClass:"btn-default",name:"prevstage",trigger:()=>{i.currentModal.trigger("modal-dismiss"),this.sendToStage(t,"prev")}}),!1!==n.label_NextStage&&c.push({text:n.label_NextStage.title,active:!0,btnClass:"btn-default",name:"nextstage",trigger:()=>{i.currentModal.trigger("modal-dismiss"),this.sendToStage(t,"next")}}),c.push({text:TYPO3.lang.close,active:!0,btnClass:"btn-info",name:"cancel",trigger:()=>{i.currentModal.trigger("modal-dismiss")}}),i.advanced({type:i.types.default,title:TYPO3.lang["window.recordInformation"].replace("{0}",t.find(".t3js-title-live").text().trim()),content:o,severity:s.SeverityEnum.info,buttons:c,size:i.sizes.medium})})},this.confirmDeleteRecordFromWorkspace=e=>{const t=a.default(e.target).closest("tr"),n=i.confirm(TYPO3.lang["window.discard.title"],TYPO3.lang["window.discard.message"],s.SeverityEnum.warning,[{text:TYPO3.lang.cancel,active:!0,btnClass:"btn-default",name:"cancel",trigger:()=>{n.modal("hide")}},{text:TYPO3.lang.ok,btnClass:"btn-warning",name:"ok"}]);n.on("button.clicked",e=>{"ok"===e.target.name&&this.sendRemoteRequest([this.generateRemoteActionsPayload("deleteSingleRecord",[t.data("table"),t.data("uid")])]).then(()=>{n.modal("hide"),this.getWorkspaceInfos(),u.refreshPageTree()})})},this.runSelectionAction=e=>{const t=a.default(e.currentTarget).val(),s="discard"!==t;if(0===t.length)return;const n=[];for(let e=0;e<this.markedRecordsForMassAction.length;++e){const t=this.markedRecordsForMassAction[e].split(":");n.push({table:t[0],liveId:t[2],versionId:t[1]})}s?this.checkIntegrity({selection:n,type:"selection"}).then(async e=>{c.setForceSelection(!1),"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),this.renderSelectionActionWizard(t,n)}):(c.setForceSelection(!1),this.renderSelectionActionWizard(t,n))},this.addIntegrityCheckWarningToWizard=()=>{c.addSlide("integrity-warning","Warning",TYPO3.lang["integrity.hasIssuesDescription"]+"<br>"+TYPO3.lang["integrity.hasIssuesQuestion"],s.SeverityEnum.warning)},this.runMassAction=e=>{const t=a.default(e.currentTarget).val(),s="discard"!==t;0!==t.length&&(s?this.checkIntegrity({language:this.settings.language,type:t}).then(async e=>{c.setForceSelection(!1),"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),this.renderMassActionWizard(t)}):(c.setForceSelection(!1),this.renderMassActionWizard(t)))},this.sendToSpecificStageAction=e=>{const t=[],s=a.default(e.currentTarget).val();for(let e=0;e<this.markedRecordsForMassAction.length;++e){const a=this.markedRecordsForMassAction[e].split(":");t.push({table:a[0],uid:a[1],t3ver_oid:a[2]})}this.sendRemoteRequest(this.generateRemoteActionsPayload("sendToSpecificStageWindow",[s,t])).then(async e=>{const a=this.renderSendToStageWindow(await e.resolve());a.on("button.clicked",e=>{if("ok"===e.target.name){const n=r.convertFormToObject(e.currentTarget.querySelector("form"));n.affects={elements:t,nextStage:s},this.sendRemoteRequest([this.generateRemoteActionsPayload("sendToSpecificStageExecute",[n]),this.generateRemotePayload("getWorkspaceInfos",this.settings)]).then(async e=>{const t=await e.resolve();a.modal("hide"),this.renderWorkspaceInfos(t[1].result),u.refreshPageTree()})}}).on("modal-destroyed",()=>{this.elements.$chooseStageAction.val("")})})},this.generatePreviewLinks=()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("generateWorkspacePreviewLinksForAllLanguages",[this.settings.id])).then(async e=>{const t=(await e.resolve())[0].result,n=a.default("<dl />");a.default.each(t,(e,t)=>{n.append(a.default("<dt />").text(e),a.default("<dd />").append(a.default("<a />",{href:t,target:"_blank"}).text(t)))}),i.show(TYPO3.lang.previewLink,n,s.SeverityEnum.info,[{text:TYPO3.lang.ok,active:!0,btnClass:"btn-info",name:"ok",trigger:()=>{i.currentModal.trigger("modal-dismiss")}}],["modal-inner-scroll"])})},a.default(()=>{this.getElements(),this.registerEvents(),this.notifyWorkspaceSwitchAction(),this.settings.depth=this.elements.$depthSelector.val(),this.settings.language=this.elements.$languageSelector.val(),this.elements.$container.length&&this.getWorkspaceInfos()})}static refreshPageTree(){top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh"))}static generateDiffView(e){const t=a.default("<div />",{class:"diff"});for(let s of e)t.append(a.default("<div />",{class:"diff-item"}).append(a.default("<div />",{class:"diff-item-title"}).text(s.label),a.default("<div />",{class:"diff-item-result diff-item-result-inline"}).html(s.content)));return t}static generateCommentView(e){const t=a.default("<div />");for(let s of e){const e=a.default("<div />",{class:"panel panel-default"});s.user_comment.length>0&&e.append(a.default("<div />",{class:"panel-body"}).html(s.user_comment)),e.append(a.default("<div />",{class:"panel-footer"}).append(a.default("<span />",{class:"label label-success"}).text(s.stage_title),a.default("<span />",{class:"label label-info"}).text(s.tstamp))),t.append(a.default("<div />",{class:"media"}).append(a.default("<div />",{class:"media-left text-center"}).text(s.user_username).prepend(a.default("<div />").html(s.user_avatar)),a.default("<div />",{class:"media-body"}).append(e)))}return t}static generateHistoryView(e){const t=a.default("<div />");for(let s of e){const e=a.default("<div />",{class:"panel panel-default"});let n;if("object"==typeof s.differences){if(0===s.differences.length)continue;n=a.default("<div />",{class:"diff"});for(let e=0;e<s.differences.length;++e)n.append(a.default("<div />",{class:"diff-item"}).append(a.default("<div />",{class:"diff-item-title"}).text(s.differences[e].label),a.default("<div />",{class:"diff-item-result diff-item-result-inline"}).html(s.differences[e].html)));e.append(a.default("<div />").append(n))}else e.append(a.default("<div />",{class:"panel-body"}).text(s.differences));e.append(a.default("<div />",{class:"panel-footer"}).append(a.default("<span />",{class:"label label-info"}).text(s.datetime))),t.append(a.default("<div />",{class:"media"}).append(a.default("<div />",{class:"media-left text-center"}).text(s.user).prepend(a.default("<div />").html(s.user_avatar)),a.default("<div />",{class:"media-body"}).append(e)))}return t}static changeCollectionParentState(e,t){const a=document.querySelector('tr[data-collection-current="'+e+'"] input[type=checkbox]');null!==a&&a.checked!==t&&(a.checked=t,a.dataset.manuallyChanged="true",a.dispatchEvent(new Event("checkbox:state:changed",{bubbles:!0,cancelable:!1})))}static changeCollectionChildrenState(e,t){const a=document.querySelectorAll('tr[data-collection="'+e+'"] input[type=checkbox]');a.length&&a.forEach(e=>{e.checked!==t&&(e.checked=t,e.dataset.manuallyChanged="true",e.dispatchEvent(new Event("checkbox:state:changed",{bubbles:!0,cancelable:!1})))})}notifyWorkspaceSwitchAction(){const e=document.querySelector("main[data-workspace-switch-action]");if(e.dataset.workspaceSwitchAction){const t=JSON.parse(e.dataset.workspaceSwitchAction);top.TYPO3.WorkspacesMenu.performWorkspaceSwitch(t.id,t.title),top.document.dispatchEvent(new CustomEvent("typo3:pagetree:refresh")),top.TYPO3.ModuleMenu.App.refreshMenu()}}checkIntegrity(e){return this.sendRemoteRequest(this.generateRemotePayload("checkIntegrity",e))}getElements(){this.elements.$searchForm=a.default(g.searchForm),this.elements.$searchTextField=a.default(g.searchTextField),this.elements.$searchSubmitBtn=a.default(g.searchSubmitBtn),this.elements.$depthSelector=a.default(g.depthSelector),this.elements.$languageSelector=a.default(g.languageSelector),this.elements.$container=a.default(g.container),this.elements.$contentsContainer=a.default(g.contentsContainer),this.elements.$noContentsContainer=a.default(g.noContentsContainer),this.elements.$tableBody=this.elements.$contentsContainer.find("tbody"),this.elements.$actionIcons=a.default(g.actionIcons),this.elements.$workspaceActions=a.default(g.workspaceActions),this.elements.$chooseStageAction=a.default(g.chooseStageAction),this.elements.$chooseSelectionAction=a.default(g.chooseSelectionAction),this.elements.$chooseMassAction=a.default(g.chooseMassAction),this.elements.$previewLinksButton=a.default(g.previewLinksButton),this.elements.$pagination=a.default(g.pagination)}registerEvents(){a.default(document).on("click",'[data-action="publish"]',e=>{const t=e.target.closest("tr");this.checkIntegrity({selection:[{liveId:t.dataset.uid,versionId:t.dataset.t3ver_oid,table:t.dataset.table}],type:"selection"}).then(async e=>{"warning"===(await e.resolve())[0].result.result&&this.addIntegrityCheckWarningToWizard(),c.setForceSelection(!1),c.addSlide("publish-confirm","Publish",TYPO3.lang["window.publish.message"],s.SeverityEnum.info),c.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("publishSingleRecord",[t.dataset.table,t.dataset.t3ver_oid,t.dataset.uid])).then(()=>{c.dismiss(),this.getWorkspaceInfos(),u.refreshPageTree()})}).done(()=>{c.show()})})}).on("click",'[data-action="prevstage"]',e=>{this.sendToStage(a.default(e.currentTarget).closest("tr"),"prev")}).on("click",'[data-action="nextstage"]',e=>{this.sendToStage(a.default(e.currentTarget).closest("tr"),"next")}).on("click",'[data-action="changes"]',this.viewChanges).on("click",'[data-action="preview"]',this.openPreview.bind(this)).on("click",'[data-action="open"]',e=>{const t=e.currentTarget.closest("tr");let a=TYPO3.settings.FormEngine.moduleUrl+"&returnUrl="+encodeURIComponent(document.location.href)+"&id="+TYPO3.settings.Workspaces.id+"&edit["+t.dataset.table+"]["+t.dataset.uid+"]=edit";window.location.href=a}).on("click",'[data-action="version"]',e=>{const t=e.currentTarget.closest("tr"),a="pages"===t.dataset.table?t.dataset.t3ver_oid:t.dataset.pid;window.location.href=top.TYPO3.configuration.pageModuleUrl+"&id="+a+"&returnUrl="+encodeURIComponent(window.location.href)}).on("click",'[data-action="remove"]',this.confirmDeleteRecordFromWorkspace).on("click",'[data-action="expand"]',e=>{const t=a.default(e.currentTarget);let s;s="true"===t.first().attr("aria-expanded")?"apps-pagetree-expand":"apps-pagetree-collapse",t.empty().append(this.getPreRenderedIcon(s))}),a.default(window.top.document).on("click",".t3js-workspace-recipients-selectall",()=>{a.default(".t3js-workspace-recipient",window.top.document).not(":disabled").prop("checked",!0)}).on("click",".t3js-workspace-recipients-deselectall",()=>{a.default(".t3js-workspace-recipient",window.top.document).not(":disabled").prop("checked",!1)}),this.elements.$searchForm.on("submit",e=>{e.preventDefault(),this.settings.filterTxt=this.elements.$searchTextField.val(),this.getWorkspaceInfos()}),this.elements.$searchTextField.on("keyup",e=>{""!==e.target.value?this.elements.$searchSubmitBtn.removeClass("disabled"):(this.elements.$searchSubmitBtn.addClass("disabled"),this.getWorkspaceInfos())});const e=this.elements.$searchTextField.get(0);void 0!==e&&e.clearable({onClear:()=>{this.elements.$searchSubmitBtn.addClass("disabled"),this.settings.filterTxt="",this.getWorkspaceInfos()}}),new h.default("checkbox:state:changed",this.handleCheckboxStateChanged).bindTo(document),this.elements.$depthSelector.on("change",e=>{const t=e.target.value;o.set("moduleData.workspaces.settings.depth",t),this.settings.depth=t,this.getWorkspaceInfos()}),this.elements.$previewLinksButton.on("click",this.generatePreviewLinks),this.elements.$languageSelector.on("change",e=>{const t=a.default(e.target);o.set("moduleData.workspaces.settings.language",t.val()),this.settings.language=t.val(),this.sendRemoteRequest(this.generateRemotePayload("getWorkspaceInfos",this.settings)).then(async e=>{const a=await e.resolve();this.elements.$languageSelector.prev().html(t.find(":selected").data("icon")),this.renderWorkspaceInfos(a[0].result)})}),this.elements.$chooseStageAction.on("change",this.sendToSpecificStageAction),this.elements.$chooseSelectionAction.on("change",this.runSelectionAction),this.elements.$chooseMassAction.on("change",this.runMassAction),this.elements.$pagination.on("click","a[data-action]",e=>{e.preventDefault();const t=a.default(e.currentTarget);let s=!1;switch(t.data("action")){case"previous":this.paging.currentPage>1&&(this.paging.currentPage--,s=!0);break;case"next":this.paging.currentPage<this.paging.totalPages&&(this.paging.currentPage++,s=!0);break;case"page":this.paging.currentPage=parseInt(t.data("page"),10),s=!0;break;default:throw'Unknown action "'+t.data("action")+'"'}s&&(this.settings.start=parseInt(this.settings.limit.toString(),10)*(this.paging.currentPage-1),this.getWorkspaceInfos())})}sendToStage(e,t){let a,s,n;if("next"===t)a=e.data("nextStage"),s="sendToNextStageWindow",n="sendToNextStageExecute";else{if("prev"!==t)throw"Invalid direction given.";a=e.data("prevStage"),s="sendToPrevStageWindow",n="sendToPrevStageExecute"}this.sendRemoteRequest(this.generateRemoteActionsPayload(s,[e.data("uid"),e.data("table"),e.data("t3ver_oid")])).then(async t=>{const s=this.renderSendToStageWindow(await t.resolve());s.on("button.clicked",t=>{if("ok"===t.target.name){const i=r.convertFormToObject(t.currentTarget.querySelector("form"));i.affects={table:e.data("table"),nextStage:a,t3ver_oid:e.data("t3ver_oid"),uid:e.data("uid"),elements:[]},this.sendRemoteRequest([this.generateRemoteActionsPayload(n,[i]),this.generateRemotePayload("getWorkspaceInfos",this.settings)]).then(async e=>{const t=await e.resolve();s.modal("hide"),this.renderWorkspaceInfos(t[1].result),u.refreshPageTree()})}})})}getWorkspaceInfos(){this.sendRemoteRequest(this.generateRemotePayload("getWorkspaceInfos",this.settings)).then(async e=>{this.renderWorkspaceInfos((await e.resolve())[0].result)})}renderWorkspaceInfos(e){this.elements.$tableBody.children().remove(),this.resetMassActionState(e.data.length),this.buildPagination(e.total),0===e.total?(this.elements.$contentsContainer.hide(),this.elements.$noContentsContainer.show()):(this.elements.$contentsContainer.show(),this.elements.$noContentsContainer.hide());for(let t=0;t<e.data.length;++t){const s=e.data[t],n=a.default("<div />",{class:"btn-group"});let i,o=s.Workspaces_CollectionChildren>0&&""!==s.Workspaces_CollectionCurrent;n.append(this.getAction(o,"expand",s.expanded?"apps-pagetree-expand":"apps-pagetree-collapse").attr("title",TYPO3.lang["tooltip.expand"]).attr("data-bs-target",'[data-collection="'+s.Workspaces_CollectionCurrent+'"]').attr("aria-expanded",!o||s.expanded?"true":"false").attr("data-bs-toggle","collapse"),this.getAction(s.hasChanges,"changes","actions-document-info").attr("title",TYPO3.lang["tooltip.showChanges"]),this.getAction(s.allowedAction_publish&&""===s.Workspaces_CollectionParent,"publish","actions-version-swap-version").attr("title",TYPO3.lang["tooltip.publish"]),this.getAction(s.allowedAction_view,"preview","actions-version-workspace-preview").attr("title",TYPO3.lang["tooltip.viewElementAction"]),this.getAction(s.allowedAction_edit,"open","actions-open").attr("title",TYPO3.lang["tooltip.editElementAction"]),this.getAction(!0,"version","actions-version-page-open").attr("title",TYPO3.lang["tooltip.openPage"]),this.getAction(s.allowedAction_delete,"remove","actions-version-document-remove").attr("title",TYPO3.lang["tooltip.discardVersion"])),""!==s.integrity.messages&&(i=a.default(TYPO3.settings.Workspaces.icons[s.integrity.status]),i.attr("data-bs-toggle","tooltip").attr("data-bs-placement","top").attr("data-bs-html","true").attr("title",s.integrity.messages)),this.latestPath!==s.path_Workspace&&(this.latestPath=s.path_Workspace,this.elements.$tableBody.append(a.default("<tr />").append(a.default("<th />"),a.default("<th />",{colspan:6}).html('<span title="'+s.path_Workspace+'">'+s.path_Workspace_crop+"</span>"))));const r=a.default("<span />",{class:"form-check form-toggle"}).append(a.default("<input />",{type:"checkbox",class:"form-check-input t3js-multi-record-selection-check"})),c={"data-uid":s.uid,"data-pid":s.livepid,"data-t3ver_oid":s.t3ver_oid,"data-t3ver_wsid":s.t3ver_wsid,"data-table":s.table,"data-next-stage":s.value_nextStage,"data-prev-stage":s.value_prevStage,"data-stage":s.stage};if(""!==s.Workspaces_CollectionParent){let t=e.data.find(e=>e.Workspaces_CollectionCurrent===s.Workspaces_CollectionParent);c["data-collection"]=s.Workspaces_CollectionParent,c.class="collapse"+(t.expanded?" show":"")}else""!==s.Workspaces_CollectionCurrent&&(c["data-collection-current"]=s.Workspaces_CollectionCurrent);this.elements.$tableBody.append(a.default("<tr />",c).append(a.default("<td />").empty().append(r),a.default("<td />",{class:"t3js-title-workspace",style:s.Workspaces_CollectionLevel>0?"padding-left: "+this.indentationPadding*s.Workspaces_CollectionLevel+"px":""}).html(s.icon_Workspace+'&nbsp;<a href="#" data-action="changes"><span class="workspace-state-'+s.state_Workspace+'" title="'+s.label_Workspace+'">'+s.label_Workspace_crop+"</span></a>"),a.default("<td />",{class:"t3js-title-live"}).html(s.icon_Live+'&nbsp;<span class"workspace-live-title title="'+s.label_Live+'">'+s.label_Live_crop+"</span>"),a.default("<td />").text(s.label_Stage),a.default("<td />").empty().append(i),a.default("<td />").html(s.language.icon),a.default("<td />",{class:"text-right nowrap"}).append(n))),l.initialize('[data-bs-toggle="tooltip"]',{delay:{show:500,hide:100},trigger:"hover",container:"body"})}}buildPagination(e){if(0===e)return void this.elements.$pagination.contents().remove();if(this.paging.totalItems=e,this.paging.totalPages=Math.ceil(e/parseInt(this.settings.limit.toString(),10)),1===this.paging.totalPages)return void this.elements.$pagination.contents().remove();const t=a.default("<ul />",{class:"pagination"}),s=[],n=a.default("<li />",{class:"page-item"}).append(a.default("<a />",{class:"page-link","data-action":"previous"}).append(a.default("<span />",{class:"t3-icon fa fa-arrow-left"}))),i=a.default("<li />",{class:"page-item"}).append(a.default("<a />",{class:"page-link","data-action":"next"}).append(a.default("<span />",{class:"t3-icon fa fa-arrow-right"})));1===this.paging.currentPage&&n.disablePagingAction(),this.paging.currentPage===this.paging.totalPages&&i.disablePagingAction();for(let e=1;e<=this.paging.totalPages;e++){const t=a.default("<li />",{class:"page-item"+(this.paging.currentPage===e?" active":"")});t.append(a.default("<a />",{class:"page-link","data-action":"page","data-page":e}).append(a.default("<span />").text(e))),s.push(t)}t.append(n,s,i),this.elements.$pagination.empty().append(t)}openPreview(e){const t=a.default(e.currentTarget).closest("tr");this.sendRemoteRequest(this.generateRemoteActionsPayload("viewSingleRecord",[t.data("table"),t.data("uid")])).then(async e=>{const t=(await e.resolve())[0].result;p.localOpen(t)})}renderSelectionActionWizard(e,t){c.addSlide("mass-action-confirmation",TYPO3.lang["window.selectionAction.title"],"<p>"+(new d).encodeHtml(TYPO3.lang["tooltip."+e+"Selected"])+"</p>",s.SeverityEnum.warning),c.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteActionsPayload("executeSelectionAction",{action:e,selection:t})).then(()=>{this.markedRecordsForMassAction=[],this.getWorkspaceInfos(),c.dismiss(),u.refreshPageTree()})}).done(()=>{c.show(),c.getComponent().on("wizard-dismissed",()=>{this.elements.$chooseSelectionAction.val("")})})}renderMassActionWizard(e){let t;switch(e){case"publish":t="publishWorkspace";break;case"discard":t="flushWorkspace";break;default:throw"Invalid mass action "+e+" called."}const a=new d;c.setForceSelection(!1),c.addSlide("mass-action-confirmation",TYPO3.lang["window.massAction.title"],"<p>"+a.encodeHtml(TYPO3.lang["tooltip."+e+"All"])+"<br><br>"+a.encodeHtml(TYPO3.lang["tooltip.affectWholeWorkspace"])+"</p>",s.SeverityEnum.warning);const n=async e=>{const a=(await e.resolve())[0].result;a.processed<a.total?this.sendRemoteRequest(this.generateRemoteMassActionsPayload(t,a)).then(n):(this.getWorkspaceInfos(),c.dismiss())};c.addFinalProcessingSlide(()=>{this.sendRemoteRequest(this.generateRemoteMassActionsPayload(t,{init:!0,total:0,processed:0,language:this.settings.language})).then(n)}).done(()=>{c.show(),c.getComponent().on("wizard-dismissed",()=>{this.elements.$chooseMassAction.val("")})})}getAction(e,t,s){return e?a.default("<button />",{class:"btn btn-default","data-action":t,"data-bs-toggle":"tooltip"}).append(this.getPreRenderedIcon(s)):a.default("<span />",{class:"btn btn-default disabled"}).append(this.getPreRenderedIcon("empty-empty"))}getPreRenderedIcon(e){return this.elements.$actionIcons.find('[data-identifier="'+e+'"]').clone()}resetMassActionState(e){this.markedRecordsForMassAction=[],e&&(this.elements.$workspaceActions.removeClass("hidden"),this.elements.$chooseMassAction.prop("disabled",!1)),document.dispatchEvent(new Event("multiRecordSelection:actions:hide"))}}return a.default.fn.disablePagingAction=function(){a.default(this).addClass("disabled").find(".t3-icon").unwrap().wrap(a.default("<span />",{class:"page-link"}))},new u}));
\ No newline at end of file
-- 
GitLab