@wangeditor-next/upload-image-module 6.5.1 → 6.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require(`@wangeditor-next/core`),require(`@wangeditor-next/basic-modules`),require(`dom7`),require(`@wangeditor-next/core/upload`)):typeof define==`function`&&define.amd?define([`@wangeditor-next/core`,`@wangeditor-next/basic-modules`,`dom7`,`@wangeditor-next/core/upload`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.WangEditorUploadImageModule=t(e.WangEditorCore,e.WangEditorBasicModules,e.$,e.WangEditorCoreUpload))})(this,function(e,t,n,r){var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e};n=((e,t,n)=>(n=e==null?{}:i(c(e)),u(t||!e||!e.__esModule?a(n,`default`,{value:e,enumerable:!0}):n,e)))(n),(0,e.i18nAddResources)(`en`,{uploadImgModule:{uploadImage:`Upload Image`,uploadError:`{{fileName}} upload error`}}),(0,e.i18nAddResources)(`zh-CN`,{uploadImgModule:{uploadImage:`上传图片`,uploadError:`{{fileName}} 上传出错`}});function d(){return{server:``,fieldName:`wangeditor-uploaded-image`,maxFileSize:2*1024*1024,maxNumberOfFiles:100,allowedFileTypes:[`image/*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:10*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{console.error(`'${e.name}' upload failed`,t)},onError:(e,t,n)=>{console.error(`'${e.name}' upload error`,n)},base64LimitSize:0}}n.append&&(n.default.fn.append=n.append),n.on&&(n.default.fn.on=n.on),n.remove&&(n.default.fn.remove=n.remove),n.val&&(n.default.fn.val=n.val),n.click&&(n.default.fn.click=n.click),n.hide&&(n.default.fn.hide=n.hide);var f=n.default;function p(e){"@babel/helpers - typeof";return p=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},p(e)}function m(e,t){if(p(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(p(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function h(e){var t=m(e,`string`);return p(t)==`symbol`?t:t+``}function g(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?_(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function y(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function b(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){y(a,r,i,o,s,`next`,e)}function s(e){y(a,r,i,o,s,`throw`,e)}o(void 0)})}}function x(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new S(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function S(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return S=function(e){this.s=e,this.n=e.next},S.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new S(e)}let C=new WeakMap;function w(e){return e.getMenuConfig(`uploadImage`)}function T(e){let
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require(`@wangeditor-next/core`),require(`@wangeditor-next/basic-modules`),require(`dom7`),require(`@wangeditor-next/core/upload`)):typeof define==`function`&&define.amd?define([`@wangeditor-next/core`,`@wangeditor-next/basic-modules`,`dom7`,`@wangeditor-next/core/upload`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.WangEditorUploadImageModule=t(e.WangEditorCore,e.WangEditorBasicModules,e.$,e.WangEditorCoreUpload))})(this,function(e,t,n,r){var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e};n=((e,t,n)=>(n=e==null?{}:i(c(e)),u(t||!e||!e.__esModule?a(n,`default`,{value:e,enumerable:!0}):n,e)))(n),(0,e.i18nAddResources)(`en`,{uploadImgModule:{uploadImage:`Upload Image`,uploadError:`{{fileName}} upload error`}}),(0,e.i18nAddResources)(`zh-CN`,{uploadImgModule:{uploadImage:`上传图片`,uploadError:`{{fileName}} 上传出错`}});function d(){return{server:``,fieldName:`wangeditor-uploaded-image`,maxFileSize:2*1024*1024,maxNumberOfFiles:100,allowedFileTypes:[`image/*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:10*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{console.error(`'${e.name}' upload failed`,t)},onError:(e,t,n)=>{console.error(`'${e.name}' upload error`,n)},base64LimitSize:0,insertAsBlock:!1}}n.append&&(n.default.fn.append=n.append),n.on&&(n.default.fn.on=n.on),n.remove&&(n.default.fn.remove=n.remove),n.val&&(n.default.fn.val=n.val),n.click&&(n.default.fn.click=n.click),n.hide&&(n.default.fn.hide=n.hide);var f=n.default;function p(e){"@babel/helpers - typeof";return p=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},p(e)}function m(e,t){if(p(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(p(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function h(e){var t=m(e,`string`);return p(t)==`symbol`?t:t+``}function g(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?_(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function y(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function b(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){y(a,r,i,o,s,`next`,e)}function s(e){y(a,r,i,o,s,`throw`,e)}o(void 0)})}}function x(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new S(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function S(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return S=function(e){this.s=e,this.n=e.next},S.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new S(e)}let C=new WeakMap;function w(e){return e.getMenuConfig(`uploadImage`)}let T=new WeakMap;function E(e,n,r,i){let{insertAsBlock:a}=w(e),o=()=>(0,t.insertImageNode)(e,n,r,i,{block:!!a}),s=T.get(e),c=s?s.then(o):o(),l=c.catch(()=>void 0).then(()=>{T.get(e)===l&&T.delete(e)});return T.set(e,l),c}function D(e){let t=C.get(e);if(t!=null)return t;let n=w(e),{onSuccess:i,onProgress:a,onFailed:o,customInsert:s,onError:c}=n;return t=(0,r.createUploader)(v(v({},n),{},{onProgress:t=>{e.showProgressBar(t),a&&a(t)},onSuccess:(t,n)=>{if(s){s(n,(t,n,r)=>E(e,t,n,r)),i(t,n);return}let{errno:r=1,data:a={}}=n;if(r!==0){o(t,n);return}if(Array.isArray(a))a.forEach(t=>{let{url:n=``,alt:r=``,href:i=``}=t;E(e,n,r,i)});else{let{url:t=``,alt:n=``,href:r=``}=a;E(e,t,n,r)}i(t,n)},onError:(e,t,n)=>{c(e,t,n)}}),e),C.set(e,t),t}function O(e,t){return k.apply(this,arguments)}function k(){return k=b(function*(e,t){return new Promise(n=>{let r=new FileReader;r.readAsDataURL(t),r.onload=()=>{let{result:i}=r;if(!i)return;let a=i.toString(),o=a.indexOf(`data:image`)===0?``:a;E(e,a,t.name,o),n(`ok`)}})}),k.apply(this,arguments)}function A(e,t){return j.apply(this,arguments)}function j(){return j=b(function*(e,t){let n=D(e),r=t.map(e=>({name:e.name,type:e.type,size:e.size,data:e}));n.addFiles(r),yield n.upload()}),j.apply(this,arguments)}function M(e,t){return N.apply(this,arguments)}function N(){return N=b(function*(e,t){if(t==null)return;let n=Array.prototype.slice.call(t),{customUpload:r,base64LimitSize:i}=w(e),a=[];var o=!1,s=!1,c;try{for(var l=x(n),u;o=!(u=yield l.next()).done;o=!1){let t=u.value;{let n=t.size;i&&n<=i?yield O(e,t):r?yield r(t,(t,n,r)=>E(e,t,n,r),e):a.push(t)}}}catch(e){s=!0,c=e}finally{try{o&&l.return!=null&&(yield l.return())}finally{if(s)throw c}}a.length>0&&(yield A(e,a))}),N.apply(this,arguments)}var P=class{constructor(){this.title=(0,e.t)(`uploadImgModule.uploadImage`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z"></path></svg>`,this.tag=`button`}getValue(e){return``}isActive(e){return!1}isDisabled(e){return(0,t.isInsertImageMenuDisabled)(e)}getMenuConfig(e){return e.getMenuConfig(`uploadImage`)}exec(e,t){let{allowedFileTypes:n=[],customBrowseAndUpload:r}=this.getMenuConfig(e);if(r){r((t,n,r)=>E(e,t,n,r));return}let i=``;n.length>0&&(i=`accept="${n.join(`, `)}"`);let a=f(`body`),o=f(`<input type="file" ${i} multiple/>`);o.hide(),a.append(o),o.click(),o.on(`change`,()=>{let t=o[0].files;M(e,t)})}};let F={key:`uploadImage`,factory(){return new P},config:d()};function I(e){let{insertData:n}=e,r=e;return r.insertData=i=>{if((0,t.isInsertImageMenuDisabled)(r)){n(i);return}if(i.getData(`text/plain`)){n(i);return}let{files:a}=i;if(a.length<=0){n(i);return}Array.prototype.slice.call(a).some(e=>{let[t]=e.type.split(`/`);return t===`image`})?M(e,a):n(i)},r}return{menus:[F],editorPlugin:I}});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["uploadImgModule","uploadImage","uploadError","uploadImgModule","uploadImage","uploadError","i18nAddResources","enResources","zhResources","genUploadImageConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","file","res","console","error","name","onError","err","base64LimitSize","UPLOAD_IMAGE_SVG","$","append","click","hide","on","remove","val","fn","insertImageNode","createUploader","EDITOR_TO_UPLOADER_MAP","WeakMap","getMenuConfig","editor","getUploader","uploader","get","menuConfig","onSuccess","onProgress","onFailed","customInsert","onError","successHandler","file","res","src","alt","href","errno","data","Array","isArray","forEach","item","url","progressHandler","progress","showProgressBar","errorHandler","err","set","insertBase64","Promise","resolve","reader","FileReader","readAsDataURL","onload","result","toString","indexOf","name","uploadFile","files","uploadList","map","type","size","addFiles","upload","fileList","prototype","slice","call","customUpload","base64LimitSize","uploadFileList","push","length","insertImageNode","isInsertImageMenuDisabled","t","UPLOAD_IMAGE_SVG","$","uploadImages","UploadImage","title","iconSvg","tag","getValue","_editor","isActive","isDisabled","editor","getMenuConfig","exec","_value","allowedFileTypes","customBrowseAndUpload","src","alt","href","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","genUploadImageConfig","UploadImageMenu","uploadImageMenuConf","key","factory","config","isInsertImageMenuDisabled","uploadImages","withUploadImage","editor","insertData","newEditor","data","text","getData","files","length","fileList","Array","prototype","slice","call","hasImageFiles","some","file","mime","type","split","uploadImageMenuConf","withUploadImage","uploadImage","menus","editorPlugin","wangEditorUploadImageModule"],"sources":["../src/locale/en.ts","../src/locale/zh-CN.ts","../src/locale/index.ts","../src/module/menu/config.ts","../src/constants/svg.ts","../src/utils/dom.ts","../src/module/upload-images.ts","../src/module/menu/UploadImageMenu.ts","../src/module/menu/index.ts","../src/module/plugin.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: 'Upload Image',\n uploadError: '{{fileName}} upload error',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: '上传图片',\n uploadError: '{{fileName}} 上传出错',\n },\n}\n","/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description upload image config\n * @author wangfupeng\n */\n\nimport { IUploadImageConfig } from '@wangeditor-next/core'\n\n// 生成默认配置\nexport function genUploadImageConfig(): IUploadImageConfig {\n return {\n server: '', // server API 地址,需用户配置\n\n fieldName: 'wangeditor-uploaded-image', // formData 中,文件的 key\n maxFileSize: 2 * 1024 * 1024, // 2M\n maxNumberOfFiles: 100, // 最多上传 xx 张图片\n allowedFileTypes: ['image/*'],\n meta: {\n // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。\n // 例如:token: 'xxxxx', x: 100\n },\n metaWithUrl: false,\n // headers: {\n // // 自定义 http headers\n // // 例如:Accept: 'text/x-json', a: 100,\n // },\n withCredentials: false,\n timeout: 10 * 1000, // 10s\n\n onBeforeUpload: (files: any) => files, // 返回 false 则终止上传\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (file: any, res: any) => {\n console.error(`'${file.name}' upload failed`, res)\n },\n onError: (file: any, err: any, res: any) => {\n /* on error */\n /* on timeout */\n console.error(`'${file.name}' upload error`, res)\n },\n\n // 自定义插入图片,用户配置\n // customInsert: (res, insertFn) => {},\n\n // 自定义上传图片,用户配置\n // customUpload: (file, insertFn) => {},\n\n // 自定义上传适配器,默认仍使用内置 Uppy\n // uploadAdapter: ({ config, editor }) => ({ addFiles() {}, upload: async () => {} }),\n\n // 小于 xxx 就插入 base64\n base64LimitSize: 0,\n\n // 自定义选择,并上传图片,如:图床 (用户配置)\n // customBrowseAndUpload: insertFn => {},\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 上传图片\nexport const UPLOAD_IMAGE_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z\"></path></svg>'\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on, remove, val,\n} from 'dom7'\n\nexport type { Dom7Array } from 'dom7'\n\nif (append) { $.fn.append = append }\nif (on) { $.fn.on = on }\nif (remove) { $.fn.remove = remove }\nif (val) { $.fn.val = val }\nif (click) { $.fn.click = click }\nif (hide) { $.fn.hide = hide }\n\nexport default $\n","/**\n * @description 上传文件\n * @author wangfupeng\n */\n\nimport { insertImageNode } from '@wangeditor-next/basic-modules'\nimport {\n IDomEditor, IUploader,\n IUploadFile, IUploadResultFile,\n} from '@wangeditor-next/core'\nimport { createUploader } from '@wangeditor-next/core/upload'\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, IUploader>()\n\nfunction getMenuConfig(editor: IDomEditor) {\n return editor.getMenuConfig('uploadImage')\n}\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor): IUploader {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getMenuConfig(editor)\n const {\n onSuccess, onProgress, onFailed, customInsert, onError,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: IUploadResultFile, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url, alt, href } } —— 注意,旧版的 data 是数组,要兼容一下\n // 失败:{ errno: !0, message: '失败信息' }\n\n if (customInsert) {\n // 用户自定义插入图片,此时 res 格式可能不符合预期\n customInsert(res, (src, alt, href) => insertImageNode(editor, src, alt, href))\n // success 回调\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res\n\n if (errno !== 0) {\n // failed 回调\n onFailed(file, res)\n return\n }\n\n if (Array.isArray(data)) {\n // 返回的数组(旧版的,兼容一下)\n data.forEach((item: { url: string; alt?: string; href?: string }) => {\n const { url = '', alt = '', href = '' } = item\n // 使用 basic-module 的 insertImageNode 方法插入图片,其中有用户配置的校验和 callback\n\n insertImageNode(editor, url, alt, href)\n })\n } else {\n // 返回的对象\n const { url = '', alt = '', href = '' } = data\n\n insertImageNode(editor, url, alt, href)\n }\n\n // success 回调\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n // 回调函数\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n // 回调函数\n onError(file, err, res)\n }\n\n uploader = createUploader({\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n }, editor)\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 插入 base64 格式\n * @param editor editor\n * @param file file\n */\nasync function insertBase64(editor: IDomEditor, file: File) {\n return new Promise(resolve => {\n const reader = new FileReader()\n\n reader.readAsDataURL(file)\n reader.onload = () => {\n const { result } = reader\n\n if (!result) { return }\n const src = result.toString()\n const href = src.indexOf('data:image') === 0 ? '' : src // base64 格式则不设置 href\n\n insertImageNode(editor, src, file.name, href)\n\n resolve('ok')\n }\n })\n}\n\n/**\n * 上传图片文件\n * @param editor editor\n * @param file file\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList: IUploadFile[] = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传图片\n * @param editor editor\n * @param files files\n */\nexport default async function (editor: IDomEditor, files: FileList | null) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files)\n\n // 获取菜单配置\n const { customUpload, base64LimitSize } = getMenuConfig(editor)\n\n const uploadFileList : File[] = []\n // 按顺序上传\n\n for await (const file of fileList) {\n const size = file.size // size kb\n\n if (base64LimitSize && size <= base64LimitSize) {\n // 允许 base64 ,而且 size 在 base64 限制之内,则插入 base64 格式\n await insertBase64(editor, file)\n } else if (customUpload) {\n // 自定义上传\n await customUpload(file, (src, alt, href) => insertImageNode(editor, src, alt, href), editor)\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n // 默认上传\n if (uploadFileList.length > 0) { await uploadFile(editor, uploadFileList) }\n}\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { insertImageNode, isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport {\n IButtonMenu, IDomEditor, t,\n} from '@wangeditor-next/core'\n\nimport { UPLOAD_IMAGE_SVG } from '../../constants/svg'\nimport $ from '../../utils/dom'\nimport uploadImages from '../upload-images'\n\nclass UploadImage implements IButtonMenu {\n readonly title = t('uploadImgModule.uploadImage')\n\n readonly iconSvg = UPLOAD_IMAGE_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 插入菜单,不需要 value\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n isDisabled(editor: IDomEditor): boolean {\n return isInsertImageMenuDisabled(editor)\n }\n\n private getMenuConfig(editor: IDomEditor) {\n // 获取配置,见 `./config.js`\n return editor.getMenuConfig('uploadImage')\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const { allowedFileTypes = [], customBrowseAndUpload } = this.getMenuConfig(editor)\n\n // 自定义选择图片,并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((src, alt, href) => insertImageNode(editor, src, alt, href))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadImages(editor, files) // 上传文件\n })\n }\n}\n\nexport default UploadImage\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { genUploadImageConfig } from './config'\nimport UploadImageMenu from './UploadImageMenu'\n\nexport const uploadImageMenuConf = {\n key: 'uploadImage',\n factory() {\n return new UploadImageMenu()\n },\n\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadImageConfig(),\n}\n","/**\n * @description editor 插件,重写 editor API\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport { IDomEditor } from '@wangeditor-next/core'\n\nimport uploadImages from './upload-images'\n\nfunction withUploadImage<T extends IDomEditor>(editor: T): T {\n const { insertData } = editor\n const newEditor = editor\n\n // 重写 insertData - 粘贴图片、拖拽上传图片\n newEditor.insertData = (data: DataTransfer) => {\n if (isInsertImageMenuDisabled(newEditor)) {\n insertData(data)\n return\n }\n\n // 如有 text ,则优先粘贴 text\n const text = data.getData('text/plain')\n\n if (text) {\n insertData(data)\n return\n }\n\n // 获取文件\n const { files } = data\n\n if (files.length <= 0) {\n insertData(data)\n return\n }\n\n // 判断是否有图片文件(可能是其他类型的文件)\n const fileList = Array.prototype.slice.call(files)\n const hasImageFiles = fileList.some(file => {\n const [mime] = file.type.split('/')\n\n return mime === 'image'\n })\n\n if (hasImageFiles) {\n // 有图片文件,则上传图片\n uploadImages(editor, files)\n } else {\n // 如果没有, 则继续 insertData\n insertData(data)\n }\n }\n\n // 返回 editor ,重要!\n return newEditor\n}\n\nexport default withUploadImage\n","/**\n * @description uploadImage module\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport { uploadImageMenuConf } from './menu/index'\nimport withUploadImage from './plugin'\n\nconst uploadImage: Partial<IModuleConf> = {\n menus: [uploadImageMenuConf],\n editorPlugin: withUploadImage,\n}\n\nexport default uploadImage\n","/**\n * @description upload image\n * @author wangfupeng\n */\n\nimport './assets/index.less'\n// 配置多语言\nimport './locale/index'\n\nimport wangEditorUploadImageModule from './module/index'\n\nexport default wangEditorUploadImageModule\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["uploadImgModule","uploadImage","uploadError","uploadImgModule","uploadImage","uploadError","i18nAddResources","enResources","zhResources","genUploadImageConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","file","res","console","error","name","onError","err","base64LimitSize","insertAsBlock","UPLOAD_IMAGE_SVG","$","append","click","hide","on","remove","val","fn","insertImageNode","createUploader","EDITOR_TO_UPLOADER_MAP","WeakMap","getMenuConfig","editor","EDITOR_TO_INSERT_QUEUE_MAP","insertImage","src","alt","href","insertAsBlock","run","block","prev","get","task","then","tail","catch","undefined","delete","set","getUploader","uploader","menuConfig","onSuccess","onProgress","onFailed","customInsert","onError","successHandler","file","res","errno","data","Array","isArray","forEach","item","url","progressHandler","progress","showProgressBar","errorHandler","err","insertBase64","Promise","resolve","reader","FileReader","readAsDataURL","onload","result","toString","indexOf","name","uploadFile","files","uploadList","map","type","size","addFiles","upload","fileList","prototype","slice","call","customUpload","base64LimitSize","uploadFileList","push","length","isInsertImageMenuDisabled","t","UPLOAD_IMAGE_SVG","$","uploadImages","insertImage","UploadImage","title","iconSvg","tag","getValue","_editor","isActive","isDisabled","editor","getMenuConfig","exec","_value","allowedFileTypes","customBrowseAndUpload","src","alt","href","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","genUploadImageConfig","UploadImageMenu","uploadImageMenuConf","key","factory","config","isInsertImageMenuDisabled","uploadImages","withUploadImage","editor","insertData","newEditor","data","text","getData","files","length","fileList","Array","prototype","slice","call","hasImageFiles","some","file","mime","type","split","uploadImageMenuConf","withUploadImage","uploadImage","menus","editorPlugin","wangEditorUploadImageModule"],"sources":["../src/locale/en.ts","../src/locale/zh-CN.ts","../src/locale/index.ts","../src/module/menu/config.ts","../src/constants/svg.ts","../src/utils/dom.ts","../src/module/upload-images.ts","../src/module/menu/UploadImageMenu.ts","../src/module/menu/index.ts","../src/module/plugin.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: 'Upload Image',\n uploadError: '{{fileName}} upload error',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: '上传图片',\n uploadError: '{{fileName}} 上传出错',\n },\n}\n","/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description upload image config\n * @author wangfupeng\n */\n\nimport { IUploadImageConfig } from '@wangeditor-next/core'\n\n// 生成默认配置\nexport function genUploadImageConfig(): IUploadImageConfig {\n return {\n server: '', // server API 地址,需用户配置\n\n fieldName: 'wangeditor-uploaded-image', // formData 中,文件的 key\n maxFileSize: 2 * 1024 * 1024, // 2M\n maxNumberOfFiles: 100, // 最多上传 xx 张图片\n allowedFileTypes: ['image/*'],\n meta: {\n // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。\n // 例如:token: 'xxxxx', x: 100\n },\n metaWithUrl: false,\n // headers: {\n // // 自定义 http headers\n // // 例如:Accept: 'text/x-json', a: 100,\n // },\n withCredentials: false,\n timeout: 10 * 1000, // 10s\n\n onBeforeUpload: (files: any) => files, // 返回 false 则终止上传\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (file: any, res: any) => {\n console.error(`'${file.name}' upload failed`, res)\n },\n onError: (file: any, err: any, res: any) => {\n /* on error */\n /* on timeout */\n console.error(`'${file.name}' upload error`, res)\n },\n\n // 自定义插入图片,用户配置\n // customInsert: (res, insertFn) => {},\n\n // 自定义上传图片,用户配置\n // customUpload: (file, insertFn) => {},\n\n // 自定义上传适配器,默认仍使用内置 Uppy\n // uploadAdapter: ({ config, editor }) => ({ addFiles() {}, upload: async () => {} }),\n\n // 小于 xxx 就插入 base64\n base64LimitSize: 0,\n\n // 是否让每张上传的图片独占一行(默认 false,保持 inline 插入)\n insertAsBlock: false,\n\n // 自定义选择,并上传图片,如:图床 (用户配置)\n // customBrowseAndUpload: insertFn => {},\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 上传图片\nexport const UPLOAD_IMAGE_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z\"></path></svg>'\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on, remove, val,\n} from 'dom7'\n\nexport type { Dom7Array } from 'dom7'\n\nif (append) { $.fn.append = append }\nif (on) { $.fn.on = on }\nif (remove) { $.fn.remove = remove }\nif (val) { $.fn.val = val }\nif (click) { $.fn.click = click }\nif (hide) { $.fn.hide = hide }\n\nexport default $\n","/**\n * @description 上传文件\n * @author wangfupeng\n */\n\nimport { insertImageNode } from '@wangeditor-next/basic-modules'\nimport {\n IDomEditor, IUploader,\n IUploadFile, IUploadResultFile,\n} from '@wangeditor-next/core'\nimport { createUploader } from '@wangeditor-next/core/upload'\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, IUploader>()\n\nfunction getMenuConfig(editor: IDomEditor) {\n return editor.getMenuConfig('uploadImage')\n}\n\n// 存储 editor 的图片插入队列,保证异步校验(checkImage / parseImageSrc)下仍按调用顺序插入\nconst EDITOR_TO_INSERT_QUEUE_MAP = new WeakMap<IDomEditor, Promise<unknown>>()\n\n/**\n * 插入图片,是否独占一行由 uploadImage.insertAsBlock 决定。\n * 同一个 editor 的插入会串行执行,避免后一张图片的异步钩子先完成而导致顺序错乱\n */\nexport function insertImage(editor: IDomEditor, src: string, alt?: string, href?: string) {\n const { insertAsBlock } = getMenuConfig(editor)\n const run = () => insertImageNode(editor, src, alt, href, { block: !!insertAsBlock })\n const prev = EDITOR_TO_INSERT_QUEUE_MAP.get(editor)\n // 队列空闲时立即执行;否则排在上一次插入之后\n const task = prev ? prev.then(run) : run()\n // 队列本身不受单次插入失败影响,完成后若无后续插入则清空\n const tail: Promise<unknown> = task\n .catch(() => undefined)\n .then(() => {\n if (EDITOR_TO_INSERT_QUEUE_MAP.get(editor) === tail) {\n EDITOR_TO_INSERT_QUEUE_MAP.delete(editor)\n }\n })\n\n EDITOR_TO_INSERT_QUEUE_MAP.set(editor, tail)\n\n return task\n}\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor): IUploader {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getMenuConfig(editor)\n const {\n onSuccess, onProgress, onFailed, customInsert, onError,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: IUploadResultFile, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url, alt, href } } —— 注意,旧版的 data 是数组,要兼容一下\n // 失败:{ errno: !0, message: '失败信息' }\n\n if (customInsert) {\n // 用户自定义插入图片,此时 res 格式可能不符合预期\n customInsert(res, (src, alt, href) => insertImage(editor, src, alt, href))\n // success 回调\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res\n\n if (errno !== 0) {\n // failed 回调\n onFailed(file, res)\n return\n }\n\n if (Array.isArray(data)) {\n // 返回的数组(旧版的,兼容一下)\n data.forEach((item: { url: string; alt?: string; href?: string }) => {\n const { url = '', alt = '', href = '' } = item\n // 使用 basic-module 的 insertImageNode 方法插入图片,其中有用户配置的校验和 callback\n\n insertImage(editor, url, alt, href)\n })\n } else {\n // 返回的对象\n const { url = '', alt = '', href = '' } = data\n\n insertImage(editor, url, alt, href)\n }\n\n // success 回调\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n // 回调函数\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n // 回调函数\n onError(file, err, res)\n }\n\n uploader = createUploader({\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n }, editor)\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 插入 base64 格式\n * @param editor editor\n * @param file file\n */\nasync function insertBase64(editor: IDomEditor, file: File) {\n return new Promise(resolve => {\n const reader = new FileReader()\n\n reader.readAsDataURL(file)\n reader.onload = () => {\n const { result } = reader\n\n if (!result) { return }\n const src = result.toString()\n const href = src.indexOf('data:image') === 0 ? '' : src // base64 格式则不设置 href\n\n insertImage(editor, src, file.name, href)\n\n resolve('ok')\n }\n })\n}\n\n/**\n * 上传图片文件\n * @param editor editor\n * @param file file\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList: IUploadFile[] = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传图片\n * @param editor editor\n * @param files files\n */\nexport default async function (editor: IDomEditor, files: FileList | null) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files)\n\n // 获取菜单配置\n const { customUpload, base64LimitSize } = getMenuConfig(editor)\n\n const uploadFileList : File[] = []\n // 按顺序上传\n\n for await (const file of fileList) {\n const size = file.size // size kb\n\n if (base64LimitSize && size <= base64LimitSize) {\n // 允许 base64 ,而且 size 在 base64 限制之内,则插入 base64 格式\n await insertBase64(editor, file)\n } else if (customUpload) {\n // 自定义上传\n await customUpload(file, (src, alt, href) => insertImage(editor, src, alt, href), editor)\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n // 默认上传\n if (uploadFileList.length > 0) { await uploadFile(editor, uploadFileList) }\n}\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport {\n IButtonMenu, IDomEditor, t,\n} from '@wangeditor-next/core'\n\nimport { UPLOAD_IMAGE_SVG } from '../../constants/svg'\nimport $ from '../../utils/dom'\nimport uploadImages, { insertImage } from '../upload-images'\n\nclass UploadImage implements IButtonMenu {\n readonly title = t('uploadImgModule.uploadImage')\n\n readonly iconSvg = UPLOAD_IMAGE_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 插入菜单,不需要 value\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n isDisabled(editor: IDomEditor): boolean {\n return isInsertImageMenuDisabled(editor)\n }\n\n private getMenuConfig(editor: IDomEditor) {\n // 获取配置,见 `./config.js`\n return editor.getMenuConfig('uploadImage')\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const { allowedFileTypes = [], customBrowseAndUpload } = this.getMenuConfig(editor)\n\n // 自定义选择图片,并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((src, alt, href) => insertImage(editor, src, alt, href))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadImages(editor, files) // 上传文件\n })\n }\n}\n\nexport default UploadImage\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { genUploadImageConfig } from './config'\nimport UploadImageMenu from './UploadImageMenu'\n\nexport const uploadImageMenuConf = {\n key: 'uploadImage',\n factory() {\n return new UploadImageMenu()\n },\n\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadImageConfig(),\n}\n","/**\n * @description editor 插件,重写 editor API\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport { IDomEditor } from '@wangeditor-next/core'\n\nimport uploadImages from './upload-images'\n\nfunction withUploadImage<T extends IDomEditor>(editor: T): T {\n const { insertData } = editor\n const newEditor = editor\n\n // 重写 insertData - 粘贴图片、拖拽上传图片\n newEditor.insertData = (data: DataTransfer) => {\n if (isInsertImageMenuDisabled(newEditor)) {\n insertData(data)\n return\n }\n\n // 如有 text ,则优先粘贴 text\n const text = data.getData('text/plain')\n\n if (text) {\n insertData(data)\n return\n }\n\n // 获取文件\n const { files } = data\n\n if (files.length <= 0) {\n insertData(data)\n return\n }\n\n // 判断是否有图片文件(可能是其他类型的文件)\n const fileList = Array.prototype.slice.call(files)\n const hasImageFiles = fileList.some(file => {\n const [mime] = file.type.split('/')\n\n return mime === 'image'\n })\n\n if (hasImageFiles) {\n // 有图片文件,则上传图片\n uploadImages(editor, files)\n } else {\n // 如果没有, 则继续 insertData\n insertData(data)\n }\n }\n\n // 返回 editor ,重要!\n return newEditor\n}\n\nexport default withUploadImage\n","/**\n * @description uploadImage module\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport { uploadImageMenuConf } from './menu/index'\nimport withUploadImage from './plugin'\n\nconst uploadImage: Partial<IModuleConf> = {\n menus: [uploadImageMenuConf],\n editorPlugin: withUploadImage,\n}\n\nexport default uploadImage\n","/**\n * @description upload image\n * @author wangfupeng\n */\n\nimport './assets/index.less'\n// 配置多语言\nimport './locale/index'\n\nimport wangEditorUploadImageModule from './module/index'\n\nexport default wangEditorUploadImageModule\n"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i18nAddResources as e,t}from"@wangeditor-next/core";import{insertImageNode as n,isInsertImageMenuDisabled as r}from"@wangeditor-next/basic-modules";import i,{append as a,click as o,hide as s,on as c,remove as l,val as u}from"dom7";import{createUploader as d}from"@wangeditor-next/core/upload";e(`en`,{uploadImgModule:{uploadImage:`Upload Image`,uploadError:`{{fileName}} upload error`}}),e(`zh-CN`,{uploadImgModule:{uploadImage:`上传图片`,uploadError:`{{fileName}} 上传出错`}});function f(){return{server:``,fieldName:`wangeditor-uploaded-image`,maxFileSize:2*1024*1024,maxNumberOfFiles:100,allowedFileTypes:[`image/*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:10*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{console.error(`'${e.name}' upload failed`,t)},onError:(e,t,n)=>{console.error(`'${e.name}' upload error`,n)},base64LimitSize:0}}a&&(i.fn.append=a),c&&(i.fn.on=c),l&&(i.fn.remove=l),u&&(i.fn.val=u),o&&(i.fn.click=o),s&&(i.fn.hide=s);var p=i;function m(e){"@babel/helpers - typeof";return m=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},m(e)}function h(e,t){if(m(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(m(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function g(e){var t=h(e,`string`);return m(t)==`symbol`?t:t+``}function _(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function x(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){b(a,r,i,o,s,`next`,e)}function s(e){b(a,r,i,o,s,`throw`,e)}o(void 0)})}}function S(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new C(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function C(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return C=function(e){this.s=e,this.n=e.next},C.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new C(e)}const w=new WeakMap;function T(e){return e.getMenuConfig(`uploadImage`)}function E(e){let t=w.get(e);if(t!=null)return t;let
|
|
1
|
+
import{i18nAddResources as e,t}from"@wangeditor-next/core";import{insertImageNode as n,isInsertImageMenuDisabled as r}from"@wangeditor-next/basic-modules";import i,{append as a,click as o,hide as s,on as c,remove as l,val as u}from"dom7";import{createUploader as d}from"@wangeditor-next/core/upload";e(`en`,{uploadImgModule:{uploadImage:`Upload Image`,uploadError:`{{fileName}} upload error`}}),e(`zh-CN`,{uploadImgModule:{uploadImage:`上传图片`,uploadError:`{{fileName}} 上传出错`}});function f(){return{server:``,fieldName:`wangeditor-uploaded-image`,maxFileSize:2*1024*1024,maxNumberOfFiles:100,allowedFileTypes:[`image/*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:10*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{console.error(`'${e.name}' upload failed`,t)},onError:(e,t,n)=>{console.error(`'${e.name}' upload error`,n)},base64LimitSize:0,insertAsBlock:!1}}a&&(i.fn.append=a),c&&(i.fn.on=c),l&&(i.fn.remove=l),u&&(i.fn.val=u),o&&(i.fn.click=o),s&&(i.fn.hide=s);var p=i;function m(e){"@babel/helpers - typeof";return m=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},m(e)}function h(e,t){if(m(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(m(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function g(e){var t=h(e,`string`);return m(t)==`symbol`?t:t+``}function _(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function x(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){b(a,r,i,o,s,`next`,e)}function s(e){b(a,r,i,o,s,`throw`,e)}o(void 0)})}}function S(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new C(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function C(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return C=function(e){this.s=e,this.n=e.next},C.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new C(e)}const w=new WeakMap;function T(e){return e.getMenuConfig(`uploadImage`)}const E=new WeakMap;function D(e,t,r,i){let{insertAsBlock:a}=T(e),o=()=>n(e,t,r,i,{block:!!a}),s=E.get(e),c=s?s.then(o):o(),l=c.catch(()=>void 0).then(()=>{E.get(e)===l&&E.delete(e)});return E.set(e,l),c}function O(e){let t=w.get(e);if(t!=null)return t;let n=T(e),{onSuccess:r,onProgress:i,onFailed:a,customInsert:o,onError:s}=n;return t=d(y(y({},n),{},{onProgress:t=>{e.showProgressBar(t),i&&i(t)},onSuccess:(t,n)=>{if(o){o(n,(t,n,r)=>D(e,t,n,r)),r(t,n);return}let{errno:i=1,data:s={}}=n;if(i!==0){a(t,n);return}if(Array.isArray(s))s.forEach(t=>{let{url:n=``,alt:r=``,href:i=``}=t;D(e,n,r,i)});else{let{url:t=``,alt:n=``,href:r=``}=s;D(e,t,n,r)}r(t,n)},onError:(e,t,n)=>{s(e,t,n)}}),e),w.set(e,t),t}function k(e,t){return A.apply(this,arguments)}function A(){return A=x(function*(e,t){return new Promise(n=>{let r=new FileReader;r.readAsDataURL(t),r.onload=()=>{let{result:i}=r;if(!i)return;let a=i.toString(),o=a.indexOf(`data:image`)===0?``:a;D(e,a,t.name,o),n(`ok`)}})}),A.apply(this,arguments)}function j(e,t){return M.apply(this,arguments)}function M(){return M=x(function*(e,t){let n=O(e),r=t.map(e=>({name:e.name,type:e.type,size:e.size,data:e}));n.addFiles(r),yield n.upload()}),M.apply(this,arguments)}function N(e,t){return P.apply(this,arguments)}function P(){return P=x(function*(e,t){if(t==null)return;let n=Array.prototype.slice.call(t),{customUpload:r,base64LimitSize:i}=T(e),a=[];var o=!1,s=!1,c;try{for(var l=S(n),u;o=!(u=yield l.next()).done;o=!1){let t=u.value;{let n=t.size;i&&n<=i?yield k(e,t):r?yield r(t,(t,n,r)=>D(e,t,n,r),e):a.push(t)}}}catch(e){s=!0,c=e}finally{try{o&&l.return!=null&&(yield l.return())}finally{if(s)throw c}}a.length>0&&(yield j(e,a))}),P.apply(this,arguments)}var F=class{constructor(){this.title=t(`uploadImgModule.uploadImage`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z"></path></svg>`,this.tag=`button`}getValue(e){return``}isActive(e){return!1}isDisabled(e){return r(e)}getMenuConfig(e){return e.getMenuConfig(`uploadImage`)}exec(e,t){let{allowedFileTypes:n=[],customBrowseAndUpload:r}=this.getMenuConfig(e);if(r){r((t,n,r)=>D(e,t,n,r));return}let i=``;n.length>0&&(i=`accept="${n.join(`, `)}"`);let a=p(`body`),o=p(`<input type="file" ${i} multiple/>`);o.hide(),a.append(o),o.click(),o.on(`change`,()=>{let t=o[0].files;N(e,t)})}};const I={key:`uploadImage`,factory(){return new F},config:f()};function L(e){let{insertData:t}=e,n=e;return n.insertData=i=>{if(r(n)){t(i);return}if(i.getData(`text/plain`)){t(i);return}let{files:a}=i;if(a.length<=0){t(i);return}Array.prototype.slice.call(a).some(e=>{let[t]=e.type.split(`/`);return t===`image`})?N(e,a):t(i)},n}var R={menus:[I],editorPlugin:L};export{R as default};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["uploadImgModule","uploadImage","uploadError","uploadImgModule","uploadImage","uploadError","i18nAddResources","enResources","zhResources","genUploadImageConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","file","res","console","error","name","onError","err","base64LimitSize","UPLOAD_IMAGE_SVG","$","append","click","hide","on","remove","val","fn","insertImageNode","createUploader","EDITOR_TO_UPLOADER_MAP","WeakMap","getMenuConfig","editor","getUploader","uploader","get","menuConfig","onSuccess","onProgress","onFailed","customInsert","onError","successHandler","file","res","src","alt","href","errno","data","Array","isArray","forEach","item","url","progressHandler","progress","showProgressBar","errorHandler","err","set","insertBase64","Promise","resolve","reader","FileReader","readAsDataURL","onload","result","toString","indexOf","name","uploadFile","files","uploadList","map","type","size","addFiles","upload","fileList","prototype","slice","call","customUpload","base64LimitSize","uploadFileList","push","length","insertImageNode","isInsertImageMenuDisabled","t","UPLOAD_IMAGE_SVG","$","uploadImages","UploadImage","title","iconSvg","tag","getValue","_editor","isActive","isDisabled","editor","getMenuConfig","exec","_value","allowedFileTypes","customBrowseAndUpload","src","alt","href","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","genUploadImageConfig","UploadImageMenu","uploadImageMenuConf","key","factory","config","isInsertImageMenuDisabled","uploadImages","withUploadImage","editor","insertData","newEditor","data","text","getData","files","length","fileList","Array","prototype","slice","call","hasImageFiles","some","file","mime","type","split","uploadImageMenuConf","withUploadImage","uploadImage","menus","editorPlugin","wangEditorUploadImageModule"],"sources":["../src/locale/en.ts","../src/locale/zh-CN.ts","../src/locale/index.ts","../src/module/menu/config.ts","../src/constants/svg.ts","../src/utils/dom.ts","../src/module/upload-images.ts","../src/module/menu/UploadImageMenu.ts","../src/module/menu/index.ts","../src/module/plugin.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: 'Upload Image',\n uploadError: '{{fileName}} upload error',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: '上传图片',\n uploadError: '{{fileName}} 上传出错',\n },\n}\n","/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description upload image config\n * @author wangfupeng\n */\n\nimport { IUploadImageConfig } from '@wangeditor-next/core'\n\n// 生成默认配置\nexport function genUploadImageConfig(): IUploadImageConfig {\n return {\n server: '', // server API 地址,需用户配置\n\n fieldName: 'wangeditor-uploaded-image', // formData 中,文件的 key\n maxFileSize: 2 * 1024 * 1024, // 2M\n maxNumberOfFiles: 100, // 最多上传 xx 张图片\n allowedFileTypes: ['image/*'],\n meta: {\n // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。\n // 例如:token: 'xxxxx', x: 100\n },\n metaWithUrl: false,\n // headers: {\n // // 自定义 http headers\n // // 例如:Accept: 'text/x-json', a: 100,\n // },\n withCredentials: false,\n timeout: 10 * 1000, // 10s\n\n onBeforeUpload: (files: any) => files, // 返回 false 则终止上传\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (file: any, res: any) => {\n console.error(`'${file.name}' upload failed`, res)\n },\n onError: (file: any, err: any, res: any) => {\n /* on error */\n /* on timeout */\n console.error(`'${file.name}' upload error`, res)\n },\n\n // 自定义插入图片,用户配置\n // customInsert: (res, insertFn) => {},\n\n // 自定义上传图片,用户配置\n // customUpload: (file, insertFn) => {},\n\n // 自定义上传适配器,默认仍使用内置 Uppy\n // uploadAdapter: ({ config, editor }) => ({ addFiles() {}, upload: async () => {} }),\n\n // 小于 xxx 就插入 base64\n base64LimitSize: 0,\n\n // 自定义选择,并上传图片,如:图床 (用户配置)\n // customBrowseAndUpload: insertFn => {},\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 上传图片\nexport const UPLOAD_IMAGE_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z\"></path></svg>'\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on, remove, val,\n} from 'dom7'\n\nexport type { Dom7Array } from 'dom7'\n\nif (append) { $.fn.append = append }\nif (on) { $.fn.on = on }\nif (remove) { $.fn.remove = remove }\nif (val) { $.fn.val = val }\nif (click) { $.fn.click = click }\nif (hide) { $.fn.hide = hide }\n\nexport default $\n","/**\n * @description 上传文件\n * @author wangfupeng\n */\n\nimport { insertImageNode } from '@wangeditor-next/basic-modules'\nimport {\n IDomEditor, IUploader,\n IUploadFile, IUploadResultFile,\n} from '@wangeditor-next/core'\nimport { createUploader } from '@wangeditor-next/core/upload'\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, IUploader>()\n\nfunction getMenuConfig(editor: IDomEditor) {\n return editor.getMenuConfig('uploadImage')\n}\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor): IUploader {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getMenuConfig(editor)\n const {\n onSuccess, onProgress, onFailed, customInsert, onError,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: IUploadResultFile, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url, alt, href } } —— 注意,旧版的 data 是数组,要兼容一下\n // 失败:{ errno: !0, message: '失败信息' }\n\n if (customInsert) {\n // 用户自定义插入图片,此时 res 格式可能不符合预期\n customInsert(res, (src, alt, href) => insertImageNode(editor, src, alt, href))\n // success 回调\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res\n\n if (errno !== 0) {\n // failed 回调\n onFailed(file, res)\n return\n }\n\n if (Array.isArray(data)) {\n // 返回的数组(旧版的,兼容一下)\n data.forEach((item: { url: string; alt?: string; href?: string }) => {\n const { url = '', alt = '', href = '' } = item\n // 使用 basic-module 的 insertImageNode 方法插入图片,其中有用户配置的校验和 callback\n\n insertImageNode(editor, url, alt, href)\n })\n } else {\n // 返回的对象\n const { url = '', alt = '', href = '' } = data\n\n insertImageNode(editor, url, alt, href)\n }\n\n // success 回调\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n // 回调函数\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n // 回调函数\n onError(file, err, res)\n }\n\n uploader = createUploader({\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n }, editor)\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 插入 base64 格式\n * @param editor editor\n * @param file file\n */\nasync function insertBase64(editor: IDomEditor, file: File) {\n return new Promise(resolve => {\n const reader = new FileReader()\n\n reader.readAsDataURL(file)\n reader.onload = () => {\n const { result } = reader\n\n if (!result) { return }\n const src = result.toString()\n const href = src.indexOf('data:image') === 0 ? '' : src // base64 格式则不设置 href\n\n insertImageNode(editor, src, file.name, href)\n\n resolve('ok')\n }\n })\n}\n\n/**\n * 上传图片文件\n * @param editor editor\n * @param file file\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList: IUploadFile[] = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传图片\n * @param editor editor\n * @param files files\n */\nexport default async function (editor: IDomEditor, files: FileList | null) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files)\n\n // 获取菜单配置\n const { customUpload, base64LimitSize } = getMenuConfig(editor)\n\n const uploadFileList : File[] = []\n // 按顺序上传\n\n for await (const file of fileList) {\n const size = file.size // size kb\n\n if (base64LimitSize && size <= base64LimitSize) {\n // 允许 base64 ,而且 size 在 base64 限制之内,则插入 base64 格式\n await insertBase64(editor, file)\n } else if (customUpload) {\n // 自定义上传\n await customUpload(file, (src, alt, href) => insertImageNode(editor, src, alt, href), editor)\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n // 默认上传\n if (uploadFileList.length > 0) { await uploadFile(editor, uploadFileList) }\n}\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { insertImageNode, isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport {\n IButtonMenu, IDomEditor, t,\n} from '@wangeditor-next/core'\n\nimport { UPLOAD_IMAGE_SVG } from '../../constants/svg'\nimport $ from '../../utils/dom'\nimport uploadImages from '../upload-images'\n\nclass UploadImage implements IButtonMenu {\n readonly title = t('uploadImgModule.uploadImage')\n\n readonly iconSvg = UPLOAD_IMAGE_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 插入菜单,不需要 value\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n isDisabled(editor: IDomEditor): boolean {\n return isInsertImageMenuDisabled(editor)\n }\n\n private getMenuConfig(editor: IDomEditor) {\n // 获取配置,见 `./config.js`\n return editor.getMenuConfig('uploadImage')\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const { allowedFileTypes = [], customBrowseAndUpload } = this.getMenuConfig(editor)\n\n // 自定义选择图片,并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((src, alt, href) => insertImageNode(editor, src, alt, href))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadImages(editor, files) // 上传文件\n })\n }\n}\n\nexport default UploadImage\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { genUploadImageConfig } from './config'\nimport UploadImageMenu from './UploadImageMenu'\n\nexport const uploadImageMenuConf = {\n key: 'uploadImage',\n factory() {\n return new UploadImageMenu()\n },\n\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadImageConfig(),\n}\n","/**\n * @description editor 插件,重写 editor API\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport { IDomEditor } from '@wangeditor-next/core'\n\nimport uploadImages from './upload-images'\n\nfunction withUploadImage<T extends IDomEditor>(editor: T): T {\n const { insertData } = editor\n const newEditor = editor\n\n // 重写 insertData - 粘贴图片、拖拽上传图片\n newEditor.insertData = (data: DataTransfer) => {\n if (isInsertImageMenuDisabled(newEditor)) {\n insertData(data)\n return\n }\n\n // 如有 text ,则优先粘贴 text\n const text = data.getData('text/plain')\n\n if (text) {\n insertData(data)\n return\n }\n\n // 获取文件\n const { files } = data\n\n if (files.length <= 0) {\n insertData(data)\n return\n }\n\n // 判断是否有图片文件(可能是其他类型的文件)\n const fileList = Array.prototype.slice.call(files)\n const hasImageFiles = fileList.some(file => {\n const [mime] = file.type.split('/')\n\n return mime === 'image'\n })\n\n if (hasImageFiles) {\n // 有图片文件,则上传图片\n uploadImages(editor, files)\n } else {\n // 如果没有, 则继续 insertData\n insertData(data)\n }\n }\n\n // 返回 editor ,重要!\n return newEditor\n}\n\nexport default withUploadImage\n","/**\n * @description uploadImage module\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport { uploadImageMenuConf } from './menu/index'\nimport withUploadImage from './plugin'\n\nconst uploadImage: Partial<IModuleConf> = {\n menus: [uploadImageMenuConf],\n editorPlugin: withUploadImage,\n}\n\nexport default uploadImage\n","/**\n * @description upload image\n * @author wangfupeng\n */\n\nimport './assets/index.less'\n// 配置多语言\nimport './locale/index'\n\nimport wangEditorUploadImageModule from './module/index'\n\nexport default wangEditorUploadImageModule\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["uploadImgModule","uploadImage","uploadError","uploadImgModule","uploadImage","uploadError","i18nAddResources","enResources","zhResources","genUploadImageConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","file","res","console","error","name","onError","err","base64LimitSize","insertAsBlock","UPLOAD_IMAGE_SVG","$","append","click","hide","on","remove","val","fn","insertImageNode","createUploader","EDITOR_TO_UPLOADER_MAP","WeakMap","getMenuConfig","editor","EDITOR_TO_INSERT_QUEUE_MAP","insertImage","src","alt","href","insertAsBlock","run","block","prev","get","task","then","tail","catch","undefined","delete","set","getUploader","uploader","menuConfig","onSuccess","onProgress","onFailed","customInsert","onError","successHandler","file","res","errno","data","Array","isArray","forEach","item","url","progressHandler","progress","showProgressBar","errorHandler","err","insertBase64","Promise","resolve","reader","FileReader","readAsDataURL","onload","result","toString","indexOf","name","uploadFile","files","uploadList","map","type","size","addFiles","upload","fileList","prototype","slice","call","customUpload","base64LimitSize","uploadFileList","push","length","isInsertImageMenuDisabled","t","UPLOAD_IMAGE_SVG","$","uploadImages","insertImage","UploadImage","title","iconSvg","tag","getValue","_editor","isActive","isDisabled","editor","getMenuConfig","exec","_value","allowedFileTypes","customBrowseAndUpload","src","alt","href","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","genUploadImageConfig","UploadImageMenu","uploadImageMenuConf","key","factory","config","isInsertImageMenuDisabled","uploadImages","withUploadImage","editor","insertData","newEditor","data","text","getData","files","length","fileList","Array","prototype","slice","call","hasImageFiles","some","file","mime","type","split","uploadImageMenuConf","withUploadImage","uploadImage","menus","editorPlugin","wangEditorUploadImageModule"],"sources":["../src/locale/en.ts","../src/locale/zh-CN.ts","../src/locale/index.ts","../src/module/menu/config.ts","../src/constants/svg.ts","../src/utils/dom.ts","../src/module/upload-images.ts","../src/module/menu/UploadImageMenu.ts","../src/module/menu/index.ts","../src/module/plugin.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description i18n en\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: 'Upload Image',\n uploadError: '{{fileName}} upload error',\n },\n}\n","/**\n * @description i18n zh-CN\n * @author wangfupeng\n */\n\nexport default {\n uploadImgModule: {\n uploadImage: '上传图片',\n uploadError: '{{fileName}} 上传出错',\n },\n}\n","/**\n * @description i18n entry\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/core'\n\nimport enResources from './en'\nimport zhResources from './zh-CN'\n\ni18nAddResources('en', enResources)\ni18nAddResources('zh-CN', zhResources)\n","/**\n * @description upload image config\n * @author wangfupeng\n */\n\nimport { IUploadImageConfig } from '@wangeditor-next/core'\n\n// 生成默认配置\nexport function genUploadImageConfig(): IUploadImageConfig {\n return {\n server: '', // server API 地址,需用户配置\n\n fieldName: 'wangeditor-uploaded-image', // formData 中,文件的 key\n maxFileSize: 2 * 1024 * 1024, // 2M\n maxNumberOfFiles: 100, // 最多上传 xx 张图片\n allowedFileTypes: ['image/*'],\n meta: {\n // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。\n // 例如:token: 'xxxxx', x: 100\n },\n metaWithUrl: false,\n // headers: {\n // // 自定义 http headers\n // // 例如:Accept: 'text/x-json', a: 100,\n // },\n withCredentials: false,\n timeout: 10 * 1000, // 10s\n\n onBeforeUpload: (files: any) => files, // 返回 false 则终止上传\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (file: any, res: any) => {\n console.error(`'${file.name}' upload failed`, res)\n },\n onError: (file: any, err: any, res: any) => {\n /* on error */\n /* on timeout */\n console.error(`'${file.name}' upload error`, res)\n },\n\n // 自定义插入图片,用户配置\n // customInsert: (res, insertFn) => {},\n\n // 自定义上传图片,用户配置\n // customUpload: (file, insertFn) => {},\n\n // 自定义上传适配器,默认仍使用内置 Uppy\n // uploadAdapter: ({ config, editor }) => ({ addFiles() {}, upload: async () => {} }),\n\n // 小于 xxx 就插入 base64\n base64LimitSize: 0,\n\n // 是否让每张上传的图片独占一行(默认 false,保持 inline 插入)\n insertAsBlock: false,\n\n // 自定义选择,并上传图片,如:图床 (用户配置)\n // customBrowseAndUpload: insertFn => {},\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n/**\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\n * 找不到再从 iconfont.com 搜索\n */\n\n// 上传图片\nexport const UPLOAD_IMAGE_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z\"></path></svg>'\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on, remove, val,\n} from 'dom7'\n\nexport type { Dom7Array } from 'dom7'\n\nif (append) { $.fn.append = append }\nif (on) { $.fn.on = on }\nif (remove) { $.fn.remove = remove }\nif (val) { $.fn.val = val }\nif (click) { $.fn.click = click }\nif (hide) { $.fn.hide = hide }\n\nexport default $\n","/**\n * @description 上传文件\n * @author wangfupeng\n */\n\nimport { insertImageNode } from '@wangeditor-next/basic-modules'\nimport {\n IDomEditor, IUploader,\n IUploadFile, IUploadResultFile,\n} from '@wangeditor-next/core'\nimport { createUploader } from '@wangeditor-next/core/upload'\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, IUploader>()\n\nfunction getMenuConfig(editor: IDomEditor) {\n return editor.getMenuConfig('uploadImage')\n}\n\n// 存储 editor 的图片插入队列,保证异步校验(checkImage / parseImageSrc)下仍按调用顺序插入\nconst EDITOR_TO_INSERT_QUEUE_MAP = new WeakMap<IDomEditor, Promise<unknown>>()\n\n/**\n * 插入图片,是否独占一行由 uploadImage.insertAsBlock 决定。\n * 同一个 editor 的插入会串行执行,避免后一张图片的异步钩子先完成而导致顺序错乱\n */\nexport function insertImage(editor: IDomEditor, src: string, alt?: string, href?: string) {\n const { insertAsBlock } = getMenuConfig(editor)\n const run = () => insertImageNode(editor, src, alt, href, { block: !!insertAsBlock })\n const prev = EDITOR_TO_INSERT_QUEUE_MAP.get(editor)\n // 队列空闲时立即执行;否则排在上一次插入之后\n const task = prev ? prev.then(run) : run()\n // 队列本身不受单次插入失败影响,完成后若无后续插入则清空\n const tail: Promise<unknown> = task\n .catch(() => undefined)\n .then(() => {\n if (EDITOR_TO_INSERT_QUEUE_MAP.get(editor) === tail) {\n EDITOR_TO_INSERT_QUEUE_MAP.delete(editor)\n }\n })\n\n EDITOR_TO_INSERT_QUEUE_MAP.set(editor, tail)\n\n return task\n}\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor): IUploader {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getMenuConfig(editor)\n const {\n onSuccess, onProgress, onFailed, customInsert, onError,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: IUploadResultFile, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url, alt, href } } —— 注意,旧版的 data 是数组,要兼容一下\n // 失败:{ errno: !0, message: '失败信息' }\n\n if (customInsert) {\n // 用户自定义插入图片,此时 res 格式可能不符合预期\n customInsert(res, (src, alt, href) => insertImage(editor, src, alt, href))\n // success 回调\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res\n\n if (errno !== 0) {\n // failed 回调\n onFailed(file, res)\n return\n }\n\n if (Array.isArray(data)) {\n // 返回的数组(旧版的,兼容一下)\n data.forEach((item: { url: string; alt?: string; href?: string }) => {\n const { url = '', alt = '', href = '' } = item\n // 使用 basic-module 的 insertImageNode 方法插入图片,其中有用户配置的校验和 callback\n\n insertImage(editor, url, alt, href)\n })\n } else {\n // 返回的对象\n const { url = '', alt = '', href = '' } = data\n\n insertImage(editor, url, alt, href)\n }\n\n // success 回调\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n // 回调函数\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n // 回调函数\n onError(file, err, res)\n }\n\n uploader = createUploader({\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n }, editor)\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 插入 base64 格式\n * @param editor editor\n * @param file file\n */\nasync function insertBase64(editor: IDomEditor, file: File) {\n return new Promise(resolve => {\n const reader = new FileReader()\n\n reader.readAsDataURL(file)\n reader.onload = () => {\n const { result } = reader\n\n if (!result) { return }\n const src = result.toString()\n const href = src.indexOf('data:image') === 0 ? '' : src // base64 格式则不设置 href\n\n insertImage(editor, src, file.name, href)\n\n resolve('ok')\n }\n })\n}\n\n/**\n * 上传图片文件\n * @param editor editor\n * @param file file\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList: IUploadFile[] = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传图片\n * @param editor editor\n * @param files files\n */\nexport default async function (editor: IDomEditor, files: FileList | null) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files)\n\n // 获取菜单配置\n const { customUpload, base64LimitSize } = getMenuConfig(editor)\n\n const uploadFileList : File[] = []\n // 按顺序上传\n\n for await (const file of fileList) {\n const size = file.size // size kb\n\n if (base64LimitSize && size <= base64LimitSize) {\n // 允许 base64 ,而且 size 在 base64 限制之内,则插入 base64 格式\n await insertBase64(editor, file)\n } else if (customUpload) {\n // 自定义上传\n await customUpload(file, (src, alt, href) => insertImage(editor, src, alt, href), editor)\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n // 默认上传\n if (uploadFileList.length > 0) { await uploadFile(editor, uploadFileList) }\n}\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport {\n IButtonMenu, IDomEditor, t,\n} from '@wangeditor-next/core'\n\nimport { UPLOAD_IMAGE_SVG } from '../../constants/svg'\nimport $ from '../../utils/dom'\nimport uploadImages, { insertImage } from '../upload-images'\n\nclass UploadImage implements IButtonMenu {\n readonly title = t('uploadImgModule.uploadImage')\n\n readonly iconSvg = UPLOAD_IMAGE_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 插入菜单,不需要 value\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n isDisabled(editor: IDomEditor): boolean {\n return isInsertImageMenuDisabled(editor)\n }\n\n private getMenuConfig(editor: IDomEditor) {\n // 获取配置,见 `./config.js`\n return editor.getMenuConfig('uploadImage')\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const { allowedFileTypes = [], customBrowseAndUpload } = this.getMenuConfig(editor)\n\n // 自定义选择图片,并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((src, alt, href) => insertImage(editor, src, alt, href))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadImages(editor, files) // 上传文件\n })\n }\n}\n\nexport default UploadImage\n","/**\n * @description upload image menu\n * @author wangfupeng\n */\n\nimport { genUploadImageConfig } from './config'\nimport UploadImageMenu from './UploadImageMenu'\n\nexport const uploadImageMenuConf = {\n key: 'uploadImage',\n factory() {\n return new UploadImageMenu()\n },\n\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadImageConfig(),\n}\n","/**\n * @description editor 插件,重写 editor API\n * @author wangfupeng\n */\n\nimport { isInsertImageMenuDisabled } from '@wangeditor-next/basic-modules'\nimport { IDomEditor } from '@wangeditor-next/core'\n\nimport uploadImages from './upload-images'\n\nfunction withUploadImage<T extends IDomEditor>(editor: T): T {\n const { insertData } = editor\n const newEditor = editor\n\n // 重写 insertData - 粘贴图片、拖拽上传图片\n newEditor.insertData = (data: DataTransfer) => {\n if (isInsertImageMenuDisabled(newEditor)) {\n insertData(data)\n return\n }\n\n // 如有 text ,则优先粘贴 text\n const text = data.getData('text/plain')\n\n if (text) {\n insertData(data)\n return\n }\n\n // 获取文件\n const { files } = data\n\n if (files.length <= 0) {\n insertData(data)\n return\n }\n\n // 判断是否有图片文件(可能是其他类型的文件)\n const fileList = Array.prototype.slice.call(files)\n const hasImageFiles = fileList.some(file => {\n const [mime] = file.type.split('/')\n\n return mime === 'image'\n })\n\n if (hasImageFiles) {\n // 有图片文件,则上传图片\n uploadImages(editor, files)\n } else {\n // 如果没有, 则继续 insertData\n insertData(data)\n }\n }\n\n // 返回 editor ,重要!\n return newEditor\n}\n\nexport default withUploadImage\n","/**\n * @description uploadImage module\n * @author wangfupeng\n */\n\nimport { IModuleConf } from '@wangeditor-next/core'\n\nimport { uploadImageMenuConf } from './menu/index'\nimport withUploadImage from './plugin'\n\nconst uploadImage: Partial<IModuleConf> = {\n menus: [uploadImageMenuConf],\n editorPlugin: withUploadImage,\n}\n\nexport default uploadImage\n","/**\n * @description upload image\n * @author wangfupeng\n */\n\nimport './assets/index.less'\n// 配置多语言\nimport './locale/index'\n\nimport wangEditorUploadImageModule from './module/index'\n\nexport default wangEditorUploadImageModule\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wangeditor-next/upload-image-module",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.6.0",
|
|
4
4
|
"description": "wangEditor upload-image module",
|
|
5
5
|
"author": "cycleccc <2991205548@qq.com>",
|
|
6
6
|
"type": "module",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"lodash.foreach": "^4.5.0",
|
|
42
42
|
"slate": "^0.124.0 || ^0.126.2",
|
|
43
43
|
"snabbdom": "^3.6.0",
|
|
44
|
-
"@wangeditor-next/basic-modules": "^6.
|
|
45
|
-
"@wangeditor-next/core": "^6.
|
|
44
|
+
"@wangeditor-next/basic-modules": "^6.6.0",
|
|
45
|
+
"@wangeditor-next/core": "^6.6.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {},
|
|
48
48
|
"scripts": {
|