Goal
AEM Cloud Version : 2021.3.5026.20210309T210727Z-210225 (March 09, 2021)
Add buttons to Delete and Insert components via Sites Content tree
Demo | Package Install | Github
Solution
Create a clientlib /apps/eaem-sites-content-tree-delete-insert/clientlibs/content-tree with categories=cq.authoring.dialog.all and below code to add the delete and insert icons in content tree and execute necessary api
(function ($, ns, channel) { var _orignTitleFn, _orignBindFn; channel.on("cq-editor-loaded", $.debounce(500, false, extendContentTree)); function extendContentTree(){ var contentTree = Granite.author.ui.contentTree; _orignTitleFn = contentTree._getElementTitle; _orignBindFn = contentTree._bindListeners; if (_.isEmpty(contentTree.editables)) { return; } contentTree._getElementTitle = getElementTitle; contentTree._bindListeners = bindListeners; } function getElementTitle(editable, componentTitle){ var titleHtml = _orignTitleFn.call(this, editable, componentTitle), buttonDeleteHtml = '<coral-icon icon="delete" size="M" class="eaem-contenttree-delete" data-content-align="Top"></coral-icon>', buttonInsertHtml = '<coral-icon icon="add" size="M" class="eaem-contenttree-insert" data-content-align="Top"></coral-icon>', padding = '<span style="margin-left: 20px"></span>'; if (titleHtml) { if (editable.name == "responsivegrid") { //dont add delete or insert }else if (!editable.config.isContainer) { titleHtml = titleHtml + padding + buttonDeleteHtml; }else{ titleHtml = titleHtml + padding + buttonDeleteHtml + buttonInsertHtml; } } return titleHtml; } function bindListeners(){ var editables = this.editables; _orignBindFn.call(this); $(".eaem-contenttree-insert").click(function(event){ var treeItem = event.currentTarget.closest("coral-tree-item"), editable = editables.find(treeItem.value)[0]; ns.edit.ToolbarActions.INSERT.execute(editable); }); $(".eaem-contenttree-delete").click(function (event) { var treeItem = event.currentTarget.closest("coral-tree-item"), editable = editables.find(treeItem.value)[0]; if (editable && editable.overlay && editable.overlay.dom && !editable.overlay.isDisabled() &&!editable.overlay.isSelected()) { editable.overlay.dom.focus().trigger("click"); } if (editable) { ns.edit.ToolbarActions.DELETE.execute(editable); } }); } }(jQuery, Granite.author, jQuery(document)));
No comments:
Post a Comment