From 12ce89328ad6c5bac06c93f31257a4e3fedc4dcb Mon Sep 17 00:00:00 2001 From: Henning Leutz <leutz@pcsg.de> Date: Tue, 11 May 2021 17:10:13 +0200 Subject: [PATCH] feat: quiqqer/package-bricks#124 --- bin/Editor.js | 34 ++-- plugins/quiqqer/quiqqerBricks/images/icon.jpg | Bin 0 -> 3263 bytes plugins/quiqqer/quiqqerBricks/lang/de.js | 3 + plugins/quiqqer/quiqqerBricks/lang/en.js | 3 + plugins/quiqqer/quiqqerBricks/plugin.js | 149 ++++++++++++++++++ 5 files changed, 172 insertions(+), 17 deletions(-) create mode 100644 plugins/quiqqer/quiqqerBricks/images/icon.jpg create mode 100644 plugins/quiqqer/quiqqerBricks/lang/de.js create mode 100644 plugins/quiqqer/quiqqerBricks/lang/en.js create mode 100644 plugins/quiqqer/quiqqerBricks/plugin.js diff --git a/bin/Editor.js b/bin/Editor.js index c5fb9d3..f4d6990 100644 --- a/bin/Editor.js +++ b/bin/Editor.js @@ -247,23 +247,23 @@ define('package/quiqqer/ckeditor4/bin/Editor', [ } window.CKEDITOR.replace(instance, { - skinName : 'moono-lisa', - customConfig : '', - language : Locale.getCurrent(), - baseHref : URL_DIR, - basePath : URL_DIR, - height : height, - width : width, - toolbar : toolbar, - allowedContent : true, - extraAllowedContent : 'iframe(*)[*]{*}; img(*)[*]{*}; script(*)[*]{*}; ins(*)[*]{*}', - protectedSource : [/<ins[\s|\S]+?<\/ins>/g], - stylesSet : styles, - contentsCss : data.cssFiles || [], - bodyClass : data.bodyClass, + skinName : 'moono-lisa', + customConfig : '', + language : Locale.getCurrent(), + baseHref : URL_DIR, + basePath : URL_DIR, + height : height, + width : width, + toolbar : toolbar, + allowedContent : true, + extraAllowedContent: 'iframe(*)[*]{*}; img(*)[*]{*}; script(*)[*]{*}; ins(*)[*]{*}', + protectedSource : [/<ins[\s|\S]+?<\/ins>/g], + stylesSet : styles, + contentsCss : data.cssFiles || [], + bodyClass : data.bodyClass, // templates_files : [URL_OPT_DIR +'base/bin/pcsgEditorPlugins/templates.php'], - baseFloatZIndex : zIndex, - extraPlugins : extraPlugins, + baseFloatZIndex: zIndex, + extraPlugins : extraPlugins, //removePlugins : 'scayt', disableNativeSpellChecker: config.disableNativeSpellChecker, autoGrow_onStartup : false, @@ -484,7 +484,7 @@ define('package/quiqqer/ckeditor4/bin/Editor', [ var extra = [], buttonList = []; - if (typeOf(toolbar) == 'array') { + if (typeOf(toolbar) === 'array') { buttonList = toolbar.flatten(); } diff --git a/plugins/quiqqer/quiqqerBricks/images/icon.jpg b/plugins/quiqqer/quiqqerBricks/images/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..514edafb04edd14b7926738c66ebef4a2a5d6bc0 GIT binary patch literal 3263 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 literal 0 HcmV?d00001 diff --git a/plugins/quiqqer/quiqqerBricks/lang/de.js b/plugins/quiqqer/quiqqerBricks/lang/de.js new file mode 100644 index 0000000..8f879f9 --- /dev/null +++ b/plugins/quiqqer/quiqqerBricks/lang/de.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('quiqqerBricks', 'de', { + button: 'QUIQQER Bausteine' +}); diff --git a/plugins/quiqqer/quiqqerBricks/lang/en.js b/plugins/quiqqer/quiqqerBricks/lang/en.js new file mode 100644 index 0000000..10dcdb9 --- /dev/null +++ b/plugins/quiqqer/quiqqerBricks/lang/en.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('quiqqerBricks', 'en', { + button: 'QUIQQER Bricks' +}); diff --git a/plugins/quiqqer/quiqqerBricks/plugin.js b/plugins/quiqqer/quiqqerBricks/plugin.js new file mode 100644 index 0000000..d610860 --- /dev/null +++ b/plugins/quiqqer/quiqqerBricks/plugin.js @@ -0,0 +1,149 @@ +(function () { + "use strict"; + + CKEDITOR.plugins.add('quiqqerBricks', { + icons: "icon", + lang : ['en', 'de'], + + onLoad: function () { + // Register styles for placeholder widget frame. + CKEDITOR.addCss( + '.quiqqer_bricks_placeholder{' + + ' display: inline-block;' + + ' background-color:#dedede;' + + ' height: 200px;' + + ' margin-bottom: 10px;' + + ' width: 100%;' + + '}' + ); + }, + + init: function (editor) { + var self = this; + + this.$Editor = editor; + + editor.ui.addButton('QuiqqerBricks', { + label : editor.lang.quiqqerBricks.button, + toolbar: 'insert', + command: 'insert-quiqqer-brick', + icon : this.path + 'images/icon.jpg' + }); + + editor.on('getData', function (evt) { + var Ghost = new Element('div', { + html: evt.data.dataValue + }); + + var placeholders = Ghost.getElements('.quiqqer_bricks_placeholder'); + var lang, project, brickid, textNode, PH; + + for (var i = 0, len = placeholders.length; i < len; i++) { + PH = placeholders[i]; + brickid = PH.get('data-brickid'); + + if (!brickid) { + continue; + } + + textNode = document.createTextNode("{{brick id=" + brickid + "}}"); + + PH.parentNode.insertBefore(textNode, PH); + PH.parentNode.removeChild(PH); + } + + evt.data.dataValue = Ghost.get('html'); + }); + + + editor.on('setData', function (evt) { + var result; + var data = evt.data.dataValue; + + if (data.indexOf('{{brick ') === -1) { + return; + } + + result = data.replace( + /{{brick ([^}}]*)}}/g, + function (match, contents, offset, input_string) { + match = match.replace('{{brick ', '') + match = match.replace('}}', ''); + match = match.trim(); + match = match.split(' '); + + var parts; + var attributes = []; + + for (var m = 0, len = match.length; m < len; m++) { + parts = match[m].trim().split('='); + + attributes[parts[0]] = parts[1]; + } + + if ("id" in attributes) { + return '<div class="quiqqer_bricks_placeholder" ' + + 'data-brickid="' + attributes.id + '"' + + '> </div>'; + } + + return ""; + } + ); + + evt.data.dataValue = result; + }); + + + editor.addCommand('insert-quiqqer-brick', { + exec: function (editor) { + require([ + 'package/quiqqer/bricks/bin/Controls/backend/BrickSelectWindow' + ], function (BrickSelectWindow) { + // get project, if editor is in panel + var Node = editor.ui.contentsElement.$; + var project = ''; + var lang = ''; + + if (Node.getParent('.qui-panel')) { + var Panel = QUI.Controls.getById( + Node.getParent('.qui-panel').get('data-quiid') + ); + + if (Panel && Panel.getType() === 'controls/projects/project/site/Panel') { + var Site = Panel.getSite(); + + project = Site.getProject().getName(); + lang = Site.getProject().getLang(); + } + } + + new BrickSelectWindow({ + project : project, + lang : lang, + area : 'content', + multiple: false, + events : { + onSubmit: function (Instance, bricks) { + self.insertBrick( + bricks[0].id, + bricks[0].project, + bricks[0].lang + ); + } + } + }).open(); + }); + } + }); + }, + + insertBrick: function (brickId, project, lang) { + this.$Editor.insertHtml( + '<div class="quiqqer_bricks_placeholder" ' + + ' data-brickid="' + brickId + '"' + + '> </div>' + ); + } + }); +})(); -- GitLab