{"version":3,"sources":["jsdelivr-header.js","/npm/quill-image-paste-module@1.0.6/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCHO,MAAM,WAAa,CACtB,QAAS,CAAC,EACV,OAAQ,KACR,GAAI,SAAU,EAAe,GACpB,KAAK,QAAQ,KACd,KAAK,QAAQ,GAAiB,EAEtC,EACA,KAAM,SAAU,EAAU,EAAO,GAC7B,KAAK,OAAS,KAAK,QAAQ,GACd,IAAT,GACA,YAER,UAMG,MAAM,YAMT,WAAA,CAAY,EAAO,EAAS,CAAC,GACzB,KAAK,GAAK,KAAK,SACf,KAAK,MAAQ,EACb,KAAK,MAAM,GAAK,KAAK,GACrB,KAAK,OAAS,EACd,KAAK,KAAO,GACZ,KAAK,OAAS,GACd,EAAM,KAAK,iBAAiB,QAAS,KAAK,YAAY,KAAK,OAAO,GAClE,EAAM,KAAK,iBAAiB,OAAQ,KAAK,WAAW,KAAK,OAAO,GAChE,EAAM,KAAK,iBAAiB,YAAY,SAAU,GAC9C,EAAE,gBACN,IAAG,GACH,KAAK,YAAc,EACnB,WAAW,GAAG,KAAK,GAAI,KAC3B,CAMA,WAAA,CAAY,GAER,WAAW,KAAK,KAAK,MAAM,GAAI,GAC/B,IAEI,EAAO,EAAM,EAFb,EAAgB,EAAE,cAClB,EAAI,EAGR,GAAI,EAAe,CAGf,GAFA,EAAQ,EAAc,OAEjB,EACD,OAKJ,IAHA,EAAO,EAAM,GACb,EAAQ,EAAc,OAAS,GAExB,EAAI,EAAM,OAAQ,IACrB,GAAiB,UAAb,EAAM,GAAgB,CACtB,EAAO,EAAM,GACb,KACJ,CAEJ,GAAI,GAAsB,SAAd,EAAK,MAAmB,EAAK,KAAK,MAAM,aAAc,CAC9D,KAAK,KAAO,EAAK,YACjB,IAAI,EAAO,KAEX,GAAI,EAAK,OAAO,MAAQ,EAAK,KAAK,MAA2B,KAAnB,EAAK,OAAO,KAAc,KAIhE,YAHI,EAAK,OAAO,WACZ,EAAK,OAAO,aAIhB,KAAK,OAAO,OACZ,KAAK,YAEL,KAAK,UAEb,CACJ,CACJ,CAMA,UAAA,CAAW,GACP,WAAW,KAAK,KAAK,MAAM,GAAI,GAC/B,MAAM,EAAO,KACb,EAAE,iBAEE,EAAK,OAAO,MAAQ,EAAK,KAAK,MAA2B,KAAnB,EAAK,OAAO,KAAc,KAC5D,EAAK,OAAO,WACZ,EAAK,OAAO,aAIpB,EAAK,KAAO,EAAE,aAAa,MAAM,GAC7B,KAAK,OAAO,OACZ,EAAK,YAEL,EAAK,WAEb,CAKA,QAAA,GACI,MAAM,EAAO,KACP,EAAS,IAAI,WACnB,EAAO,OAAU,IAEb,EAAK,OAAS,EAAE,OAAO,OACvB,EAAK,WAAU,EAEnB,EAAO,cAAc,EAAK,KAC9B,CAKA,SAAA,GACI,MAAM,EAAO,KACM,EAAK,aAAxB,IACI,EAAS,EAAK,OAEd,EAAW,IAAI,SACnB,EAAS,OAAO,EAAO,KAAM,EAAK,MAE9B,EAAO,UACP,EAAO,SAAS,GAGpB,IAAI,EAAM,IAAI,eACd,EAAI,KAAK,OAAQ,EAAO,QAAQ,GAE5B,EAAO,SACP,EAAO,QAAQ,GAEf,EAAO,QACP,EAAO,OAAO,EAAK,GAEvB,EAAI,mBAAqB,WACrB,GAAuB,IAAnB,EAAI,WACJ,GAAmB,MAAf,EAAI,OAAgB,CAEpB,IAAI,EAAM,KAAK,MAAM,EAAI,cACzB,EAAK,OAAS,EAAO,SAAS,GAC9B,WAAW,OAAO,gBAClB,EAAK,YACD,EAAK,OAAO,SACZ,EAAK,OAAO,SAEpB,MAEQ,EAAK,OAAO,OACZ,EAAK,OAAO,QAEhB,WAAW,OAAO,aAG9B,EAEA,EAAI,OAAO,YAAc,SAAU,GAC/B,WAAW,OAAO,YAGd,EAAO,OACP,EAAO,OAEf,EAEA,EAAI,OAAO,WAAa,SAAU,GAC9B,IAAI,GAAY,EAAE,OAAS,EAAE,MAAQ,IAAM,GAAK,IAChD,WAAW,OAAO,SAAS,EAC/B,EAEA,EAAI,OAAO,QAAU,SAAU,GAC3B,WAAW,OAAO,cACd,EAAO,OACP,EAAO,OAEf,EAEA,EAAI,OAAO,UAAY,SAAU,GACzB,EAAO,KACP,EAAO,KAEf,EACA,EAAI,KAAK,EACb,CAKA,SAAA,GACI,MAAM,EAAO,WAAW,OACxB,EAAK,MAAM,YAAY,WAAW,OAAO,YAAa,QAAS,EAAK,QACpE,EAAK,MAAM,SACX,EAAK,MAAM,aAAa,EAAK,YAAY,EAC7C,CAKA,QAAA,CAAS,GACL,EAAM,aAAoB,EAAM,IAChC,WAAW,OAAO,MAAM,KAAK,UACvB,WAAW,OAAO,MAAM,KAAK,UAAU,QAAQ,mBAAoB,EAC7E,CAKA,SAAA,GACI,IAAI,GAAU,WAAW,OAAO,MAAM,gBAAkB,CAAC,GAAG,OAAS,WAAW,OAAO,MAAM,YAC7F,WAAW,OAAO,YAAc,EAChC,WAAW,OAAO,MAAM,WAAW,WAAW,OAAO,YAAa,iBAAkB,CAAC,MAAS,QAAQ,EAC1G,CAKA,WAAA,GACI,WAAW,OAAO,MAAM,KAAK,UACvB,WAAW,OAAO,MAAM,KAAK,UAAU,QAAQ,mBAAoB,iBAC7E,CAEA,aAAA,GACI,WAAW,OAAO,MAAM,KAAK,UACvB,WAAW,OAAO,MAAM,KAAK,UAAU,QAAQ,mBAAoB,GAC7E,SAMG,SAAS,aACZ,IAAI,EAAY,SAAS,cAAc,sBACrB,OAAd,IACA,EAAY,SAAS,cAAc,SACnC,EAAU,aAAa,OAAQ,QAC/B,EAAU,UAAU,IAAI,qBACxB,EAAU,MAAM,QAAU,OAE1B,EAAU,iBAAiB,UAAU,WACjC,IAAI,EAAO,WAAW,OACtB,EAAK,KAAO,EAAU,MAAM,GAC5B,EAAU,MAAQ,GAEd,EAAK,OAAO,MAAQ,EAAK,KAAK,MAA2B,KAAnB,EAAK,OAAO,KAAc,KAC5D,EAAK,OAAO,WACZ,EAAK,OAAO,YAIhB,EAAK,OAAO,OACZ,EAAK,YAEL,EAAK,UAEb,IACA,SAAS,KAAK,YAAY,IAE9B,EAAU,OACd,QAKO,MAAM,UAAY,CACrB,CAAC,OAAQ,SAAU,YAAa,UAChC,CAAC,aAAc,cACf,CAAC,CAAC,OAAU,GAAI,CAAC,OAAU,IAC3B,CAAC,CAAC,KAAQ,WAAY,CAAC,KAAQ,WAC/B,CAAC,CAAC,OAAU,OAAQ,CAAC,OAAU,UAC/B,CAAC,CAAC,OAAU,MAAO,CAAC,OAAU,OAC9B,CAAC,CAAC,UAAa,QACf,CAAC,CAAC,KAAQ,CAAC,SAAS,EAAO,QAAS,UACpC,CAAC,CAAC,OAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAG,KAC/B,CAAC,CAAC,MAAS,IAAK,CAAC,WAAc,KAC/B,CAAC,CAAC,KAAQ,KACV,CAAC,CAAC,MAAS,KACX,CAAC,SACD,CAAC,OAAQ,QAAS","file":"/npm/quill-image-paste-module@1.0.6/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/quill-image-paste-module@1.0.6/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n *@description 观察者模式 全局监听富文本编辑器\r\n */\r\nexport const QuillWatch = {\r\n    watcher: {},  // 登记编辑器信息\r\n    active: null,  // 当前触发的编辑器\r\n    on: function (imageExtendId, ImageExtend) {  // 登记注册使用了ImageEXtend的编辑器\r\n        if (!this.watcher[imageExtendId]) {\r\n            this.watcher[imageExtendId] = ImageExtend\r\n        }\r\n    },\r\n    emit: function (activeId, type = 1) {  // 事件发射触发\r\n        this.active = this.watcher[activeId]\r\n        if (type === 1) {\r\n            imgHandler()\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * @description 图片功能拓展： 增加上传 拖动 复制\r\n */\r\nexport class ImageExtend {\r\n    /**\r\n     * @param quill {Quill}富文本实例\r\n     * @param config {Object} options\r\n     * config  keys: action, headers, editForm start end error  size response\r\n     */\r\n    constructor(quill, config = {}) {\r\n        this.id = Math.random()\r\n        this.quill = quill\r\n        this.quill.id = this.id\r\n        this.config = config\r\n        this.file = ''  // 要上传的图片\r\n        this.imgURL = ''  // 图片地址\r\n        quill.root.addEventListener('paste', this.pasteHandle.bind(this), false)\r\n        quill.root.addEventListener('drop', this.dropHandle.bind(this), false)\r\n        quill.root.addEventListener('dropover', function (e) {\r\n            e.preventDefault()\r\n        }, false)\r\n        this.cursorIndex = 0\r\n        QuillWatch.on(this.id, this)\r\n    }\r\n\r\n    /**\r\n     * @description 粘贴\r\n     * @param e\r\n     */\r\n    pasteHandle(e) {\r\n        // e.preventDefault()\r\n        QuillWatch.emit(this.quill.id, 0)\r\n        let clipboardData = e.clipboardData\r\n        let i = 0\r\n        let items, item, types\r\n\r\n        if (clipboardData) {\r\n            items = clipboardData.items;\r\n\r\n            if (!items) {\r\n                return;\r\n            }\r\n            item = items[0];\r\n            types = clipboardData.types || [];\r\n\r\n            for (; i < types.length; i++) {\r\n                if (types[i] === 'Files') {\r\n                    item = items[i];\r\n                    break;\r\n                }\r\n            }\r\n            if (item && item.kind === 'file' && item.type.match(/^image\\//i)) {\r\n                this.file = item.getAsFile()\r\n                let self = this\r\n                // 如果图片限制大小\r\n                if (self.config.size && self.file.size >= self.config.size * 1024 * 1024) {\r\n                    if (self.config.sizeError) {\r\n                        self.config.sizeError()\r\n                    }\r\n                    return\r\n                }\r\n                if (this.config.action) {\r\n                    this.uploadImg()\r\n                } else {\r\n                    this.toBase64()\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 拖拽\r\n     * @param e\r\n     */\r\n    dropHandle(e) {\r\n        QuillWatch.emit(this.quill.id, 0)\r\n        const self = this\r\n        e.preventDefault()\r\n        // 如果图片限制大小\r\n        if (self.config.size && self.file.size >= self.config.size * 1024 * 1024) {\r\n            if (self.config.sizeError) {\r\n                self.config.sizeError()\r\n            }\r\n            return\r\n        }\r\n        self.file = e.dataTransfer.files[0]; // 获取到第一个上传的文件对象\r\n        if (this.config.action) {\r\n            self.uploadImg()\r\n        } else {\r\n            self.toBase64()\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @description 将图片转为base4\r\n     */\r\n    toBase64() {\r\n        const self = this\r\n        const reader = new FileReader()\r\n        reader.onload = (e) => {\r\n            // 返回base64\r\n            self.imgURL = e.target.result\r\n            self.insertImg()\r\n        }\r\n        reader.readAsDataURL(self.file)\r\n    }\r\n\r\n    /**\r\n     * @description 上传图片到服务器\r\n     */\r\n    uploadImg() {\r\n        const self = this\r\n        let quillLoading = self.quillLoading\r\n        let config = self.config\r\n        // 构造表单\r\n        let formData = new FormData()\r\n        formData.append(config.name, self.file)\r\n        // 自定义修改表单\r\n        if (config.editForm) {\r\n            config.editForm(formData)\r\n        }\r\n        // 创建ajax请求\r\n        let xhr = new XMLHttpRequest()\r\n        xhr.open('post', config.action, true)\r\n        // 如果有设置请求头\r\n        if (config.headers) {\r\n            config.headers(xhr)\r\n        }\r\n        if (config.change) {\r\n            config.change(xhr, formData)\r\n        }\r\n        xhr.onreadystatechange = function () {\r\n            if (xhr.readyState === 4) {\r\n                if (xhr.status === 200) {\r\n                    //success\r\n                    let res = JSON.parse(xhr.responseText)\r\n                    self.imgURL = config.response(res)\r\n                    QuillWatch.active.uploadSuccess()\r\n                    self.insertImg()\r\n                    if (self.config.success) {\r\n                        self.config.success()\r\n                    }\r\n                } else {\r\n                    //error\r\n                    if (self.config.error) {\r\n                        self.config.error()\r\n                    }\r\n                    QuillWatch.active.uploadError()\r\n                }\r\n            }\r\n        }\r\n        // 开始上传数据\r\n        xhr.upload.onloadstart = function (e) {\r\n            QuillWatch.active.uploading()\r\n            // let length = (self.quill.getSelection() || {}).index || self.quill.getLength()\r\n            // self.quill.insertText(length, '[uploading...]', { 'color': 'red'}, true)\r\n            if (config.start) {\r\n                config.start()\r\n            }\r\n        }\r\n        // 上传过程\r\n        xhr.upload.onprogress = function (e) {\r\n            let complete = (e.loaded / e.total * 100 | 0) + '%'\r\n            QuillWatch.active.progress(complete)\r\n        }\r\n        // 当发生网络异常的时候会触发，如果上传数据的过程还未结束\r\n        xhr.upload.onerror = function (e) {\r\n            QuillWatch.active.uploadError()\r\n            if (config.error) {\r\n                config.error()\r\n            }\r\n        }\r\n        // 上传数据完成（成功或者失败）时会触发\r\n        xhr.upload.onloadend = function (e) {\r\n            if (config.end) {\r\n                config.end()\r\n            }\r\n        }\r\n        xhr.send(formData)\r\n    }\r\n\r\n    /**\r\n     * @description 往富文本编辑器插入图片\r\n     */\r\n    insertImg() {\r\n        const self = QuillWatch.active\r\n        self.quill.insertEmbed(QuillWatch.active.cursorIndex, 'image', self.imgURL)\r\n        self.quill.update()\r\n        self.quill.setSelection(self.cursorIndex+1);\r\n    }\r\n\r\n    /**\r\n     * @description 显示上传的进度\r\n     */\r\n    progress(pro) {\r\n        pro = '[' + 'uploading' + pro + ']'\r\n        QuillWatch.active.quill.root.innerHTML\r\n            = QuillWatch.active.quill.root.innerHTML.replace(/\\[uploading.*?\\]/, pro)\r\n    }\r\n\r\n    /**\r\n     * 开始上传\r\n     */\r\n    uploading() {\r\n        let length = (QuillWatch.active.quill.getSelection() || {}).index || QuillWatch.active.quill.getLength()\r\n        QuillWatch.active.cursorIndex = length\r\n        QuillWatch.active.quill.insertText(QuillWatch.active.cursorIndex, '[uploading...]', {'color': 'red'}, true)\r\n    }\r\n\r\n    /**\r\n     * 上传失败\r\n     */\r\n    uploadError() {\r\n        QuillWatch.active.quill.root.innerHTML\r\n            = QuillWatch.active.quill.root.innerHTML.replace(/\\[uploading.*?\\]/, '[upload error]')\r\n    }\r\n\r\n    uploadSuccess() {\r\n        QuillWatch.active.quill.root.innerHTML\r\n            = QuillWatch.active.quill.root.innerHTML.replace(/\\[uploading.*?\\]/, '')\r\n    }\r\n}\r\n\r\n/**\r\n * @description 点击图片上传\r\n */\r\nexport function imgHandler() {\r\n    let fileInput = document.querySelector('.quill-image-input');\r\n    if (fileInput === null) {\r\n        fileInput = document.createElement('input');\r\n        fileInput.setAttribute('type', 'file');\r\n        fileInput.classList.add('quill-image-input');\r\n        fileInput.style.display = 'none'\r\n        // 监听选择文件\r\n        fileInput.addEventListener('change', function () {\r\n            let self = QuillWatch.active\r\n            self.file = fileInput.files[0]\r\n            fileInput.value = ''\r\n            // 如果图片限制大小\r\n            if (self.config.size && self.file.size >= self.config.size * 1024 * 1024) {\r\n                if (self.config.sizeError) {\r\n                    self.config.sizeError()\r\n                }\r\n                return\r\n            }\r\n            if (self.config.action) {\r\n                self.uploadImg()\r\n            } else {\r\n                self.toBase64()\r\n            }\r\n        })\r\n        document.body.appendChild(fileInput);\r\n    }\r\n    fileInput.click();\r\n}\r\n\r\n/**\r\n *@description 全部工具栏\r\n */\r\nexport const container = [\r\n    ['bold', 'italic', 'underline', 'strike'],\r\n    ['blockquote', 'code-block'],\r\n    [{'header': 1}, {'header': 2}],\r\n    [{'list': 'ordered'}, {'list': 'bullet'}],\r\n    [{'script': 'sub'}, {'script': 'super'}],\r\n    [{'indent': '-1'}, {'indent': '+1'}],\r\n    [{'direction': 'rtl'}],\r\n    [{'size': ['small', false, 'large', 'huge']}],\r\n    [{'header': [1, 2, 3, 4, 5, 6, false]}],\r\n    [{'color': []}, {'background': []}],\r\n    [{'font': []}],\r\n    [{'align': []}],\r\n    ['clean'],\r\n    ['link', 'image', 'video']\r\n]\r\n\r\n\r\n\r\n"]}