quill-image-compress 1.2.21 → 1.2.24

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -25,6 +25,8 @@ Quill.js Module which compresses images that are uploaded to the editor
25
25
  - `gif|jpeg|png|svg|webp|bmp|vnd`
26
26
  - Compression options [more info](#options)
27
27
 
28
+ _NOTE: :exclamation:you don't need `quill-image-drop-module`, it's included in this package:exclamation:_
29
+
28
30
  ## Quickstart
29
31
 
30
32
  ``` js
package/dist/demo.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("Quill"));else if("function"==typeof define&&define.amd)define(["Quill"],t);else{var r="object"==typeof exports?t(require("Quill")):t(e.Quill);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=17)}([function(e,t,r){e.exports=r(7)},function(e,t){function r(e,t,r,n,o,i,a){try{var u=e[i](a),s=u.value}catch(e){return void r(e)}u.done?t(s):Promise.resolve(s).then(n,o)}e.exports=function(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function u(e){r(a,o,i,u,s,"next",e)}function s(e){r(a,o,i,u,s,"throw",e)}u(void 0)}))}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){"use strict";r.r(t),r.d(t,"file2b64",(function(){return u}));var n=r(1),o=r.n(n),i=r(0),a=r.n(i);function u(e){return s.apply(this,arguments)}function s(){return(s=o()(a.a.mark((function e(t){var r,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new FileReader,n=new Promise((function(e){r.addEventListener("load",(function(){var t=r.result;e(t)}),!1)})),r.readAsDataURL(t),e.abrupt("return",n);case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},function(e,t,r){var n=r(11),o=r(12),i=r(13),a=r(15);e.exports=function(e,t){return n(e)||o(e,t)||i(e,t)||a()},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){"use strict";r.r(t),r.d(t,"imageCompressor",(function(){return v}));var n=r(1),o=r.n(n),i=r(2),a=r.n(i),u=r(3),s=r.n(u),l=r(0),c=r.n(l),f=!0,p=!1,h={prefixString:function(){return"</> quill-image-compress: "},get log(){return f?console.log.bind(console,this.prefixString()):function(){}},get error(){return p?function(){}:console.error.bind(console,this.prefixString())},get warn(){return p?function(){}:console.warn.bind(console,this.prefixString())}},g=r(8).ImageDrop,d=r(9).warnAboutOptions,m=r(4).file2b64,y=r(10).downscaleImage,v=function(){function e(t,r){var n=this;a()(this,e),this.quill=t,this.range=null,this.options=r||{},f=r.debug,p=r.suppressErrorLogging,d(r);var i=function(){var e=o()(c.a.mark((function e(t){var r;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return h.log("onImageDrop",{dataUrl:t}),e.next=3,n.downscaleImageFromUrl(t);case 3:r=e.sent,n.insertToEditor(r);case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();this.imageDrop=new g(t,i,h),h.log("fileChanged",{options:r,quill:t,debug:f});var u=this.quill.getModule("toolbar");u?u.addHandler("image",(function(){return n.selectLocalImage()})):h.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}var t,r;return s()(e,[{key:"selectLocalImage",value:function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=function(){return e.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(e.fileHolder)}))}},{key:"fileChanged",value:(r=o()(c.a.mark((function e(){var t,r,n;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this.fileHolder.files[0],h.log("fileChanged",{file:t}),t){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,m(t);case 6:return r=e.sent,e.next=9,this.downscaleImageFromUrl(r);case 9:n=e.sent,this.insertToEditor(n);case 11:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"downscaleImageFromUrl",value:(t=o()(c.a.mark((function e(t){var r;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,y(t,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.keepImageTypes,this.options.ignoreImageTypes,this.options.quality,h);case 2:return r=e.sent,h.log("downscaleImageFromUrl",{dataUrl:t,dataUrlCompressed:r}),e.abrupt("return",r);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"insertToEditor",value:function(e){h.log("insertToEditor",{url:e}),this.range=this.quill.getSelection();var t=this.range;this.logFileSize(e),this.quill.insertEmbed(t.index,"image","".concat(e),"user"),t.index++,this.quill.setSelection(t,"api")}},{key:"logFileSize",value:function(e){var t=(Math.round(3*(e.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);h.log("estimated img size: "+t+" kb")}}]),e}();window.imageCompressor=v,t.default=v},function(e,t,r){var n=function(e){"use strict";var t=Object.prototype,r=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",i=n.asyncIterator||"@@asyncIterator",a=n.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new T(n||[]);return i._invoke=function(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return k()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var u=b(a,r);if(u){if(u===c)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var s=l(e,t,r);if("normal"===s.type){if(n=r.done?"completed":"suspendedYield",s.arg===c)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n="completed",r.method="throw",r.arg=s.arg)}}}(e,r,a),i}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var c={};function f(){}function p(){}function h(){}var g={};u(g,o,(function(){return this}));var d=Object.getPrototypeOf,m=d&&d(d(L([])));m&&m!==t&&r.call(m,o)&&(g=m);var y=h.prototype=f.prototype=Object.create(g);function v(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){var n;this._invoke=function(o,i){function a(){return new t((function(n,a){!function n(o,i,a,u){var s=l(e[o],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,u)}),(function(e){n("throw",e,a,u)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,u)}))}u(s.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function b(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,b(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var n=l(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,c;var o=n.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function I(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function L(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:k}}function k(){return{value:void 0,done:!0}}return p.prototype=h,u(y,"constructor",h),u(h,"constructor",p),p.displayName=u(h,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,u(e,a,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},v(x.prototype),u(x.prototype,i,(function(){return this})),e.AsyncIterator=x,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new x(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},v(y),u(y,a,"Generator"),u(y,o,(function(){return this})),u(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=L,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(I),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(u&&s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,c):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),I(r),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;I(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:L(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),c}},e}(e.exports);try{regeneratorRuntime=n}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},function(e,t,r){"use strict";r.r(t),r.d(t,"ImageDrop",(function(){return p}));var n=r(1),o=r.n(n),i=r(2),a=r.n(i),u=r(3),s=r.n(u),l=r(0),c=r.n(l),f=r(4).file2b64,p=function(){function e(t,r,n){var o=this;a()(this,e),this.logger=n,this.quill=t,this.onNewDataUrl=r,this.quill.root.addEventListener("drop",(function(e){return o.handleDrop(e)}),!1),this.quill.root.addEventListener("paste",(function(e){return o.handlePaste(e)}),!1)}var t;return s()(e,[{key:"handleNewImageFiles",value:(t=o()(c.a.mark((function e(t){var r,n,o;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Array.isArray(t)){e.next=2;break}return e.abrupt("return");case 2:if(r=t.pop()){e.next=5;break}return e.abrupt("return");case 5:return n=r.getAsFile?r.getAsFile():r,e.next=8,f(n);case 8:o=e.sent,this.logger.log("handleNewImageFiles",{base64ImageSrc:o}),this.onNewDataUrl(o);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"handleDrop",value:function(e){e.preventDefault();var t=e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:t}),t){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(e.clientX,e.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var o=this.getImageFiles(e.dataTransfer.files);this.handleNewImageFiles(o)}}},{key:"handlePaste",value:function(e){var t=e.clipboardData&&e.clipboardData.items&&!!e.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:t}),t){var r=this.getImageFiles(e.clipboardData.items),n=r.length>0;if(this.logger.log("handlePaste",{hasImages:n,imageCount:r.length}),n)Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))&&this.logger.log("handlePaste also detected html"),e.preventDefault(),this.handleNewImageFiles(r)}}},{key:"getImageFiles",value:function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return!!e.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i)}))||[]}}]),e}()},function(e,t,r){"use strict";function n(e){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(Logger.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxWidth,"\n-> using default 1000")),e.maxWidth=1e3),e.maxHeight&&"number"!=typeof e.maxHeight&&(Logger.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxHeight,"\n-> using default 1000")),e.maxHeight=1e3),e.quality&&"number"!=typeof e.quality&&(Logger.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nreceived: ".concat(e.quality,"\n-> using default 0.7")),e.quality=.7),!e.imageType||"string"==typeof e.imageType&&e.imageType.startsWith("image/")||(Logger.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nreceived: '.concat(e.imageType,"\n-> using default image/jpeg")),e.imageType="image/jpeg"),e.keepImageTypes||(e.keepImageTypes=[]),e.keepImageTypes&&!Array.isArray(e.keepImageTypes)&&(Logger.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes||(e.ignoreImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(Logger.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}r.r(t),r.d(t,"warnAboutOptions",(function(){return n}))},function(e,t,r){"use strict";r.r(t),r.d(t,"downscaleImage",(function(){return l}));var n=r(5),o=r.n(n),i=r(1),a=r.n(i),u=r(0),s=r.n(u);function l(e,t,r,n,o,i,a,u){return c.apply(this,arguments)}function c(){return(c=a()(s.a.mark((function e(t,r,n,i,a,u,l,c){var p,h,g,d,m,y,v,x,b;return s.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return p=t.split(";")[0].split(":")[1],i=i||"image/jpeg",l=l||.7,(h=new Image).src=t,e.next=7,new Promise((function(e){h.onload=function(){e()}}));case 7:if(g=f(h.width,h.height,r,n),d=o()(g,2),m=d[0],y=d[1],(v=document.createElement("canvas")).width=m,v.height=y,x=v.getContext("2d"),"image/jpeg"===i&&(x.fillStyle="#FFFFFF",x.fillRect(0,0,h.width,h.height)),!u.includes(p)){e.next=15;break}return e.abrupt("return",t);case 15:return a.includes(p)&&(i=p),x.drawImage(h,0,0,m,y),b=v.toDataURL(i,l),c.log("downscaling image...",{args:{dataUrl:t,maxWidth:r,maxHeight:n,imageType:i,ignoreImageTypes:u,keepImageTypes:a,imageQuality:l},newHeight:y,newWidth:m}),e.abrupt("return",b);case 20:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function f(e,t,r,n){if(e<=r&&t<=n)return[e,t];if(e>r){var o=r,i=Math.floor(t/e*o);if(i>n){var a=n;return[Math.floor(e/t*a),a]}return[o,i]}if(t>n){var u=n;return[Math.floor(e/t*u),u]}}},function(e,t){e.exports=function(e){if(Array.isArray(e))return e},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){var n=r(14);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports},function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(16),o=r.n(n),i=r(6);o.a.register("modules/imageCompressor",i.default);console.log("Demo loaded...");new o.a("#editor",{theme:"snow",modules:{toolbar:{container:[[{header:[1,2,3,!1]}],["bold","italic"],["clean"],["image"]]},imageCompressor:{quality:.9,maxWidth:200,maxHeight:200,imageType:"image/png",debug:!0}}})}])}));
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("Quill"));else if("function"==typeof define&&define.amd)define(["Quill"],t);else{var r="object"==typeof exports?t(require("Quill")):t(e.Quill);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=8)}([function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.file2b64=void 0,t.file2b64=function(e){return n(this,void 0,void 0,(function(){var t,r;return i(this,(function(n){return t=new FileReader,r=new Promise((function(e,r){t.addEventListener("load",(function(){var n,i=null===(n=t.result)||void 0===n?void 0:n.toString();i?e(i):r("could not convert file to base64")}),!1)})),t.readAsDataURL(e),[2,r]}))}))}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.imageCompressor=void 0;var o=r(2),a=r(3),l=r(0),s=r(4),u=r(5),c=function(){function e(e,t){var r=this;this.quill=e,this.options=t||{};var l=!!t.debug,s=!!t.suppressErrorLogging;this.Logger=new u.ConsoleLogger(l,s),(0,a.warnAboutOptions)(t,this.Logger);this.imageDrop=new o.ImageDrop(e,(function(e){return n(r,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return this.Logger.log("onImageDrop",{dataUrl:e}),[4,this.downscaleImageFromUrl(e)];case 1:return t=r.sent(),this.insertToEditor(t),[2]}}))}))}),this.Logger),this.Logger.log("fileChanged",{options:t,quill:e,debug:l});var c=this.quill.getModule("toolbar");c?c.addHandler("image",(function(){return r.selectLocalImage()})):this.Logger.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}return e.prototype.selectLocalImage=function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=function(){return e.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){e.fileHolder&&document.body.removeChild(e.fileHolder)}))},e.prototype.fileChanged=function(){var e;return n(this,void 0,void 0,(function(){var t,r,n,o;return i(this,(function(i){switch(i.label){case 0:return(t=null===(e=this.fileHolder)||void 0===e?void 0:e.files)&&t.length?(r=t[0],this.Logger.log("fileChanged",{file:r}),r?[4,(0,l.file2b64)(r)]:[2]):[2];case 1:return n=i.sent(),[4,this.downscaleImageFromUrl(n)];case 2:return o=i.sent(),this.insertToEditor(o),[2]}}))}))},e.prototype.downscaleImageFromUrl=function(e){return n(this,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return[4,(0,s.downscaleImage)(this.Logger,e,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.keepImageTypes,this.options.ignoreImageTypes,this.options.quality)];case 1:return t=r.sent(),this.Logger.log("downscaleImageFromUrl",{dataUrl:e,dataUrlCompressed:t}),[2,t]}}))}))},e.prototype.insertToEditor=function(e){this.Logger.log("insertToEditor",{url:e}),this.range=this.quill.getSelection();var t=this.range;t&&(this.logFileSize(e),this.quill.insertEmbed(t.index,"image","".concat(e),"user"),t.index++,this.quill.setSelection(t,"api"))},e.prototype.logFileSize=function(e){var t=(Math.round(3*(e.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);this.Logger.log("estimated img size: "+t+" kb")},e}();t.imageCompressor=c,window.imageCompressor=c,t.default=c},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.ImageDrop=void 0;var o=r(0),a=function(){function e(e,t,r){var n=this;this.quill=e,this.onNewDataUrl=t,this.logger=r,this.quill.root.addEventListener("drop",(function(e){return n.handleDrop(e)}),!1),this.quill.root.addEventListener("paste",(function(e){return n.handlePaste(e)}),!1)}return e.prototype.handleDrop=function(e){e.preventDefault();var t=e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:t}),t){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(e.clientX,e.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var i=this.getImageFilesFromFileList(e.dataTransfer.files);this.handleDragFiles(i)}},e.prototype.handleDragFiles=function(e){return n(this,void 0,void 0,(function(){var t,r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(t=e.pop())?(r=t,[4,(0,o.file2b64)(r)]):[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.handlePaste=function(e){var t=e.clipboardData&&e.clipboardData.items&&!!e.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:t}),t){var r=this.getImageFilesFromClipboard(e.clipboardData.items),n=r.length>0;if(this.logger.log("handlePaste",{hasImages:n,imageCount:r.length}),n)Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))&&this.logger.log("handlePaste also detected html"),e.preventDefault(),this.handlePasteFiles(r)}},e.prototype.handlePasteFiles=function(e){var t;return n(this,void 0,void 0,(function(){var r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(r=null===(t=e.pop())||void 0===t?void 0:t.getAsFile())?[4,(0,o.file2b64)(r)]:[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.getImageFilesFromClipboard=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e.prototype.getImageFilesFromFileList=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e}();function l(e){return!!e.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i)}t.ImageDrop=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warnAboutOptions=void 0,t.warnAboutOptions=function(e,t){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(t.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxWidth,"\n-> using default 1000")),e.maxWidth=1e3),e.maxHeight&&"number"!=typeof e.maxHeight&&(t.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxHeight,"\n-> using default 1000")),e.maxHeight=1e3),e.quality&&"number"!=typeof e.quality&&(t.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nreceived: ".concat(e.quality,"\n-> using default 0.7")),e.quality=.7),!e.imageType||"string"==typeof e.imageType&&e.imageType.startsWith("image/")||(t.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nreceived: '.concat(e.imageType,"\n-> using default image/jpeg")),e.imageType="image/jpeg"),e.keepImageTypes||(e.keepImageTypes=[]),e.keepImageTypes&&!Array.isArray(e.keepImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes||(e.ignoreImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.downscaleImage=void 0,t.downscaleImage=function(e,t,r,o,a,l,s,u){return n(this,void 0,void 0,(function(){var n,c,f,g,p,d,h,m;return i(this,(function(i){switch(i.label){case 0:return n=t.split(";")[0].split(":")[1],a=a||"image/jpeg",u=u||.7,(c=new Image).src=t,[4,new Promise((function(e){c.onload=function(){e()}}))];case 1:return i.sent(),f=function(e,t,r,n){if(r&&n&&e<=r&&t<=n)return[e,t];if(r&&e>r){var i=r,o=Math.floor(t/e*i);if(n&&o>n){var a=n;return[Math.floor(e/t*a),a]}return[i,o]}if(n&&t>n){o=n;return[i=Math.floor(e/t*o),o]}return[t,e]}(c.width,c.height,r,o),g=f[0],p=f[1],(d=document.createElement("canvas")).width=g,d.height=p,h=d.getContext("2d"),"image/jpeg"===a&&(h.fillStyle="#FFFFFF",h.fillRect(0,0,c.width,c.height)),(null==s?void 0:s.includes(n))?[2,t]:((null==l?void 0:l.includes(n))&&(a=n),h.drawImage(c,0,0,g,p),m=d.toDataURL(a,u),e.log("downscaling image...",{args:{dataUrl:t,maxWidth:r,maxHeight:o,imageType:a,ignoreImageTypes:s,keepImageTypes:l,imageQuality:u},newHeight:p,newWidth:g}),[2,m])}}))}))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConsoleLogger=void 0;var n=function(){function e(e,t){this.debug=e,this.suppressErrorLogging=t}return e.prototype.prefixString=function(){return"</> quill-image-compress: "},Object.defineProperty(e.prototype,"log",{get:function(){return this.debug?console.log.bind(console,this.prefixString()):function(){}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"error",{get:function(){return this.suppressErrorLogging?function(){}:console.error.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"warn",{get:function(){return this.suppressErrorLogging?function(){}:console.warn.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),e}();t.ConsoleLogger=n},function(t,r){t.exports=e},,function(e,t,r){"use strict";r.r(t);var n=r(6),i=r.n(n),o=r(1),a=r.n(o);i.a.register("modules/imageCompressor",a.a);console.log("Demo loaded...");new i.a("#editor",{theme:"snow",modules:{toolbar:{container:[[{header:[1,2,3,!1]}],["bold","italic"],["clean"],["image"]]},imageCompressor:{quality:.9,maxWidth:200,maxHeight:200,imageType:"image/png",debug:!0}}})}])}));
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=7)}([function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.file2b64=void 0,t.file2b64=function(e){return n(this,void 0,void 0,(function(){var t,r;return i(this,(function(n){return t=new FileReader,r=new Promise((function(e,r){t.addEventListener("load",(function(){var n,i=null===(n=t.result)||void 0===n?void 0:n.toString();i?e(i):r("could not convert file to base64")}),!1)})),t.readAsDataURL(e),[2,r]}))}))}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.imageCompressor=void 0;var o=r(2),a=r(3),l=r(0),s=r(4),u=r(5),c=function(){function e(e,t){var r=this;this.quill=e,this.options=t||{};var l=!!t.debug,s=!!t.suppressErrorLogging;this.Logger=new u.ConsoleLogger(l,s),(0,a.warnAboutOptions)(t,this.Logger);this.imageDrop=new o.ImageDrop(e,(function(e){return n(r,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return this.Logger.log("onImageDrop",{dataUrl:e}),[4,this.downscaleImageFromUrl(e)];case 1:return t=r.sent(),this.insertToEditor(t),[2]}}))}))}),this.Logger),this.Logger.log("fileChanged",{options:t,quill:e,debug:l});var c=this.quill.getModule("toolbar");c?c.addHandler("image",(function(){return r.selectLocalImage()})):this.Logger.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}return e.prototype.selectLocalImage=function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=function(){return e.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){e.fileHolder&&document.body.removeChild(e.fileHolder)}))},e.prototype.fileChanged=function(){var e;return n(this,void 0,void 0,(function(){var t,r,n,o;return i(this,(function(i){switch(i.label){case 0:return(t=null===(e=this.fileHolder)||void 0===e?void 0:e.files)&&t.length?(r=t[0],this.Logger.log("fileChanged",{file:r}),r?[4,(0,l.file2b64)(r)]:[2]):[2];case 1:return n=i.sent(),[4,this.downscaleImageFromUrl(n)];case 2:return o=i.sent(),this.insertToEditor(o),[2]}}))}))},e.prototype.downscaleImageFromUrl=function(e){return n(this,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return[4,(0,s.downscaleImage)(this.Logger,e,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.keepImageTypes,this.options.ignoreImageTypes,this.options.quality)];case 1:return t=r.sent(),this.Logger.log("downscaleImageFromUrl",{dataUrl:e,dataUrlCompressed:t}),[2,t]}}))}))},e.prototype.insertToEditor=function(e){this.Logger.log("insertToEditor",{url:e}),this.range=this.quill.getSelection();var t=this.range;t&&(this.logFileSize(e),this.quill.insertEmbed(t.index,"image","".concat(e),"user"),t.index++,this.quill.setSelection(t,"api"))},e.prototype.logFileSize=function(e){var t=(Math.round(3*(e.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);this.Logger.log("estimated img size: "+t+" kb")},e}();t.imageCompressor=c,window.imageCompressor=c,t.default=c},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.ImageDrop=void 0;var o=r(0),a=function(){function e(e,t,r){var n=this;this.quill=e,this.onNewDataUrl=t,this.logger=r,this.quill.root.addEventListener("drop",(function(e){return n.handleDrop(e)}),!1),this.quill.root.addEventListener("paste",(function(e){return n.handlePaste(e)}),!1)}return e.prototype.handleDrop=function(e){e.preventDefault();var t=e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:t}),t){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(e.clientX,e.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var i=this.getImageFilesFromFileList(e.dataTransfer.files);this.handleDragFiles(i)}},e.prototype.handleDragFiles=function(e){return n(this,void 0,void 0,(function(){var t,r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(t=e.pop())?(r=t,[4,(0,o.file2b64)(r)]):[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.handlePaste=function(e){var t=e.clipboardData&&e.clipboardData.items&&!!e.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:t}),t){var r=this.getImageFilesFromClipboard(e.clipboardData.items),n=r.length>0;if(this.logger.log("handlePaste",{hasImages:n,imageCount:r.length}),n)Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))&&this.logger.log("handlePaste also detected html"),e.preventDefault(),this.handlePasteFiles(r)}},e.prototype.handlePasteFiles=function(e){var t;return n(this,void 0,void 0,(function(){var r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(r=null===(t=e.pop())||void 0===t?void 0:t.getAsFile())?[4,(0,o.file2b64)(r)]:[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.getImageFilesFromClipboard=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e.prototype.getImageFilesFromFileList=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e}();function l(e){return!!e.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i)}t.ImageDrop=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warnAboutOptions=void 0,t.warnAboutOptions=function(e,t){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(t.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxWidth,"\n-> using default 1000")),e.maxWidth=1e3),e.maxHeight&&"number"!=typeof e.maxHeight&&(t.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxHeight,"\n-> using default 1000")),e.maxHeight=1e3),e.quality&&"number"!=typeof e.quality&&(t.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nreceived: ".concat(e.quality,"\n-> using default 0.7")),e.quality=.7),!e.imageType||"string"==typeof e.imageType&&e.imageType.startsWith("image/")||(t.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nreceived: '.concat(e.imageType,"\n-> using default image/jpeg")),e.imageType="image/jpeg"),e.keepImageTypes||(e.keepImageTypes=[]),e.keepImageTypes&&!Array.isArray(e.keepImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes||(e.ignoreImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.downscaleImage=void 0,t.downscaleImage=function(e,t,r,o,a,l,s,u){return n(this,void 0,void 0,(function(){var n,c,f,g,p,d,h,m;return i(this,(function(i){switch(i.label){case 0:return n=t.split(";")[0].split(":")[1],a=a||"image/jpeg",u=u||.7,(c=new Image).src=t,[4,new Promise((function(e){c.onload=function(){e()}}))];case 1:return i.sent(),f=function(e,t,r,n){if(r&&n&&e<=r&&t<=n)return[e,t];if(r&&e>r){var i=r,o=Math.floor(t/e*i);if(n&&o>n){var a=n;return[Math.floor(e/t*a),a]}return[i,o]}if(n&&t>n){o=n;return[i=Math.floor(e/t*o),o]}return[t,e]}(c.width,c.height,r,o),g=f[0],p=f[1],(d=document.createElement("canvas")).width=g,d.height=p,h=d.getContext("2d"),"image/jpeg"===a&&(h.fillStyle="#FFFFFF",h.fillRect(0,0,c.width,c.height)),(null==s?void 0:s.includes(n))?[2,t]:((null==l?void 0:l.includes(n))&&(a=n),h.drawImage(c,0,0,g,p),m=d.toDataURL(a,u),e.log("downscaling image...",{args:{dataUrl:t,maxWidth:r,maxHeight:o,imageType:a,ignoreImageTypes:s,keepImageTypes:l,imageQuality:u},newHeight:p,newWidth:g}),[2,m])}}))}))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConsoleLogger=void 0;var n=function(){function e(e,t){this.debug=e,this.suppressErrorLogging=t}return e.prototype.prefixString=function(){return"</> quill-image-compress: "},Object.defineProperty(e.prototype,"log",{get:function(){return this.debug?console.log.bind(console,this.prefixString()):function(){}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"error",{get:function(){return this.suppressErrorLogging?function(){}:console.error.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"warn",{get:function(){return this.suppressErrorLogging?function(){}:console.warn.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),e}();t.ConsoleLogger=n},,function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.imageCompressor=void 0;var i=n(r(1));t.imageCompressor=i.default}])}));
@@ -1 +1 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=6)}([function(e,t,r){e.exports=r(7)},function(e,t){function r(e,t,r,n,o,i,a){try{var u=e[i](a),s=u.value}catch(e){return void r(e)}u.done?t(s):Promise.resolve(s).then(n,o)}e.exports=function(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function u(e){r(a,o,i,u,s,"next",e)}function s(e){r(a,o,i,u,s,"throw",e)}u(void 0)}))}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){"use strict";r.r(t),r.d(t,"file2b64",(function(){return u}));var n=r(1),o=r.n(n),i=r(0),a=r.n(i);function u(e){return s.apply(this,arguments)}function s(){return(s=o()(a.a.mark((function e(t){var r,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new FileReader,n=new Promise((function(e){r.addEventListener("load",(function(){var t=r.result;e(t)}),!1)})),r.readAsDataURL(t),e.abrupt("return",n);case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},function(e,t,r){var n=r(11),o=r(12),i=r(13),a=r(15);e.exports=function(e,t){return n(e)||o(e,t)||i(e,t)||a()},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){"use strict";r.r(t),r.d(t,"imageCompressor",(function(){return v}));var n=r(1),o=r.n(n),i=r(2),a=r.n(i),u=r(3),s=r.n(u),l=r(0),c=r.n(l),f=!0,p=!1,h={prefixString:function(){return"</> quill-image-compress: "},get log(){return f?console.log.bind(console,this.prefixString()):function(){}},get error(){return p?function(){}:console.error.bind(console,this.prefixString())},get warn(){return p?function(){}:console.warn.bind(console,this.prefixString())}},g=r(8).ImageDrop,d=r(9).warnAboutOptions,m=r(4).file2b64,y=r(10).downscaleImage,v=function(){function e(t,r){var n=this;a()(this,e),this.quill=t,this.range=null,this.options=r||{},f=r.debug,p=r.suppressErrorLogging,d(r);var i=function(){var e=o()(c.a.mark((function e(t){var r;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return h.log("onImageDrop",{dataUrl:t}),e.next=3,n.downscaleImageFromUrl(t);case 3:r=e.sent,n.insertToEditor(r);case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();this.imageDrop=new g(t,i,h),h.log("fileChanged",{options:r,quill:t,debug:f});var u=this.quill.getModule("toolbar");u?u.addHandler("image",(function(){return n.selectLocalImage()})):h.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}var t,r;return s()(e,[{key:"selectLocalImage",value:function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=function(){return e.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(e.fileHolder)}))}},{key:"fileChanged",value:(r=o()(c.a.mark((function e(){var t,r,n;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this.fileHolder.files[0],h.log("fileChanged",{file:t}),t){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,m(t);case 6:return r=e.sent,e.next=9,this.downscaleImageFromUrl(r);case 9:n=e.sent,this.insertToEditor(n);case 11:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"downscaleImageFromUrl",value:(t=o()(c.a.mark((function e(t){var r;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,y(t,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.keepImageTypes,this.options.ignoreImageTypes,this.options.quality,h);case 2:return r=e.sent,h.log("downscaleImageFromUrl",{dataUrl:t,dataUrlCompressed:r}),e.abrupt("return",r);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"insertToEditor",value:function(e){h.log("insertToEditor",{url:e}),this.range=this.quill.getSelection();var t=this.range;this.logFileSize(e),this.quill.insertEmbed(t.index,"image","".concat(e),"user"),t.index++,this.quill.setSelection(t,"api")}},{key:"logFileSize",value:function(e){var t=(Math.round(3*(e.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);h.log("estimated img size: "+t+" kb")}}]),e}();window.imageCompressor=v,t.default=v},function(e,t,r){var n=function(e){"use strict";var t=Object.prototype,r=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",i=n.asyncIterator||"@@asyncIterator",a=n.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new T(n||[]);return i._invoke=function(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return k()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var u=b(a,r);if(u){if(u===c)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var s=l(e,t,r);if("normal"===s.type){if(n=r.done?"completed":"suspendedYield",s.arg===c)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n="completed",r.method="throw",r.arg=s.arg)}}}(e,r,a),i}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var c={};function f(){}function p(){}function h(){}var g={};u(g,o,(function(){return this}));var d=Object.getPrototypeOf,m=d&&d(d(L([])));m&&m!==t&&r.call(m,o)&&(g=m);var y=h.prototype=f.prototype=Object.create(g);function v(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){var n;this._invoke=function(o,i){function a(){return new t((function(n,a){!function n(o,i,a,u){var s=l(e[o],e,i);if("throw"!==s.type){var c=s.arg,f=c.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,u)}),(function(e){n("throw",e,a,u)})):t.resolve(f).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,u)}))}u(s.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function b(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,b(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var n=l(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,c;var o=n.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function I(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function L(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:k}}function k(){return{value:void 0,done:!0}}return p.prototype=h,u(y,"constructor",h),u(h,"constructor",p),p.displayName=u(h,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,u(e,a,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},v(x.prototype),u(x.prototype,i,(function(){return this})),e.AsyncIterator=x,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new x(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},v(y),u(y,a,"Generator"),u(y,o,(function(){return this})),u(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=L,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(I),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(u&&s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,c):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),I(r),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;I(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:L(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),c}},e}(e.exports);try{regeneratorRuntime=n}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},function(e,t,r){"use strict";r.r(t),r.d(t,"ImageDrop",(function(){return p}));var n=r(1),o=r.n(n),i=r(2),a=r.n(i),u=r(3),s=r.n(u),l=r(0),c=r.n(l),f=r(4).file2b64,p=function(){function e(t,r,n){var o=this;a()(this,e),this.logger=n,this.quill=t,this.onNewDataUrl=r,this.quill.root.addEventListener("drop",(function(e){return o.handleDrop(e)}),!1),this.quill.root.addEventListener("paste",(function(e){return o.handlePaste(e)}),!1)}var t;return s()(e,[{key:"handleNewImageFiles",value:(t=o()(c.a.mark((function e(t){var r,n,o;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Array.isArray(t)){e.next=2;break}return e.abrupt("return");case 2:if(r=t.pop()){e.next=5;break}return e.abrupt("return");case 5:return n=r.getAsFile?r.getAsFile():r,e.next=8,f(n);case 8:o=e.sent,this.logger.log("handleNewImageFiles",{base64ImageSrc:o}),this.onNewDataUrl(o);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"handleDrop",value:function(e){e.preventDefault();var t=e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:t}),t){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(e.clientX,e.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var o=this.getImageFiles(e.dataTransfer.files);this.handleNewImageFiles(o)}}},{key:"handlePaste",value:function(e){var t=e.clipboardData&&e.clipboardData.items&&!!e.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:t}),t){var r=this.getImageFiles(e.clipboardData.items),n=r.length>0;if(this.logger.log("handlePaste",{hasImages:n,imageCount:r.length}),n)Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))&&this.logger.log("handlePaste also detected html"),e.preventDefault(),this.handleNewImageFiles(r)}}},{key:"getImageFiles",value:function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return!!e.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i)}))||[]}}]),e}()},function(e,t,r){"use strict";function n(e){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(Logger.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxWidth,"\n-> using default 1000")),e.maxWidth=1e3),e.maxHeight&&"number"!=typeof e.maxHeight&&(Logger.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxHeight,"\n-> using default 1000")),e.maxHeight=1e3),e.quality&&"number"!=typeof e.quality&&(Logger.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nreceived: ".concat(e.quality,"\n-> using default 0.7")),e.quality=.7),!e.imageType||"string"==typeof e.imageType&&e.imageType.startsWith("image/")||(Logger.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nreceived: '.concat(e.imageType,"\n-> using default image/jpeg")),e.imageType="image/jpeg"),e.keepImageTypes||(e.keepImageTypes=[]),e.keepImageTypes&&!Array.isArray(e.keepImageTypes)&&(Logger.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes||(e.ignoreImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(Logger.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}r.r(t),r.d(t,"warnAboutOptions",(function(){return n}))},function(e,t,r){"use strict";r.r(t),r.d(t,"downscaleImage",(function(){return l}));var n=r(5),o=r.n(n),i=r(1),a=r.n(i),u=r(0),s=r.n(u);function l(e,t,r,n,o,i,a,u){return c.apply(this,arguments)}function c(){return(c=a()(s.a.mark((function e(t,r,n,i,a,u,l,c){var p,h,g,d,m,y,v,x,b;return s.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return p=t.split(";")[0].split(":")[1],i=i||"image/jpeg",l=l||.7,(h=new Image).src=t,e.next=7,new Promise((function(e){h.onload=function(){e()}}));case 7:if(g=f(h.width,h.height,r,n),d=o()(g,2),m=d[0],y=d[1],(v=document.createElement("canvas")).width=m,v.height=y,x=v.getContext("2d"),"image/jpeg"===i&&(x.fillStyle="#FFFFFF",x.fillRect(0,0,h.width,h.height)),!u.includes(p)){e.next=15;break}return e.abrupt("return",t);case 15:return a.includes(p)&&(i=p),x.drawImage(h,0,0,m,y),b=v.toDataURL(i,l),c.log("downscaling image...",{args:{dataUrl:t,maxWidth:r,maxHeight:n,imageType:i,ignoreImageTypes:u,keepImageTypes:a,imageQuality:l},newHeight:y,newWidth:m}),e.abrupt("return",b);case 20:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function f(e,t,r,n){if(e<=r&&t<=n)return[e,t];if(e>r){var o=r,i=Math.floor(t/e*o);if(i>n){var a=n;return[Math.floor(e/t*a),a]}return[o,i]}if(t>n){var u=n;return[Math.floor(e/t*u),u]}}},function(e,t){e.exports=function(e){if(Array.isArray(e))return e},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i=[],a=!0,u=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==r.return||r.return()}finally{if(u)throw o}}return i}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){var n=r(14);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.__esModule=!0,e.exports.default=e.exports}])}));
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=1)}([function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.file2b64=void 0,t.file2b64=function(e){return n(this,void 0,void 0,(function(){var t,r;return i(this,(function(n){return t=new FileReader,r=new Promise((function(e,r){t.addEventListener("load",(function(){var n,i=null===(n=t.result)||void 0===n?void 0:n.toString();i?e(i):r("could not convert file to base64")}),!1)})),t.readAsDataURL(e),[2,r]}))}))}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.imageCompressor=void 0;var o=r(2),a=r(3),l=r(0),s=r(4),u=r(5),c=function(){function e(e,t){var r=this;this.quill=e,this.options=t||{};var l=!!t.debug,s=!!t.suppressErrorLogging;this.Logger=new u.ConsoleLogger(l,s),(0,a.warnAboutOptions)(t,this.Logger);this.imageDrop=new o.ImageDrop(e,(function(e){return n(r,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return this.Logger.log("onImageDrop",{dataUrl:e}),[4,this.downscaleImageFromUrl(e)];case 1:return t=r.sent(),this.insertToEditor(t),[2]}}))}))}),this.Logger),this.Logger.log("fileChanged",{options:t,quill:e,debug:l});var c=this.quill.getModule("toolbar");c?c.addHandler("image",(function(){return r.selectLocalImage()})):this.Logger.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}return e.prototype.selectLocalImage=function(){var e=this;this.range=this.quill.getSelection(),this.fileHolder=document.createElement("input"),this.fileHolder.setAttribute("type","file"),this.fileHolder.setAttribute("accept","image/*"),this.fileHolder.setAttribute("style","visibility:hidden"),this.fileHolder.onchange=function(){return e.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){e.fileHolder&&document.body.removeChild(e.fileHolder)}))},e.prototype.fileChanged=function(){var e;return n(this,void 0,void 0,(function(){var t,r,n,o;return i(this,(function(i){switch(i.label){case 0:return(t=null===(e=this.fileHolder)||void 0===e?void 0:e.files)&&t.length?(r=t[0],this.Logger.log("fileChanged",{file:r}),r?[4,(0,l.file2b64)(r)]:[2]):[2];case 1:return n=i.sent(),[4,this.downscaleImageFromUrl(n)];case 2:return o=i.sent(),this.insertToEditor(o),[2]}}))}))},e.prototype.downscaleImageFromUrl=function(e){return n(this,void 0,void 0,(function(){var t;return i(this,(function(r){switch(r.label){case 0:return[4,(0,s.downscaleImage)(this.Logger,e,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.keepImageTypes,this.options.ignoreImageTypes,this.options.quality)];case 1:return t=r.sent(),this.Logger.log("downscaleImageFromUrl",{dataUrl:e,dataUrlCompressed:t}),[2,t]}}))}))},e.prototype.insertToEditor=function(e){this.Logger.log("insertToEditor",{url:e}),this.range=this.quill.getSelection();var t=this.range;t&&(this.logFileSize(e),this.quill.insertEmbed(t.index,"image","".concat(e),"user"),t.index++,this.quill.setSelection(t,"api"))},e.prototype.logFileSize=function(e){var t=(Math.round(3*(e.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);this.Logger.log("estimated img size: "+t+" kb")},e}();t.imageCompressor=c,window.imageCompressor=c,t.default=c},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.ImageDrop=void 0;var o=r(0),a=function(){function e(e,t,r){var n=this;this.quill=e,this.onNewDataUrl=t,this.logger=r,this.quill.root.addEventListener("drop",(function(e){return n.handleDrop(e)}),!1),this.quill.root.addEventListener("paste",(function(e){return n.handlePaste(e)}),!1)}return e.prototype.handleDrop=function(e){e.preventDefault();var t=e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:t}),t){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(e.clientX,e.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var i=this.getImageFilesFromFileList(e.dataTransfer.files);this.handleDragFiles(i)}},e.prototype.handleDragFiles=function(e){return n(this,void 0,void 0,(function(){var t,r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(t=e.pop())?(r=t,[4,(0,o.file2b64)(r)]):[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.handlePaste=function(e){var t=e.clipboardData&&e.clipboardData.items&&!!e.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:t}),t){var r=this.getImageFilesFromClipboard(e.clipboardData.items),n=r.length>0;if(this.logger.log("handlePaste",{hasImages:n,imageCount:r.length}),n)Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))&&this.logger.log("handlePaste also detected html"),e.preventDefault(),this.handlePasteFiles(r)}},e.prototype.handlePasteFiles=function(e){var t;return n(this,void 0,void 0,(function(){var r,n;return i(this,(function(i){switch(i.label){case 0:return Array.isArray(e)&&(r=null===(t=e.pop())||void 0===t?void 0:t.getAsFile())?[4,(0,o.file2b64)(r)]:[2];case 1:return n=i.sent(),this.logger.log("handleNewImageFiles",{base64ImageSrc:n}),this.onNewDataUrl(n),[2]}}))}))},e.prototype.getImageFilesFromClipboard=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e.prototype.getImageFilesFromFileList=function(e){var t=Array.from(e);return this.logger.log("getImageFiles",{mimeTypes:t.map((function(e){return e.type}))}),t.filter((function(e){return l(e.type)}))||[]},e}();function l(e){return!!e.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i)}t.ImageDrop=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warnAboutOptions=void 0,t.warnAboutOptions=function(e,t){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(t.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxWidth,"\n-> using default 1000")),e.maxWidth=1e3),e.maxHeight&&"number"!=typeof e.maxHeight&&(t.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nreceived: ".concat(e.maxHeight,"\n-> using default 1000")),e.maxHeight=1e3),e.quality&&"number"!=typeof e.quality&&(t.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nreceived: ".concat(e.quality,"\n-> using default 0.7")),e.quality=.7),!e.imageType||"string"==typeof e.imageType&&e.imageType.startsWith("image/")||(t.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nreceived: '.concat(e.imageType,"\n-> using default image/jpeg")),e.imageType="image/jpeg"),e.keepImageTypes||(e.keepImageTypes=[]),e.keepImageTypes&&!Array.isArray(e.keepImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes||(e.ignoreImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(t.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function l(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.downscaleImage=void 0,t.downscaleImage=function(e,t,r,o,a,l,s,u){return n(this,void 0,void 0,(function(){var n,c,f,g,p,d,h,m;return i(this,(function(i){switch(i.label){case 0:return n=t.split(";")[0].split(":")[1],a=a||"image/jpeg",u=u||.7,(c=new Image).src=t,[4,new Promise((function(e){c.onload=function(){e()}}))];case 1:return i.sent(),f=function(e,t,r,n){if(r&&n&&e<=r&&t<=n)return[e,t];if(r&&e>r){var i=r,o=Math.floor(t/e*i);if(n&&o>n){var a=n;return[Math.floor(e/t*a),a]}return[i,o]}if(n&&t>n){o=n;return[i=Math.floor(e/t*o),o]}return[t,e]}(c.width,c.height,r,o),g=f[0],p=f[1],(d=document.createElement("canvas")).width=g,d.height=p,h=d.getContext("2d"),"image/jpeg"===a&&(h.fillStyle="#FFFFFF",h.fillRect(0,0,c.width,c.height)),(null==s?void 0:s.includes(n))?[2,t]:((null==l?void 0:l.includes(n))&&(a=n),h.drawImage(c,0,0,g,p),m=d.toDataURL(a,u),e.log("downscaling image...",{args:{dataUrl:t,maxWidth:r,maxHeight:o,imageType:a,ignoreImageTypes:s,keepImageTypes:l,imageQuality:u},newHeight:p,newWidth:g}),[2,m])}}))}))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConsoleLogger=void 0;var n=function(){function e(e,t){this.debug=e,this.suppressErrorLogging=t}return e.prototype.prefixString=function(){return"</> quill-image-compress: "},Object.defineProperty(e.prototype,"log",{get:function(){return this.debug?console.log.bind(console,this.prefixString()):function(){}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"error",{get:function(){return this.suppressErrorLogging?function(){}:console.error.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"warn",{get:function(){return this.suppressErrorLogging?function(){}:console.warn.bind(console,this.prefixString())},enumerable:!1,configurable:!0}),e}();t.ConsoleLogger=n}])}));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "quill-image-compress",
3
3
  "description": "A Quill rich text editor Module which compresses images uploaded to the editor",
4
- "version": "1.2.21",
4
+ "version": "1.2.24",
5
5
  "main": "dist/quill.imageCompressor.min.js",
6
6
  "homepage": "https://benwinding.github.io/quill-image-compress/src/demo.html",
7
7
  "repository": "https://github.com/benwinding/quill-image-compress",
@@ -16,6 +16,7 @@
16
16
  "files": [
17
17
  "src/*.html",
18
18
  "src/*.js",
19
+ "types",
19
20
  "dist",
20
21
  "README.md"
21
22
  ],
@@ -27,21 +28,25 @@
27
28
  "compression",
28
29
  "reduce"
29
30
  ],
31
+ "dependencies": {
32
+ "quill": "^1.x"
33
+ },
30
34
  "devDependencies": {
31
35
  "@babel/core": "^7.8.7",
32
36
  "@babel/plugin-proposal-class-properties": "^7.8.3",
33
- "@babel/preset-env": "^7.8.7",
34
37
  "@babel/plugin-transform-runtime": "^7.8.3",
38
+ "@babel/preset-env": "^7.8.7",
39
+ "@types/node": "^14.14.22",
40
+ "@types/quill": "^2.0.9",
35
41
  "babel-loader": "^8.0.6",
36
42
  "babel-plugin-transform-object-assign": "^6.22.0",
37
43
  "extract-text-webpack-plugin": "^4.0.0-beta.0",
38
44
  "style-loader": "^0.19.1",
45
+ "ts-loader": "^8.0.11",
46
+ "typescript": "^4.1.2",
39
47
  "uglifyjs-webpack-plugin": "^1.1.6",
40
48
  "webpack": "^4.42.0",
41
49
  "webpack-cli": "^3.2.1",
42
50
  "webpack-dev-server": "^3.1.14"
43
- },
44
- "dependencies": {
45
- "quill": "^1.x"
46
51
  }
47
52
  }
@@ -40,7 +40,6 @@
40
40
  <script src="../dist/quill.imageCompressor.min.js"></script>
41
41
  <script>
42
42
  Quill.register("modules/imageCompressor", imageCompressor);
43
- // Quill.register("modules/htmlEditButton", htmlEditButton);
44
43
 
45
44
  const fullToolbarOptions = [
46
45
  [{ header: [1, 2, 3, false] }],
@@ -63,9 +62,6 @@
63
62
  imageType: 'image/jpeg',
64
63
  debug: true
65
64
  },
66
- // htmlEditButton: {
67
- // debug: true
68
- // }
69
65
  }
70
66
  });
71
67
 
package/src/demo.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import Quill from "quill";
2
- import imageCompressor from "./quill.imageCompressor.js";
2
+ import imageCompressor from "./quill.imageCompressor.ts";
3
3
 
4
4
  Quill.register("modules/imageCompressor", imageCompressor);
5
5
 
@@ -0,0 +1,9 @@
1
+ export declare class ConsoleLogger {
2
+ private debug;
3
+ private suppressErrorLogging;
4
+ constructor(debug: boolean, suppressErrorLogging: boolean);
5
+ prefixString(): string;
6
+ get log(): (...args: any[]) => void;
7
+ get error(): (...args: any[]) => void;
8
+ get warn(): (...args: any[]) => void;
9
+ }
@@ -0,0 +1,2 @@
1
+ import { ConsoleLogger } from "ConsoleLogger";
2
+ export declare function downscaleImage(logger: ConsoleLogger, dataUrl: string, maxWidth?: number, maxHeight?: number, imageType?: string, keepImageTypes?: string[], ignoreImageTypes?: string[], imageQuality?: number): Promise<string>;
@@ -0,0 +1 @@
1
+ export declare function file2b64(file: File): Promise<string>;
@@ -0,0 +1,4 @@
1
+ import imageCompressor from "./quill.imageCompressor";
2
+ import { OptionsObject } from "./options.object";
3
+ export { imageCompressor };
4
+ export { OptionsObject as ImageCompressorOptions };
@@ -0,0 +1,11 @@
1
+ export declare type OptionsObject = {
2
+ validation?: boolean;
3
+ debug?: boolean;
4
+ suppressErrorLogging?: boolean;
5
+ maxWidth?: number;
6
+ maxHeight?: number;
7
+ imageType?: string;
8
+ keepImageTypes?: string[];
9
+ ignoreImageTypes?: string[];
10
+ quality?: number;
11
+ };
@@ -0,0 +1,3 @@
1
+ import { OptionsObject } from 'options.object';
2
+ import { ConsoleLogger } from './ConsoleLogger';
3
+ export declare function warnAboutOptions(options: OptionsObject, Logger: ConsoleLogger): void;
@@ -0,0 +1,18 @@
1
+ import Quill from "quill";
2
+ import { OptionsObject } from "./options.object";
3
+ declare class imageCompressor {
4
+ private quill;
5
+ private range?;
6
+ private options;
7
+ private imageDrop;
8
+ private fileHolder;
9
+ private Logger;
10
+ constructor(quill: Quill, options: OptionsObject);
11
+ selectLocalImage(): void;
12
+ fileChanged(): Promise<void>;
13
+ downscaleImageFromUrl(dataUrl: string): Promise<string>;
14
+ insertToEditor(url: string): void;
15
+ logFileSize(dataUrl: string): void;
16
+ }
17
+ export { imageCompressor };
18
+ export default imageCompressor;
@@ -0,0 +1,14 @@
1
+ import Quill from "quill";
2
+ import { ConsoleLogger } from "./ConsoleLogger";
3
+ export declare class ImageDrop {
4
+ private quill;
5
+ private onNewDataUrl;
6
+ private logger;
7
+ constructor(quill: Quill, onNewDataUrl: (dataUrl: string) => void, logger: ConsoleLogger);
8
+ handleDrop(evt: DragEvent): void;
9
+ private handleDragFiles;
10
+ handlePaste(evt: ClipboardEvent): void;
11
+ private handlePasteFiles;
12
+ getImageFilesFromClipboard(filesList: DataTransferItemList): DataTransferItem[];
13
+ getImageFilesFromFileList(filesList: FileList): File[];
14
+ }
@@ -1,98 +0,0 @@
1
- // Take an image URL, downscale it to the given width, and return a new image URL.
2
- export async function downscaleImage(
3
- dataUrl,
4
- maxWidth,
5
- maxHeight,
6
- imageType,
7
- keepImageTypes,
8
- ignoreImageTypes,
9
- imageQuality,
10
- logger,
11
- ) {
12
- "use strict";
13
- // Input image values
14
- const inputImageType = dataUrl.split(';')[0].split(':')[1];
15
-
16
- // Provide default values
17
- imageType = imageType || "image/jpeg";
18
- imageQuality = imageQuality || 0.7;
19
-
20
- // Create a temporary image so that we can compute the height of the downscaled image.
21
- const image = new Image();
22
- image.src = dataUrl;
23
- await new Promise((resolve) => {
24
- image.onload = () => {
25
- resolve();
26
- };
27
- });
28
- const [newWidth, newHeight] = getDimensions(
29
- image.width,
30
- image.height,
31
- maxWidth,
32
- maxHeight
33
- );
34
-
35
- // Create a temporary canvas to draw the downscaled image on.
36
- const canvas = document.createElement("canvas");
37
- canvas.width = newWidth;
38
- canvas.height = newHeight;
39
-
40
- const ctx = canvas.getContext("2d");
41
-
42
- // If the type is an jpeg, draw a white background first.
43
- if (imageType === "image/jpeg") {
44
- ctx.fillStyle = "#FFFFFF";
45
- ctx.fillRect(0, 0, image.width, image.height);
46
- }
47
-
48
- // If the type is included in the ignore list, return the original
49
- if (ignoreImageTypes.includes(inputImageType)) {
50
- return dataUrl;
51
- }
52
-
53
- // If the type is included in keep type list, fix the image type
54
- if (keepImageTypes.includes(inputImageType)) {
55
- imageType = inputImageType;
56
- }
57
-
58
- // Draw the downscaled image on the canvas and return the new data URL.
59
- ctx.drawImage(image, 0, 0, newWidth, newHeight);
60
- const newDataUrl = canvas.toDataURL(imageType, imageQuality);
61
- logger.log("downscaling image...", {
62
- args: {
63
- dataUrl,
64
- maxWidth,
65
- maxHeight,
66
- imageType,
67
- ignoreImageTypes,
68
- keepImageTypes,
69
- imageQuality,
70
- },
71
- newHeight,
72
- newWidth,
73
- });
74
- return newDataUrl;
75
- }
76
-
77
- function getDimensions(inputWidth, inputHeight, maxWidth, maxHeight) {
78
- if (inputWidth <= maxWidth && inputHeight <= maxHeight) {
79
- return [inputWidth, inputHeight];
80
- }
81
- if (inputWidth > maxWidth) {
82
- const newWidth = maxWidth;
83
- const newHeight = Math.floor((inputHeight / inputWidth) * newWidth);
84
-
85
- if (newHeight > maxHeight) {
86
- const newHeight = maxHeight;
87
- const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
88
- return [newWidth, newHeight];
89
- } else {
90
- return [newWidth, newHeight];
91
- }
92
- }
93
- if (inputHeight > maxHeight) {
94
- const newHeight = maxHeight;
95
- const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
96
- return [newWidth, newHeight];
97
- }
98
- }
package/src/file2b64.js DELETED
@@ -1,16 +0,0 @@
1
- export async function file2b64(file) {
2
- const fileReader = new FileReader();
3
-
4
- const promise = new Promise((resolve) => {
5
- fileReader.addEventListener(
6
- "load",
7
- () => {
8
- const base64ImageSrc = fileReader.result;
9
- resolve(base64ImageSrc);
10
- },
11
- false
12
- );
13
- });
14
- fileReader.readAsDataURL(file);
15
- return promise;
16
- }
@@ -1,66 +0,0 @@
1
- export function warnAboutOptions(options) {
2
- // Safe-ify Options
3
- options.maxWidth = options.maxWidth || 1000;
4
- options.maxHeight = options.maxHeight || 1000;
5
-
6
- if (options.maxWidth && typeof options.maxWidth !== "number") {
7
- Logger.warn(
8
- `[config error] 'maxWidth' is required to be a "number" (in pixels),
9
- received: ${options.maxWidth}
10
- -> using default 1000`
11
- );
12
- options.maxWidth = 1000;
13
- }
14
- if (options.maxHeight && typeof options.maxHeight !== "number") {
15
- Logger.warn(
16
- `[config error] 'maxHeight' is required to be a "number" (in pixels),
17
- received: ${options.maxHeight}
18
- -> using default 1000`
19
- );
20
- options.maxHeight = 1000;
21
- }
22
- if (options.quality && typeof options.quality !== "number") {
23
- Logger.warn(
24
- `quill.imageCompressor: [config error] 'quality' is required to be a "number",
25
- received: ${options.quality}
26
- -> using default 0.7`
27
- );
28
- options.quality = 0.7;
29
- }
30
- if (
31
- options.imageType &&
32
- (typeof options.imageType !== "string" ||
33
- !options.imageType.startsWith("image/"))
34
- ) {
35
- Logger.warn(
36
- `quill.imageCompressor: [config error] 'imageType' is required be in the form of "image/png" or "image/jpeg" etc ...,
37
- received: ${options.imageType}
38
- -> using default image/jpeg`
39
- );
40
- options.imageType = "image/jpeg";
41
- }
42
- if (!options.keepImageTypes) {
43
- options.keepImageTypes = []
44
- }
45
- if (
46
- options.keepImageTypes &&
47
- (!Array.isArray(options.keepImageTypes))
48
- ) {
49
- Logger.warn(
50
- `quill.imageCompressor: [config error] 'keepImageTypes' is required to be a "array", received: ${options.keepImageTypes} -> using default []`
51
- )
52
- options.keepImageTypes = [];
53
- }
54
- if (!options.ignoreImageTypes) {
55
- options.ignoreImageTypes = []
56
- }
57
- if (
58
- options.ignoreImageTypes &&
59
- (!Array.isArray(options.ignoreImageTypes))
60
- ) {
61
- Logger.warn(
62
- `quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a "array", received: ${options.ignoreImageTypes} -> using default []`
63
- )
64
- options.ignoreImageTypes = [];
65
- }
66
- }
@@ -1,129 +0,0 @@
1
- let debug = true;
2
- let suppressErrorLogging = false;
3
- const Logger = {
4
- prefixString() {
5
- return `</> quill-image-compress: `;
6
- },
7
- get log() {
8
- if (!debug) {
9
- return (...any) => {};
10
- }
11
- const boundLogFn = console.log.bind(console, this.prefixString());
12
- return boundLogFn;
13
- },
14
- get error() {
15
- if (suppressErrorLogging) {
16
- return (...any) => {};
17
- }
18
- const boundLogFn = console.error.bind(console, this.prefixString());
19
- return boundLogFn;
20
- },
21
- get warn() {
22
- if (suppressErrorLogging) {
23
- return (...any) => {};
24
- }
25
- const boundLogFn = console.warn.bind(console, this.prefixString());
26
- return boundLogFn;
27
- },
28
- };
29
-
30
- const { ImageDrop } = require("./quill.imageDrop");
31
- const { warnAboutOptions } = require("./options.validation");
32
- const { file2b64 } = require("./file2b64");
33
- const { downscaleImage } = require("./downscaleImage");
34
-
35
- class imageCompressor {
36
- constructor(quill, options) {
37
- this.quill = quill;
38
- this.range = null;
39
- this.options = options || {};
40
- debug = options.debug;
41
- suppressErrorLogging = options.suppressErrorLogging;
42
-
43
- warnAboutOptions(options);
44
- const onImageDrop = async (dataUrl) => {
45
- Logger.log("onImageDrop", { dataUrl });
46
- const dataUrlCompressed = await this.downscaleImageFromUrl(dataUrl);
47
- this.insertToEditor(dataUrlCompressed);
48
- };
49
- this.imageDrop = new ImageDrop(quill, onImageDrop, Logger);
50
-
51
- Logger.log("fileChanged", { options, quill, debug });
52
-
53
- var toolbar = this.quill.getModule("toolbar");
54
- if (toolbar) {
55
- toolbar.addHandler("image", () => this.selectLocalImage());
56
- } else {
57
- Logger.error('Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in')
58
- }
59
- }
60
-
61
- selectLocalImage() {
62
- this.range = this.quill.getSelection();
63
- this.fileHolder = document.createElement("input");
64
- this.fileHolder.setAttribute("type", "file");
65
- this.fileHolder.setAttribute("accept", "image/*");
66
- this.fileHolder.setAttribute("style", "visibility:hidden");
67
-
68
- this.fileHolder.onchange = () => this.fileChanged();
69
-
70
- document.body.appendChild(this.fileHolder);
71
-
72
- this.fileHolder.click();
73
-
74
- window.requestAnimationFrame(() => {
75
- document.body.removeChild(this.fileHolder);
76
- });
77
- }
78
-
79
- async fileChanged() {
80
- const file = this.fileHolder.files[0];
81
- Logger.log("fileChanged", { file });
82
- if (!file) {
83
- return;
84
- }
85
- const base64ImageSrc = await file2b64(file);
86
- const base64ImageSmallSrc = await this.downscaleImageFromUrl(
87
- base64ImageSrc
88
- );
89
- this.insertToEditor(base64ImageSmallSrc);
90
- }
91
-
92
- async downscaleImageFromUrl(dataUrl) {
93
- const dataUrlCompressed = await downscaleImage(
94
- dataUrl,
95
- this.options.maxWidth,
96
- this.options.maxHeight,
97
- this.options.imageType,
98
- this.options.keepImageTypes,
99
- this.options.ignoreImageTypes,
100
- this.options.quality,
101
- Logger,
102
- );
103
- Logger.log("downscaleImageFromUrl", { dataUrl, dataUrlCompressed });
104
- return dataUrlCompressed;
105
- }
106
-
107
- insertToEditor(url) {
108
- Logger.log('insertToEditor', {url});
109
- this.range = this.quill.getSelection();
110
- const range = this.range;
111
- // Insert the compressed image
112
- this.logFileSize(url);
113
- this.quill.insertEmbed(range.index, "image", `${url}`, "user");
114
- // Move cursor to next position
115
- range.index++;
116
- this.quill.setSelection(range, "api");
117
- }
118
-
119
- logFileSize(dataUrl) {
120
- const head = "data:image/png;base64,";
121
- const fileSizeBytes = Math.round(((dataUrl.length - head.length) * 3) / 4);
122
- const fileSizeKiloBytes = (fileSizeBytes / 1024).toFixed(0);
123
- Logger.log("estimated img size: " + fileSizeKiloBytes + " kb");
124
- }
125
- }
126
-
127
- window.imageCompressor = imageCompressor;
128
- export { imageCompressor };
129
- export default imageCompressor;
@@ -1,100 +0,0 @@
1
- const { file2b64 } = require("./file2b64");
2
-
3
- /*
4
- From: https://github.com/kensnyder/quill-image-drop-module/blob/master/index.js
5
- */
6
- export class ImageDrop {
7
- constructor(quill, onNewDataUrl, logger) {
8
- // save the quill reference
9
- this.logger = logger;
10
- this.quill = quill;
11
- this.onNewDataUrl = onNewDataUrl;
12
- // listen for drop and paste events
13
- this.quill.root.addEventListener("drop", (e) => this.handleDrop(e), false);
14
- this.quill.root.addEventListener(
15
- "paste",
16
- (e) => this.handlePaste(e),
17
- false
18
- );
19
- }
20
-
21
- async handleNewImageFiles(imageFiles) {
22
- if (!Array.isArray(imageFiles)) {
23
- return;
24
- }
25
- const firstImage = imageFiles.pop();
26
- if (!firstImage) {
27
- return;
28
- }
29
- const blob = firstImage.getAsFile ? firstImage.getAsFile() : firstImage;
30
- const base64ImageSrc = await file2b64(blob);
31
- this.logger.log("handleNewImageFiles", { base64ImageSrc });
32
- this.onNewDataUrl(base64ImageSrc);
33
- }
34
-
35
- handleDrop(evt) {
36
- evt.preventDefault();
37
- const hasFiles =
38
- evt.dataTransfer &&
39
- evt.dataTransfer.files &&
40
- evt.dataTransfer.files.length;
41
- this.logger.log("handleDrop", { hasFiles });
42
- if (!hasFiles) {
43
- return;
44
- }
45
- if (document.caretRangeFromPoint) {
46
- const selection = document.getSelection();
47
- const range = document.caretRangeFromPoint(evt.clientX, evt.clientY);
48
- if (selection && range) {
49
- selection.setBaseAndExtent(
50
- range.startContainer,
51
- range.startOffset,
52
- range.startContainer,
53
- range.startOffset
54
- );
55
- }
56
- }
57
- const images = this.getImageFiles(evt.dataTransfer.files);
58
- this.handleNewImageFiles(images);
59
- }
60
-
61
- handlePaste(evt) {
62
- const hasItems =
63
- evt.clipboardData &&
64
- evt.clipboardData.items &&
65
- !!evt.clipboardData.items.length;
66
- this.logger.log("handlePaste", { hasItems });
67
- if (!hasItems) {
68
- return;
69
- }
70
- const images = this.getImageFiles(evt.clipboardData.items);
71
- const hasImages = images.length > 0;
72
- this.logger.log("handlePaste", { hasImages, imageCount: images.length });
73
- if (!hasImages) {
74
- return;
75
- }
76
-
77
- // Text pasted from word will contain both text/html and image/png.
78
- const hasHtmlMixed = Array.from(evt.clipboardData.items).some(f => f.type === 'text/html');
79
- if (hasHtmlMixed) {
80
- this.logger.log("handlePaste also detected html");
81
- }
82
-
83
- evt.preventDefault();
84
- this.handleNewImageFiles(images);
85
- }
86
-
87
- getImageFiles(filesList) {
88
- const files = Array.from(filesList);
89
- this.logger.log("getImageFiles", { mimeTypes: files.map(f => f.type) });
90
- // check each file for an image
91
- function isFileImage(file) {
92
- const isImage = !!file.type.match(
93
- /^image\/(gif|jpe?g|a?png|svg|webp|bmp)/i
94
- );
95
- return isImage;
96
- }
97
- const images = files.filter(isFileImage);
98
- return images || [];
99
- }
100
- }