@rickx/ckeditor5-upload-adapter
Version:
Upload adapter plugin for CKEditor5
14 lines (10 loc) • 2.67 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('ckeditor5')) :
typeof define === 'function' && define.amd ? define(['exports', 'ckeditor5'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rickx/ckeditor5-upload-adapter"] = {}, global.CKEDITOR));
})(this, (function (exports, ckeditor5) { 'use strict';
class s extends ckeditor5.Plugin{static get requires(){return [ckeditor5.FileRepository]}static get pluginName(){return "CustomUploadAdapter"}init(){const t=this.editor.config.get("customUpload");t&&(t.onUpload?this.editor.plugins.get(ckeditor5.FileRepository).createUploadAdapter=e=>new o(e,t):console.warn("custom-upload-adapter-missing-onupload"));}}let o=class{loader;options;constructor(t,e){this.loader=t,this.options=e;}async upload(){const t=await this.loader.file,e=await this.options.onUpload(t),s=e.url?{default:e.url}:e.urls;return {...e,urls:s}}abort(){this.options.onAbort&&this.options.onAbort();}};class r extends ckeditor5.Plugin{static get requires(){return [ckeditor5.FileRepository]}static get pluginName(){return "ImageUploadAdapter"}init(){const t=this.editor.config.get("imageUpload");t&&(t.uploadUrl?this.editor.plugins.get(ckeditor5.FileRepository).createUploadAdapter=e=>new i(e,t):console.warn("image-upload-adapter-missing-uploadurl"));}}class i{loader;options;xhr;constructor(t,e){this.loader=t,this.options=e;}async upload(){const t=await this.loader.file;return new Promise(((e,s)=>{this._initRequest(),this._initListeners(e,s,t),this._sendRequest(t);}))}abort(){this.xhr&&this.xhr.abort();}_initRequest(){const t=this.xhr=new XMLHttpRequest;t.open("POST",this.options.uploadUrl,true),t.responseType="json";}_initListeners(t,e,s){const o=this.xhr,r=this.loader,i=`Couldn't upload file: ${s.name}.`;o.addEventListener("error",(()=>e(i))),o.addEventListener("abort",(()=>e())),o.addEventListener("load",(()=>{const s=o.response;if(!s||s.error)return e(s&&s.error&&s.error.message?s.error.message:i);const r=s.url?{default:s.url}:s.urls;t({...s,urls:r});})),o.upload&&o.upload.addEventListener("progress",(t=>{t.lengthComputable&&(r.uploadTotal=t.total,r.uploaded=t.loaded);}));}_sendRequest(t){const e=this.options.headers||{},s=this.options.params||{},o=this.options.withCredentials||false;for(const t of Object.keys(e))this.xhr.setRequestHeader(t,e[t]);this.xhr.withCredentials=o;const r=new FormData;r.append("upload",t);for(const t of Object.keys(s))s[t]&&r.append(t,s[t]);this.xhr.send(r);}}
exports.CustomUploadAdapter = s;
exports.ImageUploadAdapter = r;
}));
//# sourceMappingURL=index.umd.js.map