quill-image-compress 1.2.13 → 1.2.17
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![NPM Version](https://img.shields.io/npm/v/quill-image-compress.svg)](https://www.npmjs.com/package/quill-image-compress)
|
4
|
-
[![License](https://img.shields.io/npm/l/quill-image-compress.svg)](https://github.com/benwinding/quill-image-compress/blob/master/LICENSE)
|
5
|
-
[![Downloads/week](https://img.shields.io/npm/dm/quill-image-compress.svg)](https://www.npmjs.com/package/quill-image-compress)
|
3
|
+
[![NPM Version](https://img.shields.io/npm/v/quill-image-compress.svg)](https://www.npmjs.com/package/quill-image-compress)
|
4
|
+
[![License](https://img.shields.io/npm/l/quill-image-compress.svg)](https://github.com/benwinding/quill-image-compress/blob/master/LICENSE)
|
5
|
+
[![Downloads/week](https://img.shields.io/npm/dm/quill-image-compress.svg)](https://www.npmjs.com/package/quill-image-compress)
|
6
6
|
[![Github Issues](https://img.shields.io/github/issues/benwinding/quill-image-compress.svg)](https://github.com/benwinding/quill-image-compress)
|
7
7
|
![Build and Publish](https://github.com/benwinding/quill-image-compress/workflows/Build%20and%20Publish/badge.svg)
|
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);
|