Goal
Open a Touch UI component dialog using sample action config - cq:actionConfigs. For the same in Classic UI follow this post
For similar extension on AEM 63 check this post
Demo | Package Install
Thank you Kaushal Mall for the solution - 2 below
A sample toolbar action for opening component dialog
Solution - 1
1) Login to CRXDE Lite, create folder (nt:folder) /apps/touchui-open-component-dialog
2) Create clientlib (type cq:ClientLibraryFolder) /apps/touchui-open-component-dialog/clientlib, set a property categories of String type to cq.authoring.dialog
3) Create file ( type nt:file ) /apps/touchui-open-component-dialog/clientlib/js.txt, add the following
open.js
4) Create file ( type nt:file ) /apps/touchui-open-component-dialog/clientlib/open.js, add the following code
(function ($, author) {
"use strict";
if (typeof window.ExperienceAEM == "undefined") {
window.ExperienceAEM = {};
}
ExperienceAEM.open = open;
function open(editable, param, target){
//Granite.author.store contains editables added on page
author.DialogFrame.openDialog(editable);
}
})($, Granite.author);
5) # 11 is for opening the component editable's dialog
6) Add a sample action config cq:actionConfigs, open action in the component's edit config cq:editConfig
7) Sample component's open dialog action config as xml - /apps/touchui-open-component-dialog/touchui-open-component-dialog/cq:editConfig
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="cq:EditConfig">
<cq:actionConfigs jcr:primaryType="nt:unstructured">
<open
jcr:primaryType="nt:unstructured"
handler="ExperienceAEM.open"
icon="coral-Icon--game"
text="Open Dialog"/>
</cq:actionConfigs>
</jcr:root>
8) #7 ExperienceAEM.open handler (added in step 4) is executed on clicking the open toolbar action
Solution - 2
To show ootb component actions and custom action - open dialog, check this adobe doc for more details
Package Install
2) Create node /apps/touchui-open-component-dialog-register-action/clientlib of type cq:ClientLibraryFolder and add a String property categories with value cq.authoring.editor.hook
3) Create file (nt:file) /apps/touchui-open-component-dialog-register-action/clientlib/js.txt and add
open.js
4) Create file (nt:file) /apps/touchui-open-component-dialog-register-action/clientlib/open.js and add the following code
(function ($document, author) {
var openDialog = {
icon: 'coral-Icon--game',
text: 'Open Dialog',
handler: function (editable, param, target) {
author.DialogFrame.openDialog(editable);
},
condition: function (editable) {
return editable.type === "touchui-open-component-dialog-register-action/touchui-open-component-dialog";
},
isNonMulti: true
};
$document.on('cq-layer-activated', function (ev) {
if (ev.layer === 'Edit') {
author.EditorFrame.editableToolbar.registerAction('EAEM_OPEN_DIALOG', openDialog);
}
});
})($(document), Granite.author);


Hi,
ReplyDeleteits not working in my side.
I am getting error:
An error has occured during execution of the selected action: dialog.getConfig is not a function -> TypeError: dialog.getConfig is not a function
at Object.ns.DialogFrame.self.openDialog (http://localhost:4502/libs/cq/gui/components/authoring/editors/clientlibs/core.js:16736:30)
at constructor.handler (http://localhost:4502/apps/touchui-open-component-dialog-register-action/clientlib.js:6:32)
at constructor.handleEvent (http://localhost:4502/libs/cq/gui/components/authoring/editors/clientlibs/core.js:19321:41)
at HTMLDivElement.dispatch (http://localhost:4502/etc/clientlibs/granite/jquery.js:4665:9)
at HTMLDivElement.elemData.handle (http://localhost:4502/etc/clientlibs/granite/jquery.js:4333:28)(anonymous function) @ core.js:16442
63? - http://experience-aem.blogspot.com/2017/08/aem-63-touch-ui-register-component-action-open-dialog-programatically.html
DeleteChange author.DialogFrame.openDialog(editable); to author.DialogFrame.openDialog(new author.edit.Dialog(editable)); It will work
Deletethanks bro. it worked. however I have added a different action in component. now I want to open a different dialog or section by custom actions. how I can achieve that?
Delete