UNPKG

@rickx/ckeditor5-upload-adapter

Version:
3 lines (2 loc) 2.13 kB
import{Plugin as t,FileRepository as e}from"ckeditor5";class s extends t{static get requires(){return[e]}static get pluginName(){return"CustomUploadAdapter"}init(){const t=this.editor.config.get("customUpload");t&&(t.onUpload?this.editor.plugins.get(e).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 t{static get requires(){return[e]}static get pluginName(){return"ImageUploadAdapter"}init(){const t=this.editor.config.get("imageUpload");t&&(t.uploadUrl?this.editor.plugins.get(e).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,!0),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||!1;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)}}export{s as CustomUploadAdapter,r as ImageUploadAdapter}; //# sourceMappingURL=index.js.map