Goal
Add the blockquote plugin to Touch UI Content Fragment Rich Text Editor
Demo | Package Install | Github
Solution
1) Login to CRXDE Lite (http://localhost:4502/crx/de) and create folder /apps/eaem-touchui-cfm-rte-pf-blockquote-plugin
2) Create node /apps/eaem-touchui-cfm-rte-pf-blockquote-plugin/clientlib of type cq:ClientLibraryFolder, add a String property categories with value dam.cfm.authoring.contenteditor.v2 and dependencies with String[] value [lodash]
3) Create file (nt:file) /apps/eaem-touchui-cfm-rte-pf-blockquote-plugin/clientlib/js.txt and add
pf-blockquote.js
4) Create file (nt:file) /apps/eaem-touchui-cfm-rte-pf-blockquote-plugin/clientlib/pf-blockquote.js and add the following code
(function ($, $document) { var pluginAdded = false, PARAFORMAT_PLUGIN = "paraformat", TB_TYPE_FULL_SCREEN = "multieditorFullscreen", BQ_FORMAT = { description: "Block Quote", "tag": "blockquote"}, BQ_ACTION = "paraformat#blockquote"; $document.on("foundation-contentloaded", onContentLoad); function onContentLoad(){ if (pluginAdded) { return; } pluginAdded = true; var editorManager = $(".content-fragment-editor").data("multiEditorManager"), $fullScreenBtn = editorManager.$_root.find("[data-action='cfm-fullscreen#start']"); $fullScreenBtn.on("click", addBlockQuotePlugin); } function addBlockQuotePlugin() { var editorManager = $(".content-fragment-editor").data("multiEditorManager"), editor = editorManager._editorContainers[0].editor, $tbContainer = editor._activeEditor.options.$rteToolbarContainer, $popover = CUI.rte.UIUtils.getPopover(PARAFORMAT_PLUGIN, TB_TYPE_FULL_SCREEN, $tbContainer); if(!_.isEmpty($popover.find("[data-action='" + BQ_ACTION + "']"))){ return; } $popover.find("coral-buttonlist").append(getBlockQuoteHtml($popover)); var $bqAction = $popover.find("[data-action='" + BQ_ACTION + "']"), ek = editor._activeEditor.rte.editorKernel, plugin = ek.getPlugin("paraformat"); plugin.formatUI.formats.push(BQ_FORMAT); plugin.formatUI.$ui = $popover.find('button[data-action^="' + PARAFORMAT_PLUGIN + '#"]'); $bqAction.on('click.rte-handler', handler); function handler(e) { var pluginUI = plugin.formatUI, $target = $(e.target); if (!$target.is('button')) { $target = $target.closest('button'); } pluginUI._resetSelection(); pluginUI._select(pluginUI._getFormatId($target)); var editContext = ek.getEditContext(); editContext.setState('CUI.SelectionLock', 1); plugin.execute(); ek.enableFocusHandling(); ek.focus(editContext); } } function getBlockQuoteHtml($paraformat) { var $bqButton = $($paraformat.find("button:last")[0].outerHTML); $bqButton.attr("data-action", BQ_ACTION).find("coral-list-item-content").html(BQ_FORMAT.description); return $bqButton[0].outerHTML; } }(jQuery, jQuery(document)));
Its adding duplicate button on firefox and safari, but works fine on chrome. Is there a way to fix this?
ReplyDeleteIs there a way where we can add cut and copy plugins to this like we have in rte
ReplyDelete