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 +2 -0
- package/dist/demo.min.js +1 -1
- package/dist/index.js +1 -0
- package/dist/quill.imageCompressor.min.js +1 -1
- package/package.json +10 -5
- package/src/demo-script-tag.html +0 -4
- package/src/demo.js +1 -1
- package/types/ConsoleLogger.d.ts +9 -0
- package/types/downscaleImage.d.ts +2 -0
- package/types/file2b64.d.ts +1 -0
- package/types/index.d.ts +4 -0
- package/types/options.object.d.ts +11 -0
- package/types/options.validation.d.ts +3 -0
- package/types/quill.imageCompressor.d.ts +18 -0
- package/types/quill.imageDrop.d.ts +14 -0
- package/src/downscaleImage.js +0 -98
- package/src/file2b64.js +0 -16
- package/src/options.validation.js +0 -66
- package/src/quill.imageCompressor.js +0 -129
- package/src/quill.imageDrop.js +0 -100
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.
|
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
|
}
|
package/src/demo-script-tag.html
CHANGED
@@ -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
@@ -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>;
|
package/types/index.d.ts
ADDED
@@ -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,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
|
+
}
|
package/src/downscaleImage.js
DELETED
@@ -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;
|
package/src/quill.imageDrop.js
DELETED
@@ -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
|
-
}
|