Friday, July 27, 2018
AEM 62 TouchUI Dialog RTE Mini RTE To Upper Case Plugin
AEM 62 TouchUI Dialog RTE Mini RTE To Upper Case Plugin
Goal
RTE (Rich Text Editor) plugin to convert selected text to upper case in the dialog RTE widget - /libs/cq/gui/components/authoring/dialog/richtext, of Touch UI
Dialog of foundation text component was modified for demo purposes only - /libs/foundation/components/text/cq:dialog/content/items/tabs/items/text/items/column/items/text
For a similar extension on AEM 6 - check this post
Demo | Package Install
Configure the RTE Plugin
Add Plugin to RTE Widget Toolbar
Uppercase Plugin in RTE of Dialog
Uppercase Plugin in RTE of Fullscreen Dialog
Solution
1) Login to CRXDE Lite (http://localhost:4502/crx/de) and create folder /apps/touchui-dialog-mini-rte-to-upper-case
2) Create node /apps/touchui-dialog-mini-rte-to-upper-case/clientlib of type cq:ClientLibraryFolder and add a String property categories with value rte.coralui2
3) Create file (nt:file) /appstouchui-dialog-mini-rte-to-upper-case/clientlib/js.txt and add
to-upper.js
4) Create file (nt:file) /apps/touchui-dialog-mini-rte-to-upper-case/clientlib/to-upper.js and add the following code.
(function(){
var ExperienceAEM = {
GROUP: "experience-aem",
TUC_FEATURE: "touchuitouppercase"
};
ExperienceAEM.TouchUIUpperCasePlugin = new Class({
toString: "TouchUIUpperCasePlugin",
extend: CUI.rte.plugins.Plugin,
pickerUI: null,
getFeatures: function() {
return [ ExperienceAEM.TUC_FEATURE ];
},
initializeUI: function(tbGenerator) {
var plg = CUI.rte.plugins;
if (!this.isFeatureEnabled(ExperienceAEM.TUC_FEATURE)) {
return;
}
this.pickerUI = tbGenerator.createElement(ExperienceAEM.TUC_FEATURE, this, true, "To Upper Case");
tbGenerator.addElement(ExperienceAEM.GROUP, plg.Plugin.SORT_FORMAT, this.pickerUI, 120);
var groupFeature = ExperienceAEM.GROUP + "#" + ExperienceAEM.TUC_FEATURE;
tbGenerator.registerIcon(groupFeature, "coral-Icon coral-Icon--thumbUp");
},
execute: function(id) {
this.editorKernel.relayCmd(id);
},
//to mark the uppercase icon selected/deselected
updateState: function(selDef) {
var hasUC = this.editorKernel.queryState(ExperienceAEM.TUC_FEATURE, selDef);
if (this.pickerUI != null) {
this.pickerUI.setSelected(hasUC);
}
},
notifyPluginConfig: function(pluginConfig) {
pluginConfig = pluginConfig || { };
var defaults = {
"tooltips": {
"touchuitouppercase": {
"title": "To Upper Case",
"text": "To Upper Case"
}
}
};
CUI.rte.Utils.applyDefaults(pluginConfig, defaults);
this.config = pluginConfig;
}
});
CUI.rte.plugins.PluginRegistry.register(ExperienceAEM.GROUP,ExperienceAEM.TouchUIUpperCasePlugin);
ExperienceAEM.UpperCaseCmd = new Class({
toString: "UpperCaseCmd",
extend: CUI.rte.commands.Command,
isCommand: function(cmdStr) {
return (cmdStr.toLowerCase() == ExperienceAEM.TUC_FEATURE);
},
getProcessingOptions: function() {
var cmd = CUI.rte.commands.Command;
return cmd.PO_SELECTION | cmd.PO_BOOKMARK | cmd.PO_NODELIST;
},
_getTagObject: function() {
return {
"tag": "span",
"attributes": {
"style" : "text-transform:uppercase"
}
};
},
execute: function(execDef) {
var selection = execDef.selection;
if (!selection) {
return;
}
var nodeList = execDef.nodeList;
if (!nodeList) {
return;
}
var common = CUI.rte.Common;
var context = execDef.editContext;
var tagObj = this._getTagObject();
var tags = common.getTagInPath(context, selection.startNode, tagObj.tag, tagObj.attributes);
if (tags == null) {
nodeList.surround(execDef.editContext, tagObj.tag, tagObj.attributes);
} else {
nodeList.removeNodesByTag(execDef.editContext, tagObj.tag, tagObj.attributes, true);
}
},
queryState: function(selectionDef, cmd) {
var common = CUI.rte.Common;
var context = selectionDef.editContext;
var selection = selectionDef.selection;
var tagObj = this._getTagObject();
return (common.getTagInPath(context, selection.startNode, tagObj.tag, tagObj.attributes) != null);
}
});
CUI.rte.commands.CommandRegistry.register(ExperienceAEM.TUC_FEATURE, ExperienceAEM.UpperCaseCmd);
})();