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