diff --git a/src/ninegate-1.0/app/config/config.yml b/src/ninegate-1.0/app/config/config.yml index 4ddae994..b8881c87 100644 --- a/src/ninegate-1.0/app/config/config.yml +++ b/src/ninegate-1.0/app/config/config.yml @@ -154,7 +154,7 @@ ivory_ck_editor: language: fr toolbar: "my_toolbar_1" uiColor: "#ffffff" - extraPlugins: "html5video" + extraPlugins: ["html5video","pastebase64"] light_config: language: fr toolbar: "my_toolbar_2" @@ -169,6 +169,9 @@ ivory_ck_editor: html5video: path: "ckeditor/plugins/html5video/" # with trailing slash filename: "plugin.js" + pastebase64: + path: "ckeditor/plugins/pastebase64/" # with trailing slash + filename: "plugin.js" toolbars: configs: my_toolbar_1: [ "@document1", "-", "@clipboard1", "-", "@basicstyles1", "-", "@paragraph1", "/", "@links1", "-", "@insert1", "-", "@styles1", "-" , "@colors1", "-" , "@tools1" ] diff --git a/src/ninegate-1.0/web/ckeditor/plugins/pastebase64/plugin.js b/src/ninegate-1.0/web/ckeditor/plugins/pastebase64/plugin.js new file mode 100755 index 00000000..f278a174 --- /dev/null +++ b/src/ninegate-1.0/web/ckeditor/plugins/pastebase64/plugin.js @@ -0,0 +1,70 @@ +(function () { + 'use strict'; + + CKEDITOR.plugins.add('pastebase64', { + init: init + }); + + function init(editor) { + if (editor.addFeature) { + editor.addFeature({ + allowedContent: 'img[alt,id,!src]{width,height};' + }); + } + + editor.on("contentDom", function () { + var editableElement = editor.editable ? editor.editable() : editor.document; + editableElement.on("paste", onPaste, null, {editor: editor}); + }); + + + } + + function onPaste(event) { + var editor = event.listenerData && event.listenerData.editor; + var $event = event.data.$; + var clipboardData = $event.clipboardData; + var found = false; + var imageType = /^image/; + + if (!clipboardData) { + return; + } + + return Array.prototype.forEach.call(clipboardData.types, function (type, i) { + if (found) { + return; + } + + if (type.match(imageType) || clipboardData.items[i].type.match(imageType)) { + readImageAsBase64(clipboardData.items[i], editor); + return found = true; + } + }); + } + + function readImageAsBase64(item, editor) { + if (!item || typeof item.getAsFile !== 'function') { + return; + } + + var file = item.getAsFile(); + var reader = new FileReader(); + + reader.onload = function (evt) { + var element = editor.document.createElement('img', { + attributes: { + src: evt.target.result + } + }); + + // We use a timeout callback to prevent a bug where insertElement inserts at first caret + // position + setTimeout(function () { + editor.insertElement(element); + }, 10); + }; + + reader.readAsDataURL(file); + } +})();