quill-image-compress 1.2.13 → 1.2.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -9
- package/dist/demo.min.js +1 -1
- package/dist/quill.imageCompressor.min.js +1 -1
- package/package.json +1 -1
- package/src/demo.js +1 -1
- package/src/downscaleImage.js +92 -0
- package/src/quill.imageCompressor.js +34 -80
- package/src/quill.imageDrop.js +10 -1
package/README.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# quill-image-compress
|
2
2
|
<!-- [START badges] -->
|
3
|
-
[](https://www.npmjs.com/package/quill-image-compress)
|
4
|
-
[](https://github.com/benwinding/quill-image-compress/blob/master/LICENSE)
|
5
|
-
[](https://www.npmjs.com/package/quill-image-compress)
|
3
|
+
[](https://www.npmjs.com/package/quill-image-compress)
|
4
|
+
[](https://github.com/benwinding/quill-image-compress/blob/master/LICENSE)
|
5
|
+
[](https://www.npmjs.com/package/quill-image-compress)
|
6
6
|
[](https://github.com/benwinding/quill-image-compress)
|
7
7
|

|
8
8
|
<!-- [END badges] -->
|
9
9
|
|
10
|
-
Quill.js Module which compresses images that are uploaded to the editor
|
10
|
+
Quill.js Module which compresses images that are uploaded to the editor
|
11
11
|
|
12
12
|
- [Live Demo!](https://benwinding.github.io/quill-image-compress/src/demo.html)
|
13
13
|
- [Live Demo! (with script tag)](https://benwinding.github.io/quill-image-compress/src/demo-script-tag.html)
|
@@ -21,7 +21,7 @@ Quill.js Module which compresses images that are uploaded to the editor
|
|
21
21
|
- Drag/Dropped into quill
|
22
22
|
- Pasted into quill
|
23
23
|
- Clicked image load button
|
24
|
-
- Handles most image formats a browser can read:
|
24
|
+
- Handles most image formats a browser can read:
|
25
25
|
- `gif|jpeg|png|svg|webp|bmp|vnd`
|
26
26
|
- Compression options [more info](#options)
|
27
27
|
|
@@ -42,6 +42,7 @@ const quill = new Quill(editor, {
|
|
42
42
|
maxHeight: 1000, // default
|
43
43
|
imageType: 'image/jpeg', // default
|
44
44
|
debug: true, // default
|
45
|
+
suppressErrorLogging: false, // default
|
45
46
|
}
|
46
47
|
}
|
47
48
|
});
|
@@ -70,13 +71,21 @@ const quill = new Quill(editor, {
|
|
70
71
|
|
71
72
|
## Options
|
72
73
|
|
73
|
-
- **maxWidth**
|
74
|
+
- **[Integer] maxWidth, maxHeight**
|
74
75
|
- Maximum width of images (in pixels)
|
75
|
-
- **quality**
|
76
|
+
- **[Float] quality**
|
76
77
|
- Image quality range: 0.0 - 1.0
|
77
|
-
- **imageType**
|
78
|
+
- **[String] imageType**
|
78
79
|
- Values: 'image/jpeg' , 'image/png' ... etc
|
79
|
-
- **
|
80
|
+
- **[Array] keepImageTypes**
|
81
|
+
Preserve image type and apply quality, maxWidth, maxHeight options
|
82
|
+
- Values: ['image/jpeg', 'image/png']
|
83
|
+
|
84
|
+
- **[Array] ignoreImageTypes**
|
85
|
+
Image types contained in this array retain their original images, do not compress them.
|
86
|
+
- Values: ['image'/jpeg', 'image/webp']
|
87
|
+
|
88
|
+
- **[Boolean] debug**
|
80
89
|
- Displays console logs: true/false
|
81
90
|
|
82
91
|
## Thanks
|
package/dist/demo.min.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("Quill"));else if("function"==typeof define&&define.amd)define(["Quill"],e);else{var r="object"==typeof exports?e(require("Quill")):e(t.Quill);for(var n in r)("object"==typeof exports?exports:t)[n]=r[n]}}(window,(function(t){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="/dist/",r(r.s=15)}([function(t,e,r){t.exports=r(12)},function(t,e){function r(t,e,r,n,i,o,a){try{var u=t[o](a),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,i)}t.exports=function(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function u(t){r(a,i,o,u,c,"next",t)}function c(t){r(a,i,o,u,c,"throw",t)}u(void 0)}))}}},function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e){function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}t.exports=function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}},function(t,e,r){"use strict";r.r(e),r.d(e,"file2b64",(function(){return u}));var n=r(0),i=r.n(n),o=r(1),a=r.n(o);function u(t){return c.apply(this,arguments)}function c(){return(c=a()(i.a.mark((function t(e){var r,n;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=new FileReader,n=new Promise((function(t){r.addEventListener("load",(function(){var e=r.result;t(e)}),!1)})),r.readAsDataURL(e),t.abrupt("return",n);case 4:case"end":return t.stop()}}),t)})))).apply(this,arguments)}},function(t,e,r){var n=r(7),i=r(8),o=r(9),a=r(11);t.exports=function(t,e){return n(t)||i(t,e)||o(t,e)||a()}},function(t,e,r){"use strict";r.r(e),r.d(e,"imageCompressor",(function(){return v}));var n=r(5),i=r.n(n),o=r(0),a=r.n(o),u=r(1),c=r.n(u),s=r(2),l=r.n(s),f=r(3),h=r.n(f);var d=!0,p={prefixString:function(){return"</> quill-image-compress: "},get log(){return d?console.log.bind(console,this.prefixString()):function(){}},get error(){return console.error.bind(console,this.prefixString())},get warn(){return console.warn.bind(console,this.prefixString())}},g=r(13).ImageDrop,m=r(4).file2b64,v=function(){function t(e,r){var n=this;l()(this,t),this.quill=e,this.range=null,this.options=r,d=r&&r.debug;var i=function(){var t=c()(a.a.mark((function t(e){var r;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p.log("onImageDrop",{dataUrl:e}),t.next=3,n.downscaleImageFromUrl(e);case 3:r=t.sent,n.insertToEditor(r);case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();this.imageDrop=new g(e,i,p),function(t){t.maxWidth=t.maxWidth||1e3,t.maxHeight=t.maxHeight||1e3,t.maxWidth&&"number"!=typeof t.maxWidth&&(p.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nrecieved: ".concat(t.maxWidth,"\n-> using default 1000")),t.maxWidth=1e3),t.maxHeight&&"number"!=typeof t.maxHeight&&(p.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nrecieved: ".concat(t.maxHeight,"\n-> using default 1000")),t.maxHeight=1e3),t.quality&&"number"!=typeof t.quality&&(p.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nrecieved: ".concat(t.quality,"\n-> using default 0.7")),t.quality=.7),!t.imageType||"string"==typeof t.imageType&&t.imageType.startsWith("image/")||(p.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nrecieved: '.concat(t.imageType,"\n-> using default image/jpeg")),t.imageType="image/jpeg")}(r),p.log("fileChanged",{options:r,quill:e,debug:d});var o=this.quill.getModule("toolbar");o?o.addHandler("image",(function(){return n.selectLocalImage()})):p.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}var e,r;return h()(t,[{key:"selectLocalImage",value:function(){var t=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 t.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(t.fileHolder)}))}},{key:"fileChanged",value:(r=c()(a.a.mark((function t(){var e,r,n;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=this.fileHolder.files[0],p.log("fileChanged",{file:e}),e){t.next=4;break}return t.abrupt("return");case 4:return t.next=6,m(e);case 6:return r=t.sent,t.next=9,this.downscaleImageFromUrl(r);case 9:n=t.sent,this.insertToEditor(n);case 11:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"downscaleImageFromUrl",value:(e=c()(a.a.mark((function t(e){var r;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y(e,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.quality,this.debug);case 2:return r=t.sent,p.log("downscaleImageFromUrl",{dataUrl:e,dataUrlCompressed:r}),t.abrupt("return",r);case 5:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})},{key:"insertToEditor",value:function(t){p.log("insertToEditor",{url:t}),this.range=this.quill.getSelection();var e=this.range;this.logFileSize(t),this.quill.insertEmbed(e.index,"image","".concat(t),"user"),e.index++,this.quill.setSelection(e,"api")}},{key:"logFileSize",value:function(t){var e=(Math.round(3*(t.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);p.log("estimated img size: "+e+" kb")}}]),t}();function y(t,e,r,n,i){return b.apply(this,arguments)}function b(){return(b=c()(a.a.mark((function t(e,r,n,o,u){var c,s,l,f,h,g,m;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=o||"image/jpeg",u=u||.7,(c=new Image).src=e,t.next=6,new Promise((function(t){c.onload=function(){t()}}));case 6:return s=w(c.width,c.height,r,n),l=i()(s,2),f=l[0],h=l[1],(g=document.createElement("canvas")).width=f,g.height=h,g.getContext("2d").drawImage(c,0,0,f,h),m=g.toDataURL(o,u),p.log("downscaling image...",{args:{dataUrl:e,maxWidth:r,maxHeight:n,imageType:o,imageQuality:u,debug:d},newHeight:h,newWidth:f}),t.abrupt("return",m);case 15:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function w(t,e,r,n){if(t<=r&&e<=n)return[t,e];if(t>r){var i=r,o=Math.floor(e/t*i);if(o>n){var a=n;return[Math.floor(t/e*a),a]}return[i,o]}if(e>n){var u=n;return[Math.floor(t/e*u),u]}}window.imageCompressor=v,e.default=v},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(n=(a=u.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){i=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(i)throw o}}return r}}},function(t,e,r){var n=r(10);t.exports=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}},function(t,e){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}},function(t,e){t.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.")}},function(t,e,r){var n=function(t){"use strict";var e=Object.prototype,r=e.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",o=n.asyncIterator||"@@asyncIterator",a=n.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function c(t,e,r,n){var i=e&&e.prototype instanceof f?e:f,o=Object.create(i.prototype),a=new L(n||[]);return o._invoke=function(t,e,r){var n="suspendedStart";return function(i,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw o;return k()}for(r.method=i,r.arg=o;;){var a=r.delegate;if(a){var u=w(a,r);if(u){if(u===l)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 c=s(t,e,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}(t,r,a),o}function s(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var l={};function f(){}function h(){}function d(){}var p={};p[i]=function(){return this};var g=Object.getPrototypeOf,m=g&&g(g(j([])));m&&m!==e&&r.call(m,i)&&(p=m);var v=d.prototype=f.prototype=Object.create(p);function y(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var n;this._invoke=function(i,o){function a(){return new e((function(n,a){!function n(i,o,a,u){var c=s(t[i],t,o);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==typeof f&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){n("next",t,a,u)}),(function(t){n("throw",t,a,u)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return n("throw",t,a,u)}))}u(c.arg)}(i,o,n,a)}))}return n=n?n.then(a,a):a()}}function w(t,e){var r=t.iterator[e.method];if(void 0===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,w(t,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var n=s(r,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,l;var i=n.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function j(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:k}}function k(){return{value:void 0,done:!0}}return h.prototype=v.constructor=d,d.constructor=h,h.displayName=u(d,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===h||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,a,"GeneratorFunction")),t.prototype=Object.create(v),t},t.awrap=function(t){return{__await:t}},y(b.prototype),b.prototype[o]=function(){return this},t.AsyncIterator=b,t.async=function(e,r,n,i,o){void 0===o&&(o=Promise);var a=new b(c(e,r,n,i),o);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},y(v),u(v,a,"Generator"),v[i]=function(){return this},v.toString=function(){return"[object Generator]"},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=j,L.prototype={constructor:L,reset:function(t){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(E),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(u&&c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(u){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=t,a.arg=e,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},function(t,e,r){"use strict";r.r(e),r.d(e,"ImageDrop",(function(){return h}));var n=r(0),i=r.n(n),o=r(1),a=r.n(o),u=r(2),c=r.n(u),s=r(3),l=r.n(s),f=r(4).file2b64,h=function(){function t(e,r,n){var i=this;c()(this,t),this.logger=n,this.quill=e,this.onNewDataUrl=r,this.quill.root.addEventListener("drop",(function(t){return i.handleDrop(t)}),!1),this.quill.root.addEventListener("paste",(function(t){return i.handlePaste(t)}),!1)}var e;return l()(t,[{key:"handleNewImageFiles",value:(e=a()(i.a.mark((function t(e){var r,n,o;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(Array.isArray(e)){t.next=2;break}return t.abrupt("return");case 2:if(r=e.pop()){t.next=5;break}return t.abrupt("return");case 5:return n=r.getAsFile?r.getAsFile():r,t.next=8,f(n);case 8:o=t.sent,this.logger.log("handlePaste",{base64ImageSrc:o}),this.onNewDataUrl(o);case 11:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer&&t.dataTransfer.files&&t.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:e}),e){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(t.clientX,t.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var i=this.getImageFiles(t.dataTransfer.files);this.handleNewImageFiles(i)}}},{key:"handlePaste",value:function(t){var e=t.clipboardData&&t.clipboardData.items&&!!t.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:e}),e){var r=this.getImageFiles(t.clipboardData.items);0!==r.length&&(t.preventDefault(),this.handleNewImageFiles(r))}}},{key:"getImageFiles",value:function(t){var e=Array.from(t);return this.logger.log("readFiles",{files:e}),e.filter((function(t){return!!t.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp|vnd\.microsoft\.icon)/i)}))||[]}}]),t}()},function(e,r){e.exports=t},function(t,e,r){"use strict";r.r(e);var n=r(14),i=r.n(n),o=r(6);i.a.register("modules/imageCompressor",o.default);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/jpeg",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 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=16)}([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(10),o=r(11),i=r(12),a=r(14);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 y}));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);var 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())}},d=r(8).ImageDrop,g=r(4).file2b64,m=r(9).downscaleImage,y=function(){function e(t,r){var n=this;a()(this,e),this.quill=t,this.range=null,this.options=r,f=r&&r.debug,p=r&&r.suppressErrorLogging;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 d(t,i,h),function(e){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(h.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&&(h.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&&(h.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/")||(h.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&&!Array.isArray(e.keepImageTypes)&&(h.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(h.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}(r),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,g(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,m(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=y,t.default=y},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 I(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 d={};u(d,o,(function(){return this}));var g=Object.getPrototypeOf,m=g&&g(g(_([])));m&&m!==t&&r.call(m,o)&&(d=m);var y=h.prototype=f.prototype=Object.create(d);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 T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function _(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=_,I.prototype={constructor:I,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(T),!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),T(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;T(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:_(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("handlePaste",{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);0!==r.length&&(Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))?this.logger.log("detected html, not handling"):(e.preventDefault(),this.handleNewImageFiles(r)))}}},{key:"getImageFiles",value:function(e){var t=Array.from(e);return this.logger.log("readFiles",{files:t}),t.filter((function(e){return!!e.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp|vnd\.microsoft\.icon)/i)}))||[]}}]),e}()},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,d,g,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(d=f(h.width,h.height,r,n),g=o()(d,2),m=g[0],y=g[1],(v=document.createElement("canvas")).width=m,v.height=y,x=v.getContext("2d"),!u.includes(p)){e.next=14;break}return e.abrupt("return",t);case 14: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 19: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(13);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(15),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 +1 @@
|
|
1
|
-
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r=e();for(var n in r)("object"==typeof exports?exports:t)[n]=r[n]}}(window,(function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="/dist/",r(r.s=6)}([function(t,e,r){t.exports=r(12)},function(t,e){function r(t,e,r,n,i,o,a){try{var u=t[o](a),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,i)}t.exports=function(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function u(t){r(a,i,o,u,c,"next",t)}function c(t){r(a,i,o,u,c,"throw",t)}u(void 0)}))}}},function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e){function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}t.exports=function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),t}},function(t,e,r){"use strict";r.r(e),r.d(e,"file2b64",(function(){return u}));var n=r(0),i=r.n(n),o=r(1),a=r.n(o);function u(t){return c.apply(this,arguments)}function c(){return(c=a()(i.a.mark((function t(e){var r,n;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=new FileReader,n=new Promise((function(t){r.addEventListener("load",(function(){var e=r.result;t(e)}),!1)})),r.readAsDataURL(e),t.abrupt("return",n);case 4:case"end":return t.stop()}}),t)})))).apply(this,arguments)}},function(t,e,r){var n=r(7),i=r(8),o=r(9),a=r(11);t.exports=function(t,e){return n(t)||i(t,e)||o(t,e)||a()}},function(t,e,r){"use strict";r.r(e),r.d(e,"imageCompressor",(function(){return v}));var n=r(5),i=r.n(n),o=r(0),a=r.n(o),u=r(1),c=r.n(u),s=r(2),l=r.n(s),f=r(3),h=r.n(f);var d=!0,p={prefixString:function(){return"</> quill-image-compress: "},get log(){return d?console.log.bind(console,this.prefixString()):function(){}},get error(){return console.error.bind(console,this.prefixString())},get warn(){return console.warn.bind(console,this.prefixString())}},g=r(13).ImageDrop,m=r(4).file2b64,v=function(){function t(e,r){var n=this;l()(this,t),this.quill=e,this.range=null,this.options=r,d=r&&r.debug;var i=function(){var t=c()(a.a.mark((function t(e){var r;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return p.log("onImageDrop",{dataUrl:e}),t.next=3,n.downscaleImageFromUrl(e);case 3:r=t.sent,n.insertToEditor(r);case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();this.imageDrop=new g(e,i,p),function(t){t.maxWidth=t.maxWidth||1e3,t.maxHeight=t.maxHeight||1e3,t.maxWidth&&"number"!=typeof t.maxWidth&&(p.warn("[config error] 'maxWidth' is required to be a \"number\" (in pixels), \nrecieved: ".concat(t.maxWidth,"\n-> using default 1000")),t.maxWidth=1e3),t.maxHeight&&"number"!=typeof t.maxHeight&&(p.warn("[config error] 'maxHeight' is required to be a \"number\" (in pixels), \nrecieved: ".concat(t.maxHeight,"\n-> using default 1000")),t.maxHeight=1e3),t.quality&&"number"!=typeof t.quality&&(p.warn("quill.imageCompressor: [config error] 'quality' is required to be a \"number\", \nrecieved: ".concat(t.quality,"\n-> using default 0.7")),t.quality=.7),!t.imageType||"string"==typeof t.imageType&&t.imageType.startsWith("image/")||(p.warn('quill.imageCompressor: [config error] \'imageType\' is required be in the form of "image/png" or "image/jpeg" etc ..., \nrecieved: '.concat(t.imageType,"\n-> using default image/jpeg")),t.imageType="image/jpeg")}(r),p.log("fileChanged",{options:r,quill:e,debug:d});var o=this.quill.getModule("toolbar");o?o.addHandler("image",(function(){return n.selectLocalImage()})):p.error("Quill toolbar module not found! need { toolbar: // options } in Quill.modules for image icon to sit in")}var e,r;return h()(t,[{key:"selectLocalImage",value:function(){var t=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 t.fileChanged()},document.body.appendChild(this.fileHolder),this.fileHolder.click(),window.requestAnimationFrame((function(){document.body.removeChild(t.fileHolder)}))}},{key:"fileChanged",value:(r=c()(a.a.mark((function t(){var e,r,n;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e=this.fileHolder.files[0],p.log("fileChanged",{file:e}),e){t.next=4;break}return t.abrupt("return");case 4:return t.next=6,m(e);case 6:return r=t.sent,t.next=9,this.downscaleImageFromUrl(r);case 9:n=t.sent,this.insertToEditor(n);case 11:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"downscaleImageFromUrl",value:(e=c()(a.a.mark((function t(e){var r;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y(e,this.options.maxWidth,this.options.maxHeight,this.options.imageType,this.options.quality,this.debug);case 2:return r=t.sent,p.log("downscaleImageFromUrl",{dataUrl:e,dataUrlCompressed:r}),t.abrupt("return",r);case 5:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})},{key:"insertToEditor",value:function(t){p.log("insertToEditor",{url:t}),this.range=this.quill.getSelection();var e=this.range;this.logFileSize(t),this.quill.insertEmbed(e.index,"image","".concat(t),"user"),e.index++,this.quill.setSelection(e,"api")}},{key:"logFileSize",value:function(t){var e=(Math.round(3*(t.length-"data:image/png;base64,".length)/4)/1024).toFixed(0);p.log("estimated img size: "+e+" kb")}}]),t}();function y(t,e,r,n,i){return b.apply(this,arguments)}function b(){return(b=c()(a.a.mark((function t(e,r,n,o,u){var c,s,l,f,h,g,m;return a.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=o||"image/jpeg",u=u||.7,(c=new Image).src=e,t.next=6,new Promise((function(t){c.onload=function(){t()}}));case 6:return s=w(c.width,c.height,r,n),l=i()(s,2),f=l[0],h=l[1],(g=document.createElement("canvas")).width=f,g.height=h,g.getContext("2d").drawImage(c,0,0,f,h),m=g.toDataURL(o,u),p.log("downscaling image...",{args:{dataUrl:e,maxWidth:r,maxHeight:n,imageType:o,imageQuality:u,debug:d},newHeight:h,newWidth:f}),t.abrupt("return",m);case 15:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function w(t,e,r,n){if(t<=r&&e<=n)return[t,e];if(t>r){var i=r,o=Math.floor(e/t*i);if(o>n){var a=n;return[Math.floor(t/e*a),a]}return[i,o]}if(e>n){var u=n;return[Math.floor(t/e*u),u]}}window.imageCompressor=v,e.default=v},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(n=(a=u.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){i=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(i)throw o}}return r}}},function(t,e,r){var n=r(10);t.exports=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}},function(t,e){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}},function(t,e){t.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.")}},function(t,e,r){var n=function(t){"use strict";var e=Object.prototype,r=e.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",o=n.asyncIterator||"@@asyncIterator",a=n.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function c(t,e,r,n){var i=e&&e.prototype instanceof f?e:f,o=Object.create(i.prototype),a=new L(n||[]);return o._invoke=function(t,e,r){var n="suspendedStart";return function(i,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw o;return k()}for(r.method=i,r.arg=o;;){var a=r.delegate;if(a){var u=w(a,r);if(u){if(u===l)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 c=s(t,e,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}(t,r,a),o}function s(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var l={};function f(){}function h(){}function d(){}var p={};p[i]=function(){return this};var g=Object.getPrototypeOf,m=g&&g(g(j([])));m&&m!==e&&r.call(m,i)&&(p=m);var v=d.prototype=f.prototype=Object.create(p);function y(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){var n;this._invoke=function(i,o){function a(){return new e((function(n,a){!function n(i,o,a,u){var c=s(t[i],t,o);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==typeof f&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){n("next",t,a,u)}),(function(t){n("throw",t,a,u)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return n("throw",t,a,u)}))}u(c.arg)}(i,o,n,a)}))}return n=n?n.then(a,a):a()}}function w(t,e){var r=t.iterator[e.method];if(void 0===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,w(t,e),"throw"===e.method))return l;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var n=s(r,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,l;var i=n.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,l):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,l)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function E(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function j(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:k}}function k(){return{value:void 0,done:!0}}return h.prototype=v.constructor=d,d.constructor=h,h.displayName=u(d,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===h||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,a,"GeneratorFunction")),t.prototype=Object.create(v),t},t.awrap=function(t){return{__await:t}},y(b.prototype),b.prototype[o]=function(){return this},t.AsyncIterator=b,t.async=function(e,r,n,i,o){void 0===o&&(o=Promise);var a=new b(c(e,r,n,i),o);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},y(v),u(v,a,"Generator"),v[i]=function(){return this},v.toString=function(){return"[object Generator]"},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=j,L.prototype={constructor:L,reset:function(t){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(E),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(u&&c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(u){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=t,a.arg=e,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),l},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),E(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;E(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},function(t,e,r){"use strict";r.r(e),r.d(e,"ImageDrop",(function(){return h}));var n=r(0),i=r.n(n),o=r(1),a=r.n(o),u=r(2),c=r.n(u),s=r(3),l=r.n(s),f=r(4).file2b64,h=function(){function t(e,r,n){var i=this;c()(this,t),this.logger=n,this.quill=e,this.onNewDataUrl=r,this.quill.root.addEventListener("drop",(function(t){return i.handleDrop(t)}),!1),this.quill.root.addEventListener("paste",(function(t){return i.handlePaste(t)}),!1)}var e;return l()(t,[{key:"handleNewImageFiles",value:(e=a()(i.a.mark((function t(e){var r,n,o;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(Array.isArray(e)){t.next=2;break}return t.abrupt("return");case 2:if(r=e.pop()){t.next=5;break}return t.abrupt("return");case 5:return n=r.getAsFile?r.getAsFile():r,t.next=8,f(n);case 8:o=t.sent,this.logger.log("handlePaste",{base64ImageSrc:o}),this.onNewDataUrl(o);case 11:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})},{key:"handleDrop",value:function(t){t.preventDefault();var e=t.dataTransfer&&t.dataTransfer.files&&t.dataTransfer.files.length;if(this.logger.log("handleDrop",{hasFiles:e}),e){if(document.caretRangeFromPoint){var r=document.getSelection(),n=document.caretRangeFromPoint(t.clientX,t.clientY);r&&n&&r.setBaseAndExtent(n.startContainer,n.startOffset,n.startContainer,n.startOffset)}var i=this.getImageFiles(t.dataTransfer.files);this.handleNewImageFiles(i)}}},{key:"handlePaste",value:function(t){var e=t.clipboardData&&t.clipboardData.items&&!!t.clipboardData.items.length;if(this.logger.log("handlePaste",{hasItems:e}),e){var r=this.getImageFiles(t.clipboardData.items);0!==r.length&&(t.preventDefault(),this.handleNewImageFiles(r))}}},{key:"getImageFiles",value:function(t){var e=Array.from(t);return this.logger.log("readFiles",{files:e}),e.filter((function(t){return!!t.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp|vnd\.microsoft\.icon)/i)}))||[]}}]),t}()}])}));
|
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(10),o=r(11),i=r(12),a=r(14);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 y}));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);var 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())}},d=r(8).ImageDrop,g=r(4).file2b64,m=r(9).downscaleImage,y=function(){function e(t,r){var n=this;a()(this,e),this.quill=t,this.range=null,this.options=r,f=r&&r.debug,p=r&&r.suppressErrorLogging;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 d(t,i,h),function(e){e.maxWidth=e.maxWidth||1e3,e.maxHeight=e.maxHeight||1e3,e.maxWidth&&"number"!=typeof e.maxWidth&&(h.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&&(h.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&&(h.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/")||(h.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&&!Array.isArray(e.keepImageTypes)&&(h.warn("quill.imageCompressor: [config error] 'keepImageTypes' is required to be a \"array\", received: ".concat(e.keepImageTypes," -> using default []")),e.keepImageTypes=[]),e.ignoreImageTypes&&!Array.isArray(e.ignoreImageTypes)&&(h.warn("quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a \"array\", received: ".concat(e.ignoreImageTypes," -> using default []")),e.ignoreImageTypes=[])}(r),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,g(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,m(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=y,t.default=y},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 d={};u(d,o,(function(){return this}));var g=Object.getPrototypeOf,m=g&&g(g(_([])));m&&m!==t&&r.call(m,o)&&(d=m);var y=h.prototype=f.prototype=Object.create(d);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 _(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=_,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:_(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("handlePaste",{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);0!==r.length&&(Array.from(e.clipboardData.items).some((function(e){return"text/html"===e.type}))?this.logger.log("detected html, not handling"):(e.preventDefault(),this.handleNewImageFiles(r)))}}},{key:"getImageFiles",value:function(e){var t=Array.from(e);return this.logger.log("readFiles",{files:t}),t.filter((function(e){return!!e.type.match(/^image\/(gif|jpe?g|a?png|svg|webp|bmp|vnd\.microsoft\.icon)/i)}))||[]}}]),e}()},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,d,g,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(d=f(h.width,h.height,r,n),g=o()(d,2),m=g[0],y=g[1],(v=document.createElement("canvas")).width=m,v.height=y,x=v.getContext("2d"),!u.includes(p)){e.next=14;break}return e.abrupt("return",t);case 14: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 19: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(13);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}])}));
|
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.17",
|
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",
|
package/src/demo.js
CHANGED
@@ -0,0 +1,92 @@
|
|
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
|
+
// Draw the downscaled image on the canvas and return the new data URL.
|
41
|
+
const ctx = canvas.getContext("2d");
|
42
|
+
|
43
|
+
// If the type is included in the ignore list, return the original
|
44
|
+
if (ignoreImageTypes.includes(inputImageType)) {
|
45
|
+
return dataUrl;
|
46
|
+
}
|
47
|
+
|
48
|
+
// If the type is included in keep type list, fix the image type
|
49
|
+
if (keepImageTypes.includes(inputImageType)) {
|
50
|
+
imageType = inputImageType;
|
51
|
+
}
|
52
|
+
|
53
|
+
ctx.drawImage(image, 0, 0, newWidth, newHeight);
|
54
|
+
const newDataUrl = canvas.toDataURL(imageType, imageQuality);
|
55
|
+
logger.log("downscaling image...", {
|
56
|
+
args: {
|
57
|
+
dataUrl,
|
58
|
+
maxWidth,
|
59
|
+
maxHeight,
|
60
|
+
imageType,
|
61
|
+
ignoreImageTypes,
|
62
|
+
keepImageTypes,
|
63
|
+
imageQuality,
|
64
|
+
},
|
65
|
+
newHeight,
|
66
|
+
newWidth,
|
67
|
+
});
|
68
|
+
return newDataUrl;
|
69
|
+
}
|
70
|
+
|
71
|
+
function getDimensions(inputWidth, inputHeight, maxWidth, maxHeight) {
|
72
|
+
if (inputWidth <= maxWidth && inputHeight <= maxHeight) {
|
73
|
+
return [inputWidth, inputHeight];
|
74
|
+
}
|
75
|
+
if (inputWidth > maxWidth) {
|
76
|
+
const newWidth = maxWidth;
|
77
|
+
const newHeight = Math.floor((inputHeight / inputWidth) * newWidth);
|
78
|
+
|
79
|
+
if (newHeight > maxHeight) {
|
80
|
+
const newHeight = maxHeight;
|
81
|
+
const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
|
82
|
+
return [newWidth, newHeight];
|
83
|
+
} else {
|
84
|
+
return [newWidth, newHeight];
|
85
|
+
}
|
86
|
+
}
|
87
|
+
if (inputHeight > maxHeight) {
|
88
|
+
const newHeight = maxHeight;
|
89
|
+
const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
|
90
|
+
return [newWidth, newHeight];
|
91
|
+
}
|
92
|
+
}
|
@@ -6,7 +6,7 @@ function warnAboutOptions(options) {
|
|
6
6
|
if (options.maxWidth && typeof options.maxWidth !== "number") {
|
7
7
|
Logger.warn(
|
8
8
|
`[config error] 'maxWidth' is required to be a "number" (in pixels),
|
9
|
-
|
9
|
+
received: ${options.maxWidth}
|
10
10
|
-> using default 1000`
|
11
11
|
);
|
12
12
|
options.maxWidth = 1000;
|
@@ -14,7 +14,7 @@ recieved: ${options.maxWidth}
|
|
14
14
|
if (options.maxHeight && typeof options.maxHeight !== "number") {
|
15
15
|
Logger.warn(
|
16
16
|
`[config error] 'maxHeight' is required to be a "number" (in pixels),
|
17
|
-
|
17
|
+
received: ${options.maxHeight}
|
18
18
|
-> using default 1000`
|
19
19
|
);
|
20
20
|
options.maxHeight = 1000;
|
@@ -22,7 +22,7 @@ recieved: ${options.maxHeight}
|
|
22
22
|
if (options.quality && typeof options.quality !== "number") {
|
23
23
|
Logger.warn(
|
24
24
|
`quill.imageCompressor: [config error] 'quality' is required to be a "number",
|
25
|
-
|
25
|
+
received: ${options.quality}
|
26
26
|
-> using default 0.7`
|
27
27
|
);
|
28
28
|
options.quality = 0.7;
|
@@ -34,14 +34,33 @@ recieved: ${options.quality}
|
|
34
34
|
) {
|
35
35
|
Logger.warn(
|
36
36
|
`quill.imageCompressor: [config error] 'imageType' is required be in the form of "image/png" or "image/jpeg" etc ...,
|
37
|
-
|
37
|
+
received: ${options.imageType}
|
38
38
|
-> using default image/jpeg`
|
39
39
|
);
|
40
40
|
options.imageType = "image/jpeg";
|
41
41
|
}
|
42
|
+
if (
|
43
|
+
options.keepImageTypes &&
|
44
|
+
(!Array.isArray(options.keepImageTypes))
|
45
|
+
) {
|
46
|
+
Logger.warn(
|
47
|
+
`quill.imageCompressor: [config error] 'keepImageTypes' is required to be a "array", received: ${options.keepImageTypes} -> using default []`
|
48
|
+
)
|
49
|
+
options.keepImageTypes = [];
|
50
|
+
}
|
51
|
+
if (
|
52
|
+
options.ignoreImageTypes &&
|
53
|
+
(!Array.isArray(options.ignoreImageTypes))
|
54
|
+
) {
|
55
|
+
Logger.warn(
|
56
|
+
`quill.imageCompressor: [config error] 'ignoreImageTypes' is required to be a "array", received: ${options.ignoreImageTypes} -> using default []`
|
57
|
+
)
|
58
|
+
options.ignoreImageTypes = [];
|
59
|
+
}
|
42
60
|
}
|
43
61
|
|
44
62
|
let debug = true;
|
63
|
+
let suppressErrorLogging = false;
|
45
64
|
const Logger = {
|
46
65
|
prefixString() {
|
47
66
|
return `</> quill-image-compress: `;
|
@@ -54,10 +73,16 @@ const Logger = {
|
|
54
73
|
return boundLogFn;
|
55
74
|
},
|
56
75
|
get error() {
|
76
|
+
if (suppressErrorLogging) {
|
77
|
+
return (...any) => {};
|
78
|
+
}
|
57
79
|
const boundLogFn = console.error.bind(console, this.prefixString());
|
58
80
|
return boundLogFn;
|
59
81
|
},
|
60
82
|
get warn() {
|
83
|
+
if (suppressErrorLogging) {
|
84
|
+
return (...any) => {};
|
85
|
+
}
|
61
86
|
const boundLogFn = console.warn.bind(console, this.prefixString());
|
62
87
|
return boundLogFn;
|
63
88
|
},
|
@@ -65,6 +90,7 @@ const Logger = {
|
|
65
90
|
|
66
91
|
const { ImageDrop } = require("./quill.imageDrop");
|
67
92
|
const { file2b64 } = require("./file2b64");
|
93
|
+
const { downscaleImage } = require("./downscaleImage");
|
68
94
|
|
69
95
|
class imageCompressor {
|
70
96
|
constructor(quill, options) {
|
@@ -72,6 +98,7 @@ class imageCompressor {
|
|
72
98
|
this.range = null;
|
73
99
|
this.options = options;
|
74
100
|
debug = options && options.debug;
|
101
|
+
suppressErrorLogging = options && options.suppressErrorLogging;
|
75
102
|
|
76
103
|
const onImageDrop = async (dataUrl) => {
|
77
104
|
Logger.log("onImageDrop", { dataUrl });
|
@@ -128,8 +155,10 @@ class imageCompressor {
|
|
128
155
|
this.options.maxWidth,
|
129
156
|
this.options.maxHeight,
|
130
157
|
this.options.imageType,
|
158
|
+
this.options.keepImageTypes,
|
159
|
+
this.options.ignoreImageTypes,
|
131
160
|
this.options.quality,
|
132
|
-
|
161
|
+
Logger,
|
133
162
|
);
|
134
163
|
Logger.log("downscaleImageFromUrl", { dataUrl, dataUrlCompressed });
|
135
164
|
return dataUrlCompressed;
|
@@ -155,81 +184,6 @@ class imageCompressor {
|
|
155
184
|
}
|
156
185
|
}
|
157
186
|
|
158
|
-
// Take an image URL, downscale it to the given width, and return a new image URL.
|
159
|
-
async function downscaleImage(
|
160
|
-
dataUrl,
|
161
|
-
maxWidth,
|
162
|
-
maxHeight,
|
163
|
-
imageType,
|
164
|
-
imageQuality
|
165
|
-
) {
|
166
|
-
"use strict";
|
167
|
-
// Provide default values
|
168
|
-
imageType = imageType || "image/jpeg";
|
169
|
-
imageQuality = imageQuality || 0.7;
|
170
|
-
|
171
|
-
// Create a temporary image so that we can compute the height of the downscaled image.
|
172
|
-
const image = new Image();
|
173
|
-
image.src = dataUrl;
|
174
|
-
await new Promise((resolve) => {
|
175
|
-
image.onload = () => {
|
176
|
-
resolve();
|
177
|
-
};
|
178
|
-
});
|
179
|
-
const [newWidth, newHeight] = getDimensions(
|
180
|
-
image.width,
|
181
|
-
image.height,
|
182
|
-
maxWidth,
|
183
|
-
maxHeight
|
184
|
-
);
|
185
|
-
|
186
|
-
// Create a temporary canvas to draw the downscaled image on.
|
187
|
-
const canvas = document.createElement("canvas");
|
188
|
-
canvas.width = newWidth;
|
189
|
-
canvas.height = newHeight;
|
190
|
-
|
191
|
-
// Draw the downscaled image on the canvas and return the new data URL.
|
192
|
-
const ctx = canvas.getContext("2d");
|
193
|
-
ctx.drawImage(image, 0, 0, newWidth, newHeight);
|
194
|
-
const newDataUrl = canvas.toDataURL(imageType, imageQuality);
|
195
|
-
Logger.log("downscaling image...", {
|
196
|
-
args: {
|
197
|
-
dataUrl,
|
198
|
-
maxWidth,
|
199
|
-
maxHeight,
|
200
|
-
imageType,
|
201
|
-
imageQuality,
|
202
|
-
debug,
|
203
|
-
},
|
204
|
-
newHeight,
|
205
|
-
newWidth,
|
206
|
-
});
|
207
|
-
return newDataUrl;
|
208
|
-
}
|
209
|
-
|
210
|
-
function getDimensions(inputWidth, inputHeight, maxWidth, maxHeight) {
|
211
|
-
if (inputWidth <= maxWidth && inputHeight <= maxHeight) {
|
212
|
-
return [inputWidth, inputHeight];
|
213
|
-
}
|
214
|
-
if (inputWidth > maxWidth) {
|
215
|
-
const newWidth = maxWidth;
|
216
|
-
const newHeight = Math.floor((inputHeight / inputWidth) * newWidth);
|
217
|
-
|
218
|
-
if (newHeight > maxHeight) {
|
219
|
-
const newHeight = maxHeight;
|
220
|
-
const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
|
221
|
-
return [newWidth, newHeight];
|
222
|
-
} else {
|
223
|
-
return [newWidth, newHeight];
|
224
|
-
}
|
225
|
-
}
|
226
|
-
if (inputHeight > maxHeight) {
|
227
|
-
const newHeight = maxHeight;
|
228
|
-
const newWidth = Math.floor((inputWidth / inputHeight) * newHeight);
|
229
|
-
return [newWidth, newHeight];
|
230
|
-
}
|
231
|
-
}
|
232
|
-
|
233
187
|
window.imageCompressor = imageCompressor;
|
234
188
|
export { imageCompressor };
|
235
189
|
export default imageCompressor;
|
package/src/quill.imageDrop.js
CHANGED
@@ -72,6 +72,15 @@ export class ImageDrop {
|
|
72
72
|
if (images.length === 0) {
|
73
73
|
return;
|
74
74
|
}
|
75
|
+
|
76
|
+
|
77
|
+
// Text pasted from word will contain both text/html and image/png.
|
78
|
+
//
|
79
|
+
if (Array.from(evt.clipboardData.items).some(f => f.type === 'text/html')) {
|
80
|
+
this.logger.log("detected html, not handling");
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
|
75
84
|
evt.preventDefault();
|
76
85
|
this.handleNewImageFiles(images);
|
77
86
|
}
|
@@ -83,7 +92,7 @@ export class ImageDrop {
|
|
83
92
|
function isFileImage(file) {
|
84
93
|
const isImage = !!file.type.match(
|
85
94
|
/^image\/(gif|jpe?g|a?png|svg|webp|bmp|vnd\.microsoft\.icon)/i
|
86
|
-
|
95
|
+
);
|
87
96
|
return isImage;
|
88
97
|
}
|
89
98
|
const images = files.filter(isFileImage);
|