plugin.js 1.7 KB

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