1(function () { 2 'use strict'; 3 4 CKEDITOR.plugins.add('pastebase64', { 5 init: init 6 }); 7 8 function init(editor) { 9 if (editor.addFeature) { 10 editor.addFeature({ 11 allowedContent: 'img[alt,id,!src]{width,height};' 12 }); 13 } 14 15 editor.on("contentDom", function () { 16 var editableElement = editor.editable ? editor.editable() : editor.document; 17 editableElement.on("paste", onPaste, null, {editor: editor}); 18 }); 19 20 21 } 22 23 function onPaste(event) { 24 var editor = event.listenerData && event.listenerData.editor; 25 var $event = event.data.$; 26 var clipboardData = $event.clipboardData; 27 var found = false; 28 var imageType = /^image/; 29 30 if (!clipboardData) { 31 return; 32 } 33 34 return Array.prototype.forEach.call(clipboardData.types, function (type, i) { 35 if (found) { 36 return; 37 } 38 39 if (type.match(imageType) || clipboardData.items[i].type.match(imageType)) { 40 readImageAsBase64(clipboardData.items[i], editor); 41 return found = true; 42 } 43 }); 44 } 45 46 function readImageAsBase64(item, editor) { 47 if (!item || typeof item.getAsFile !== 'function') { 48 return; 49 } 50 51 var file = item.getAsFile(); 52 var reader = new FileReader(); 53 54 reader.onload = function (evt) { 55 var element = editor.document.createElement('img', { 56 attributes: { 57 src: evt.target.result 58 } 59 }); 60 61 // We use a timeout callback to prevent a bug where insertElement inserts at first caret 62 // position 63 setTimeout(function () { 64 editor.insertElement(element); 65 }, 10); 66 }; 67 68 reader.readAsDataURL(file); 69 } 70})(); 71