Quantcast
Channel: Experiencing Adobe Experience Manager (AEM, CQ)
Viewing all articles
Browse latest Browse all 526

AEM 64 - Add BlockQuote Plugin to Content Fragment Rich Text Editor

$
0
0

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)));


Viewing all articles
Browse latest Browse all 526

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>