@ckeditor/ckeditor5-ckbox 44.3.0 → 45.0.0-alpha.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/LICENSE.md +1 -0
- package/build/ckbox.js +1 -1
- package/build/translations/be.js +1 -0
- package/ckeditor5-metadata.json +2 -2
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/translations/be.d.ts +8 -0
- package/dist/translations/be.js +5 -0
- package/dist/translations/be.umd.js +11 -0
- package/lang/translations/be.po +44 -0
- package/package.json +11 -10
- package/src/ckboxcommand.js +22 -22
- package/src/ckboximageedit/ckboximageeditcommand.js +25 -17
- package/src/ckboximageedit/ckboximageeditui.js +2 -2
- package/src/ckboxui.js +7 -6
- package/src/ckboxuploadadapter.js +24 -0
- package/src/ckboxutils.d.ts +5 -0
- package/src/ckboxutils.js +26 -0
- package/src/utils.js +2 -3
- package/theme/icons/ckbox-image-edit.svg +0 -1
package/LICENSE.md
CHANGED
@@ -19,6 +19,7 @@ Where not otherwise indicated, all CKEditor content is authored by CKSource engi
|
|
19
19
|
The following libraries are included in CKEditor under the [MIT license](https://opensource.org/licenses/MIT):
|
20
20
|
|
21
21
|
* blurhash - Copyright (c) 2018 Wolt Enterprises (MIT license).
|
22
|
+
* es-toolkit - Copyright (c) 2024 Viva Republica, Inc.
|
22
23
|
|
23
24
|
Trademarks
|
24
25
|
----------
|
package/build/ckbox.js
CHANGED
@@ -2,4 +2,4 @@
|
|
2
2
|
/*!
|
3
3
|
* @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
|
4
4
|
* For licensing, see LICENSE.md.
|
5
|
-
*/(()=>{var e={21:e=>{"use strict";e.exports=function(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}},51:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},128:e=>{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},237:e=>{"use strict";e.exports=CKEditor5.dll},260:(e,t,n)=>{e.exports=n(237)("./src/upload.js")},311:(e,t,n)=>{e.exports=n(237)("./src/ui.js")},584:(e,t,n)=>{e.exports=n(237)("./src/utils.js")},591:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;break}return n}function r(e,r){for(var i={},s=[],a=0;a<e.length;a++){var c=e[a],l=r.base?c[0]+r.base:c[0],u=i[l]||0,d="".concat(l," ").concat(u);i[l]=u+1;var g=n(d),h={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==g)t[g].references++,t[g].updater(h);else{var p=o(h,r);r.byIndex=a,t.splice(a,0,{identifier:d,updater:p,references:1})}s.push(d)}return s}function o(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,o){var i=r(e=e||[],o=o||{});return function(e){e=e||[];for(var s=0;s<i.length;s++){var a=n(i[s]);t[a].references--}for(var c=r(e,o),l=0;l<i.length;l++){var u=n(i[l]);0===t[u].references&&(t[u].updater(),t.splice(u,1))}i=c}}},639:e=>{"use strict";var t,n=(t=[],function(e,n){return t[e]=n,t.filter(Boolean).join("\n")});function r(e,t,r,o){var i;if(r)i="";else{i="",o.supports&&(i+="@supports (".concat(o.supports,") {")),o.media&&(i+="@media ".concat(o.media," {"));var s=void 0!==o.layer;s&&(i+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),i+=o.css,s&&(i+="}"),o.media&&(i+="}"),o.supports&&(i+="}")}if(e.styleSheet)e.styleSheet.cssText=n(t,i);else{var a=document.createTextNode(i),c=e.childNodes;c[t]&&e.removeChild(c[t]),c.length?e.insertBefore(a,c[t]):e.appendChild(a)}}var o={singleton:null,singletonCounter:0};e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=o.singletonCounter++,n=o.singleton||(o.singleton=e.insertStyleElement(e));return{update:function(e){r(n,t,!1,e)},remove:function(e){r(n,t,!0,e)}}}},758:e=>{"use strict";e.exports=function(e){return e[1]}},782:(e,t,n)=>{e.exports=n(237)("./src/core.js")},783:(e,t,n)=>{e.exports=n(237)("./src/engine.js")},935:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(s[c]=!0)}for(var l=0;l<e.length;l++){var u=[].concat(e[l]);r&&s[u[0]]||(void 0!==i&&(void 0===u[5]||(u[1]="@layer".concat(u[5].length>0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=i),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),t.push(u))}},t}},957:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(758),o=n.n(r),i=n(935),s=n.n(i)()(o());s.push([e.id,':root{--ck-image-processing-highlight-color:#f9fafa;--ck-image-processing-background-color:#e3e5e8}.ck.ck-editor__editable .image.image-processing{position:relative}.ck.ck-editor__editable .image.image-processing:before{animation:ck-image-processing-animation 2s linear infinite;background:linear-gradient(90deg,var(--ck-image-processing-background-color),var(--ck-image-processing-highlight-color),var(--ck-image-processing-background-color));background-size:200% 100%;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.ck.ck-editor__editable .image.image-processing img{height:100%}@keyframes ck-image-processing-animation{0%{background-position:200% 0}to{background-position:-200% 0}}',""]);const a=s}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{CKBox:()=>U,CKBoxEditing:()=>O,CKBoxImageEdit:()=>Mn,CKBoxImageEditEditing:()=>xn,CKBoxImageEditUI:()=>In,CKBoxUI:()=>o});var e=n(782),t=n(311);class o extends e.Plugin{static get pluginName(){return"CKBoxUI"}static get isOfficialPlugin(){return!0}afterInit(){const e=this.editor;e.commands.get("ckbox")&&(e.ui.componentFactory.add("ckbox",(()=>this._createFileToolbarButton())),e.ui.componentFactory.add("menuBar:ckbox",(()=>this._createFileMenuBarButton())),e.plugins.has("ImageInsertUI")&&e.plugins.get("ImageInsertUI").registerIntegration({name:"assetManager",observable:()=>e.commands.get("ckbox"),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?"insertOnly":"insertNested")}))}_createButton(e){const t=this.editor,n=new e(t.locale),r=t.commands.get("ckbox");return n.bind("isOn","isEnabled").to(r,"value","isEnabled"),n.on("execute",(()=>{t.execute("ckbox")})),n}_createFileToolbarButton(){const n=this.editor.locale.t,r=this._createButton(t.ButtonView);return r.icon=e.icons.browseFiles,r.label=n("Open file manager"),r.tooltip=!0,r}_createImageToolbarButton(){const n=this.editor.locale.t,r=this.editor.plugins.get("ImageInsertUI"),o=this._createButton(t.ButtonView);return o.icon=e.icons.imageAssetManager,o.bind("label").to(r,"isImageSelected",(e=>n(e?"Replace image with file manager":"Insert image with file manager"))),o.tooltip=!0,o}_createImageDropdownButton(){const n=this.editor.locale.t,r=this.editor.plugins.get("ImageInsertUI"),o=this._createButton(t.ButtonView);return o.icon=e.icons.imageAssetManager,o.withText=!0,o.bind("label").to(r,"isImageSelected",(e=>n(e?"Replace with file manager":"Insert with file manager"))),o.on("execute",(()=>{r.dropdownView.isOpen=!1})),o}_createFileMenuBarButton(){const n=this.editor.locale.t,r=this._createButton(t.MenuBarMenuListItemButtonView);return r.icon=e.icons.browseFiles,r.withText=!0,r.label=n("File"),r}_createImageMenuBarButton(n){const r=this.editor.locale.t,o=this.editor.locale.t,i=this._createButton(t.MenuBarMenuListItemButtonView);switch(i.icon=e.icons.imageAssetManager,i.withText=!0,n){case"insertOnly":i.label=r("Image");break;case"insertNested":i.label=o("With file manager")}return i}}var i=n(783),s=n(584),a=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],c=e=>{let t=0;for(let n=0;n<e.length;n++){let r=e[n];t=83*t+a.indexOf(r)}return t},l=e=>{let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},u=e=>{let t=Math.max(0,Math.min(1,e));return t<=.0031308?Math.trunc(12.92*t*255+.5):Math.trunc(255*(1.055*Math.pow(t,.4166666666666667)-.055)+.5)},d=(e,t)=>(e=>e<0?-1:1)(e)*Math.pow(Math.abs(e),t),g=class extends Error{constructor(e){super(e),this.name="ValidationError",this.message=e}},h=e=>{if(!e||e.length<6)throw new g("The blurhash string must be at least 6 characters");let t=c(e[0]),n=Math.floor(t/9)+1,r=t%9+1;if(e.length!==4+2*r*n)throw new g(`blurhash length mismatch: length is ${e.length} but it should be ${4+2*r*n}`)},p=e=>{let t=e>>8&255,n=255&e;return[l(e>>16),l(t),l(n)]},m=(e,t)=>{let n=Math.floor(e/361),r=Math.floor(e/19)%19,o=e%19;return[d((n-9)/9,2)*t,d((r-9)/9,2)*t,d((o-9)/9,2)*t]},f=(e,t,n,r)=>{h(e),r|=1;let o=c(e[0]),i=Math.floor(o/9)+1,s=o%9+1,a=(c(e[1])+1)/166,l=new Array(s*i);for(let t=0;t<l.length;t++)if(0===t){let n=c(e.substring(2,6));l[t]=p(n)}else{let n=c(e.substring(4+2*t,6+2*t));l[t]=m(n,a*r)}let d=4*t,g=new Uint8ClampedArray(d*n);for(let e=0;e<n;e++)for(let r=0;r<t;r++){let o=0,a=0,c=0;for(let u=0;u<i;u++)for(let i=0;i<s;i++){let d=Math.cos(Math.PI*r*i/t)*Math.cos(Math.PI*e*u/n),g=l[i+u*s];o+=g[0]*d,a+=g[1]*d,c+=g[2]*d}let h=u(o),p=u(a),m=u(c);g[4*r+0+e*d]=h,g[4*r+1+e*d]=p,g[4*r+2+e*d]=m,g[4*r+3+e*d]=255}return g};function b(e){const t=[];let n=0;for(const r in e){const o=parseInt(r,10);isNaN(o)||(o>n&&(n=o),t.push(`${e[r]} ${r}w`))}const r=[{srcset:t.join(","),sizes:`(max-width: ${n}px) 100vw, ${n}px`,type:"image/webp"}];return{imageFallbackUrl:e.default,imageSources:r}}function v({url:e,method:t="GET",data:n,onUploadProgress:r,signal:o,authorization:i}){const s=new XMLHttpRequest;s.open(t,e.toString()),s.setRequestHeader("Authorization",i),s.setRequestHeader("CKBox-Version","CKEditor 5"),s.responseType="json";const a=()=>{s.abort()};return new Promise(((e,t)=>{o.throwIfAborted(),o.addEventListener("abort",a),s.addEventListener("loadstart",(()=>{o.addEventListener("abort",a)})),s.addEventListener("loadend",(()=>{o.removeEventListener("abort",a)})),s.addEventListener("error",(()=>{t()})),s.addEventListener("abort",(()=>{t()})),s.addEventListener("load",(()=>{const n=s.response;if(!n||n.statusCode>=400)return t(n&&n.message);e(n)})),r&&s.upload.addEventListener("progress",(e=>{r(e)})),s.send(n)}))}const w={"image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff"};class _ extends e.Command{constructor(e){super(e),this._chosenAssets=new Set,this._wrapper=null,this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire("ckbox:open")}_getValue(){return null!==this._wrapper}_checkEnabled(){const e=this.editor.commands.get("insertImage"),t=this.editor.commands.get("link");return!(!e.isEnabled&&!t.isEnabled)}_prepareOptions(){const e=this.editor.config.get("ckbox"),t=e.dialog,n=e.categories,r=e.view,o=e.upload;return{theme:e.theme,language:e.language,tokenUrl:e.tokenUrl,serviceOrigin:e.serviceOrigin,forceDemoLabel:e.forceDemoLabel,choosableFileExtensions:e.choosableFileExtensions,assets:{onChoose:e=>this.fire("ckbox:choose",e)},dialog:{onClose:()=>this.fire("ckbox:close"),width:t&&t.width,height:t&&t.height},categories:n&&{icons:n.icons},view:r&&{openLastView:r.openLastView,startupFolderId:r.startupFolderId,startupCategoryId:r.startupCategoryId,hideMaximizeButton:r.hideMaximizeButton},upload:o&&{componentsHideTimeout:o.componentsHideTimeout,dialogMinimizeTimeout:o.dialogMinimizeTimeout}}}_initListeners(){const e=this.editor,t=e.model,n=!e.config.get("ckbox.ignoreDataId"),r=e.config.get("ckbox.downloadableFiles");this.on("ckbox",(()=>{this.refresh()}),{priority:"low"}),this.on("ckbox:open",(()=>{this.isEnabled&&!this.value&&(this._wrapper=(0,s.createElement)(document,"div",{class:"ck ckbox-wrapper"}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))})),this.on("ckbox:close",(()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,e.editing.view.focus())})),this.on("ckbox:choose",((o,i)=>{if(!this.isEnabled)return;const s=e.commands.get("insertImage"),a=e.commands.get("link"),c=function({downloadableFilesConfig:e,assets:t,isImageAllowed:n,isLinkAllowed:r}){return t.map((t=>function(e){const t=e.data.metadata;if(!t)return!1;return t.width&&t.height}(t)?{id:t.data.id,type:"image",attributes:y(t)}:{id:t.data.id,type:"link",attributes:k(t,e)})).filter((e=>"image"===e.type?n:r))}({assets:i,downloadableFilesConfig:r,isImageAllowed:s.isEnabled,isLinkAllowed:a.isEnabled}),l=c.length;0!==l&&(t.change((e=>{for(const t of c){const r=t===c[l-1],o=1===l;this._insertAsset(t,r,e,o),n&&(setTimeout((()=>this._chosenAssets.delete(t)),1e3),this._chosenAssets.add(t))}})),e.editing.view.focus())})),this.listenTo(e,"destroy",(()=>{this.fire("ckbox:close"),this._chosenAssets.clear()}))}_insertAsset(e,t,n,r){const o=this.editor.model.document.selection;n.removeSelectionAttribute("linkHref"),"image"===e.type?this._insertImage(e):this._insertLink(e,n,r),t||n.setSelection(o.getLastPosition())}_insertImage(e){const t=this.editor,{imageFallbackUrl:n,imageSources:r,imageTextAlternative:o,imageWidth:i,imageHeight:s,imagePlaceholder:a}=e.attributes;t.execute("insertImage",{source:{src:n,sources:r,alt:o,width:i,height:s,...a?{placeholder:a}:null}})}_insertLink(e,t,n){const r=this.editor,o=r.model,i=o.document.selection,{linkName:a,linkHref:c}=e.attributes;if(i.isCollapsed){const e=(0,s.toMap)(i.getAttributes()),l=t.createText(a,e);if(!n){const e=i.getLastPosition(),n=e.parent;"paragraph"===n.name&&n.isEmpty||r.execute("insertParagraph",{position:e});const s=o.insertContent(l);return t.setSelection(s),void r.execute("link",c)}const u=o.insertContent(l);t.setSelection(u)}r.execute("link",c)}}function y(e){const{imageFallbackUrl:t,imageSources:n}=b(e.data.imageUrls),{description:r,width:o,height:i,blurHash:s}=e.data.metadata,a=function(e){if(e)try{const t="32px",n=document.createElement("canvas");n.setAttribute("width",t),n.setAttribute("height",t);const r=n.getContext("2d");if(!r)return;const o=r.createImageData(32,32),i=f(e,32,32);return o.data.set(i),r.putImageData(o,0,0),n.toDataURL()}catch(e){return}}(s);return{imageFallbackUrl:t,imageSources:n,imageTextAlternative:r||"",imageWidth:o,imageHeight:i,...a?{imagePlaceholder:a}:null}}function k(e,t){return{linkName:e.data.name,linkHref:x(e,t)}}function x(e,t){const n=new URL(e.data.url);return function(e,t){if("function"==typeof t)return t(e);return!0}(e,t)&&n.searchParams.set("download","true"),n.toString()}var I=n(260);class A extends e.Plugin{static get pluginName(){return"CKBoxUtils"}static get isOfficialPlugin(){return!0}static get requires(){return["CloudServices"]}init(){const e=this.editor,t=!!e.config.get("ckbox"),n=!!window.CKBox;if(!t&&!n)return;e.config.define("ckbox",{serviceOrigin:"https://api.ckbox.io",defaultUploadCategories:null,ignoreDataId:!1,language:e.locale.uiLanguage,theme:"lark",tokenUrl:e.config.get("cloudServices.tokenUrl")});const r=e.plugins.get("CloudServices"),o=e.config.get("cloudServices.tokenUrl"),i=e.config.get("ckbox.tokenUrl");if(!i)throw new s.CKEditorError("ckbox-plugin-missing-token-url",this);this._token=i==o?Promise.resolve(r.token):r.registerTokenUrl(i)}getToken(){return this._token}async getWorkspaceId(){const e=(0,this.editor.t)("Cannot access default workspace."),t=this.editor.config.get("ckbox.defaultUploadWorkspaceId"),n=function(e,t){const[,n]=e.value.split("."),r=JSON.parse(atob(n)),o=r.auth&&r.auth.ckbox&&r.auth.ckbox.workspaces||[r.aud];return t?"superadmin"==(r.auth&&r.auth.ckbox&&r.auth.ckbox.role)||o.includes(t)?t:null:o[0]}(await this._token,t);if(null==n)throw(0,s.logError)("ckbox-access-default-workspace-error"),e;return n}async getCategoryIdForFile(e,t){const n=(0,this.editor.t)("Cannot determine a category for the uploaded file."),r=this.editor.config.get("ckbox.defaultUploadCategories"),o=this._getAvailableCategories(t),i="string"==typeof e?(s=await async function(e,t){try{const n=await fetch(e,{method:"HEAD",cache:"force-cache",...t});return n.ok&&n.headers.get("content-type")||""}catch{return""}}(e,t),w[s]):e.name.match(/\.(?<ext>[^.]+)$/).groups.ext.toLowerCase();var s;const a=await o;if(!a)throw n;if(r){const e=Object.keys(r).find((e=>r[e].find((e=>e.toLowerCase()==i))));if(e){const t=a.find((t=>t.id===e||t.name===e));if(!t)throw n;return t.id}}const c=a.find((e=>e.extensions.find((e=>e.toLowerCase()==i))));if(!c)throw n;return c.id}async _getAvailableCategories(e){const t=this.editor,n=this._token,{signal:r}=e,o=t.config.get("ckbox.serviceOrigin"),i=await this.getWorkspaceId();try{const e=[];let t,n=0;do{const r=await a(n);e.push(...r.items),t=r.totalCount-(n+50),n+=50}while(t>0);return e}catch{return r.throwIfAborted(),void(0,s.logError)("ckbox-fetch-category-http-error")}async function a(e){const t=new URL("categories",o);return t.searchParams.set("limit",String(50)),t.searchParams.set("offset",String(e)),t.searchParams.set("workspaceId",i),v({url:t,signal:r,authorization:(await n).value})}}}class E extends e.Plugin{static get requires(){return["ImageUploadEditing","ImageUploadProgress",I.FileRepository,O]}static get pluginName(){return"CKBoxUploadAdapter"}static get isOfficialPlugin(){return!0}async afterInit(){const e=this.editor,t=!!e.config.get("ckbox"),n=!!window.CKBox;if(!t&&!n)return;const r=e.plugins.get(I.FileRepository),o=e.plugins.get(A);r.createUploadAdapter=t=>new j(t,e,o);const i=!e.config.get("ckbox.ignoreDataId"),s=e.plugins.get("ImageUploadEditing");i&&s.on("uploadComplete",((t,{imageElement:n,data:r})=>{e.model.change((e=>{e.setAttribute("ckboxImageId",r.ckboxImageId,n)}))}))}}class j{constructor(e,t,n){this.loader=e,this.token=n.getToken(),this.ckboxUtils=n,this.editor=t,this.controller=new AbortController,this.serviceOrigin=t.config.get("ckbox.serviceOrigin")}async upload(){const e=this.ckboxUtils,t=this.editor.t,n=await this.loader.file,r=await e.getCategoryIdForFile(n,{signal:this.controller.signal}),o=new URL("assets",this.serviceOrigin),i=new FormData;o.searchParams.set("workspaceId",await e.getWorkspaceId()),i.append("categoryId",r),i.append("file",n);return v({method:"POST",url:o,data:i,onUploadProgress:e=>{e.lengthComputable&&(this.loader.uploadTotal=e.total,this.loader.uploaded=e.loaded)},signal:this.controller.signal,authorization:(await this.token).value}).then((async e=>{const t=b(e.imageUrls);return{ckboxImageId:e.id,default:t.imageFallbackUrl,sources:t.imageSources}})).catch((()=>{const e=t("Cannot upload file:")+` ${n.name}.`;return Promise.reject(e)}))}abort(){this.controller.abort()}}const C="NoPermission";class O extends e.Plugin{static get pluginName(){return"CKBoxEditing"}static get isOfficialPlugin(){return!0}static get requires(){return["LinkEditing","PictureEditing",E,A]}init(){const e=this.editor;this._shouldBeInitialised()&&(this._checkImagePlugins(),L()&&e.commands.add("ckbox",new _(e)),async function(e){const t=e.plugins.get(A),n=e.config.get("ckbox.serviceOrigin"),r=new URL("permissions",n),{value:o}=await t.getToken(),i=await v({url:r,authorization:o,signal:(new AbortController).signal});return Object.values(i).some((e=>e["asset:create"]))}(e).then((e=>{e||this._blockImageCommands()})))}afterInit(){const e=this.editor;this._shouldBeInitialised()&&(e.config.get("ckbox.ignoreDataId")||(this._initSchema(),this._initConversion(),this._initFixers()))}_shouldBeInitialised(){return!!this.editor.config.get("ckbox")||L()}_blockImageCommands(){const e=this.editor,t=e.commands.get("uploadImage"),n=e.commands.get("ckboxImageEdit");t&&(t.isAccessAllowed=!1,t.forceDisabled(C)),n&&n.forceDisabled(C)}_checkImagePlugins(){const e=this.editor;e.plugins.has("ImageBlockEditing")||e.plugins.has("ImageInlineEditing")||(0,s.logError)("ckbox-plugin-image-feature-missing",e)}_initSchema(){const e=this.editor.model.schema;e.extend("$text",{allowAttributes:"ckboxLinkId"}),e.isRegistered("imageBlock")&&e.extend("imageBlock",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),e.isRegistered("imageInline")&&e.extend("imageInline",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),e.addAttributeCheck((e=>{if(!e.last.getAttribute("linkHref"))return!1}),"ckboxLinkId")}_initConversion(){const e=this.editor;e.conversion.for("downcast").add((e=>{e.on("attribute:ckboxLinkId:imageBlock",((e,t,n)=>{const{writer:r,mapper:o,consumable:i}=n;if(!i.consume(t.item,e.name))return;const s=[...o.toViewElement(t.item).getChildren()].find((e=>"a"===e.name));s&&(t.item.hasAttribute("ckboxLinkId")?r.setAttribute("data-ckbox-resource-id",t.item.getAttribute("ckboxLinkId"),s):r.removeAttribute("data-ckbox-resource-id",s))}),{priority:"low"}),e.on("attribute:ckboxLinkId",((e,t,n)=>{const{writer:r,mapper:o,consumable:i}=n;if(i.consume(t.item,e.name)){if(t.attributeOldValue){const e=S(r,t.attributeOldValue);r.unwrap(o.toViewRange(t.range),e)}if(t.attributeNewValue){const e=S(r,t.attributeNewValue);if(t.item.is("selection")){const t=r.document.selection;r.wrap(t.getFirstRange(),e)}else r.wrap(o.toViewRange(t.range),e)}}}),{priority:"low"})})),e.conversion.for("upcast").add((e=>{e.on("element:a",((e,t,n)=>{const{writer:r,consumable:o}=n;if(!t.viewItem.getAttribute("href"))return;if(!o.consume(t.viewItem,{attributes:["data-ckbox-resource-id"]}))return;const i=t.viewItem.getAttribute("data-ckbox-resource-id");if(i)if(t.modelRange)for(let e of t.modelRange.getItems())e.is("$textProxy")&&(e=e.textNode),B(e)&&r.setAttribute("ckboxLinkId",i,e);else{const e=t.modelCursor.nodeBefore||t.modelCursor.parent;r.setAttribute("ckboxLinkId",i,e)}}),{priority:"low"})})),e.conversion.for("downcast").attributeToAttribute({model:"ckboxImageId",view:"data-ckbox-resource-id"}),e.conversion.for("upcast").elementToAttribute({model:{key:"ckboxImageId",value:e=>e.getAttribute("data-ckbox-resource-id")},view:{attributes:{"data-ckbox-resource-id":/[\s\S]+/}}});const t=e.commands.get("replaceImageSource");t&&this.listenTo(t,"cleanupImage",((e,[t,n])=>{t.removeAttribute("ckboxImageId",n)}))}_initFixers(){const e=this.editor,t=e.model,n=t.document.selection;t.document.registerPostFixer(function(e){return t=>{let n=!1;const r=e.model,o=e.commands.get("ckbox");if(!o)return n;for(const e of r.document.differ.getChanges()){if("insert"!==e.type&&"attribute"!==e.type)continue;const r="insert"===e.type?new i.Range(e.position,e.position.getShiftedBy(e.length)):e.range,s="attribute"===e.type&&"linkHref"===e.attributeKey&&null===e.attributeNewValue;for(const e of r.getItems()){if(s&&e.hasAttribute("ckboxLinkId")){t.removeAttribute("ckboxLinkId",e),n=!0;continue}const r=P(e,o._chosenAssets);for(const o of r){const r="image"===o.type?"ckboxImageId":"ckboxLinkId";o.id!==e.getAttribute(r)&&(t.setAttribute(r,o.id,e),n=!0)}}}return n}}(e)),t.document.registerPostFixer(function(e){return t=>!(e.hasAttribute("linkHref")||!e.hasAttribute("ckboxLinkId"))&&(t.removeSelectionAttribute("ckboxLinkId"),!0)}(n))}}function P(e,t){const n=e.is("element","imageInline")||e.is("element","imageBlock"),r=e.hasAttribute("linkHref");return[...t].filter((t=>"image"===t.type&&n?t.attributes.imageFallbackUrl===e.getAttribute("src"):"link"===t.type&&r?t.attributes.linkHref===e.getAttribute("linkHref"):void 0))}function S(e,t){const n=e.createAttributeElement("a",{"data-ckbox-resource-id":t},{priority:5});return e.setCustomProperty("link",!0,n),n}function B(e){return!!e.is("$text")||!(!e.is("element","imageInline")&&!e.is("element","imageBlock"))}function L(){return!!window.CKBox}class U extends e.Plugin{static get pluginName(){return"CKBox"}static get isOfficialPlugin(){return!0}static get requires(){return[O,o]}}const F=function(){this.__data__=[],this.size=0};const T=function(e,t){return e===t||e!=e&&t!=t};const M=function(e,t){for(var n=e.length;n--;)if(T(e[n][0],t))return n;return-1};var z=Array.prototype.splice;const R=function(e){var t=this.__data__,n=M(t,e);return!(n<0)&&(n==t.length-1?t.pop():z.call(t,n,1),--this.size,!0)};const V=function(e){var t=this.__data__,n=M(t,e);return n<0?void 0:t[n][1]};const N=function(e){return M(this.__data__,e)>-1};const K=function(e,t){var n=this.__data__,r=M(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function D(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}D.prototype.clear=F,D.prototype.delete=R,D.prototype.get=V,D.prototype.has=N,D.prototype.set=K;const H=D;const $=function(){this.__data__=new H,this.size=0};const q=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};const W=function(e){return this.__data__.get(e)};const Z=function(e){return this.__data__.has(e)};const Y="object"==typeof global&&global&&global.Object===Object&&global;var G="object"==typeof self&&self&&self.Object===Object&&self;const J=Y||G||Function("return this")();const X=J.Symbol;var Q=Object.prototype,ee=Q.hasOwnProperty,te=Q.toString,ne=X?X.toStringTag:void 0;const re=function(e){var t=ee.call(e,ne),n=e[ne];try{e[ne]=void 0;var r=!0}catch(e){}var o=te.call(e);return r&&(t?e[ne]=n:delete e[ne]),o};var oe=Object.prototype.toString;const ie=function(e){return oe.call(e)};var se=X?X.toStringTag:void 0;const ae=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":se&&se in Object(e)?re(e):ie(e)};const ce=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};const le=function(e){if(!ce(e))return!1;var t=ae(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t};const ue=J["__core-js_shared__"];var de,ge=(de=/[^.]+$/.exec(ue&&ue.keys&&ue.keys.IE_PROTO||""))?"Symbol(src)_1."+de:"";const he=function(e){return!!ge&&ge in e};var pe=Function.prototype.toString;const me=function(e){if(null!=e){try{return pe.call(e)}catch(e){}try{return e+""}catch(e){}}return""};var fe=/^\[object .+?Constructor\]$/,be=Function.prototype,ve=Object.prototype,we=be.toString,_e=ve.hasOwnProperty,ye=RegExp("^"+we.call(_e).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const ke=function(e){return!(!ce(e)||he(e))&&(le(e)?ye:fe).test(me(e))};const xe=function(e,t){return null==e?void 0:e[t]};const Ie=function(e,t){var n=xe(e,t);return ke(n)?n:void 0};const Ae=Ie(J,"Map");const Ee=Ie(Object,"create");const je=function(){this.__data__=Ee?Ee(null):{},this.size=0};const Ce=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t};var Oe=Object.prototype.hasOwnProperty;const Pe=function(e){var t=this.__data__;if(Ee){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return Oe.call(t,e)?t[e]:void 0};var Se=Object.prototype.hasOwnProperty;const Be=function(e){var t=this.__data__;return Ee?void 0!==t[e]:Se.call(t,e)};const Le=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Ee&&void 0===t?"__lodash_hash_undefined__":t,this};function Ue(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Ue.prototype.clear=je,Ue.prototype.delete=Ce,Ue.prototype.get=Pe,Ue.prototype.has=Be,Ue.prototype.set=Le;const Fe=Ue;const Te=function(){this.size=0,this.__data__={hash:new Fe,map:new(Ae||H),string:new Fe}};const Me=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};const ze=function(e,t){var n=e.__data__;return Me(t)?n["string"==typeof t?"string":"hash"]:n.map};const Re=function(e){var t=ze(this,e).delete(e);return this.size-=t?1:0,t};const Ve=function(e){return ze(this,e).get(e)};const Ne=function(e){return ze(this,e).has(e)};const Ke=function(e,t){var n=ze(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this};function De(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}De.prototype.clear=Te,De.prototype.delete=Re,De.prototype.get=Ve,De.prototype.has=Ne,De.prototype.set=Ke;const He=De;const $e=function(e,t){var n=this.__data__;if(n instanceof H){var r=n.__data__;if(!Ae||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new He(r)}return n.set(e,t),this.size=n.size,this};function qe(e){var t=this.__data__=new H(e);this.size=t.size}qe.prototype.clear=$,qe.prototype.delete=q,qe.prototype.get=W,qe.prototype.has=Z,qe.prototype.set=$e;const We=qe;const Ze=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};const Ye=function(e){return this.__data__.has(e)};function Ge(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new He;++t<n;)this.add(e[t])}Ge.prototype.add=Ge.prototype.push=Ze,Ge.prototype.has=Ye;const Je=Ge;const Xe=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1};const Qe=function(e,t){return e.has(t)};const et=function(e,t,n,r,o,i){var s=1&n,a=e.length,c=t.length;if(a!=c&&!(s&&c>a))return!1;var l=i.get(e),u=i.get(t);if(l&&u)return l==t&&u==e;var d=-1,g=!0,h=2&n?new Je:void 0;for(i.set(e,t),i.set(t,e);++d<a;){var p=e[d],m=t[d];if(r)var f=s?r(m,p,d,t,e,i):r(p,m,d,e,t,i);if(void 0!==f){if(f)continue;g=!1;break}if(h){if(!Xe(t,(function(e,t){if(!Qe(h,t)&&(p===e||o(p,e,n,r,i)))return h.push(t)}))){g=!1;break}}else if(p!==m&&!o(p,m,n,r,i)){g=!1;break}}return i.delete(e),i.delete(t),g};const tt=J.Uint8Array;const nt=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n};const rt=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n};var ot=X?X.prototype:void 0,it=ot?ot.valueOf:void 0;const st=function(e,t,n,r,o,i,s){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new tt(e),new tt(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return T(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var a=nt;case"[object Set]":var c=1&r;if(a||(a=rt),e.size!=t.size&&!c)return!1;var l=s.get(e);if(l)return l==t;r|=2,s.set(e,t);var u=et(a(e),a(t),r,o,i,s);return s.delete(e),u;case"[object Symbol]":if(it)return it.call(e)==it.call(t)}return!1};const at=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e};const ct=Array.isArray;const lt=function(e,t,n){var r=t(e);return ct(e)?r:at(r,n(e))};const ut=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var s=e[n];t(s,n,e)&&(i[o++]=s)}return i};const dt=function(){return[]};var gt=Object.prototype.propertyIsEnumerable,ht=Object.getOwnPropertySymbols;const pt=ht?function(e){return null==e?[]:(e=Object(e),ut(ht(e),(function(t){return gt.call(e,t)})))}:dt;const mt=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r};const ft=function(e){return null!=e&&"object"==typeof e};const bt=function(e){return ft(e)&&"[object Arguments]"==ae(e)};var vt=Object.prototype,wt=vt.hasOwnProperty,_t=vt.propertyIsEnumerable;const yt=bt(function(){return arguments}())?bt:function(e){return ft(e)&&wt.call(e,"callee")&&!_t.call(e,"callee")};const kt=function(){return!1};var xt="object"==typeof exports&&exports&&!exports.nodeType&&exports,It=xt&&"object"==typeof module&&module&&!module.nodeType&&module,At=It&&It.exports===xt?J.Buffer:void 0;const Et=(At?At.isBuffer:void 0)||kt;var jt=/^(?:0|[1-9]\d*)$/;const Ct=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&jt.test(e))&&e>-1&&e%1==0&&e<t};const Ot=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var Pt={};Pt["[object Float32Array]"]=Pt["[object Float64Array]"]=Pt["[object Int8Array]"]=Pt["[object Int16Array]"]=Pt["[object Int32Array]"]=Pt["[object Uint8Array]"]=Pt["[object Uint8ClampedArray]"]=Pt["[object Uint16Array]"]=Pt["[object Uint32Array]"]=!0,Pt["[object Arguments]"]=Pt["[object Array]"]=Pt["[object ArrayBuffer]"]=Pt["[object Boolean]"]=Pt["[object DataView]"]=Pt["[object Date]"]=Pt["[object Error]"]=Pt["[object Function]"]=Pt["[object Map]"]=Pt["[object Number]"]=Pt["[object Object]"]=Pt["[object RegExp]"]=Pt["[object Set]"]=Pt["[object String]"]=Pt["[object WeakMap]"]=!1;const St=function(e){return ft(e)&&Ot(e.length)&&!!Pt[ae(e)]};const Bt=function(e){return function(t){return e(t)}};var Lt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ut=Lt&&"object"==typeof module&&module&&!module.nodeType&&module,Ft=Ut&&Ut.exports===Lt&&Y.process,Tt=function(){try{var e=Ut&&Ut.require&&Ut.require("util").types;return e||Ft&&Ft.binding&&Ft.binding("util")}catch(e){}}();var Mt=Tt&&Tt.isTypedArray;const zt=Mt?Bt(Mt):St;var Rt=Object.prototype.hasOwnProperty;const Vt=function(e,t){var n=ct(e),r=!n&&yt(e),o=!n&&!r&&Et(e),i=!n&&!r&&!o&&zt(e),s=n||r||o||i,a=s?mt(e.length,String):[],c=a.length;for(var l in e)!t&&!Rt.call(e,l)||s&&("length"==l||o&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||Ct(l,c))||a.push(l);return a};var Nt=Object.prototype;const Kt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Nt)};const Dt=function(e,t){return function(n){return e(t(n))}}(Object.keys,Object);var Ht=Object.prototype.hasOwnProperty;const $t=function(e){if(!Kt(e))return Dt(e);var t=[];for(var n in Object(e))Ht.call(e,n)&&"constructor"!=n&&t.push(n);return t};const qt=function(e){return null!=e&&Ot(e.length)&&!le(e)};const Wt=function(e){return qt(e)?Vt(e):$t(e)};const Zt=function(e){return lt(e,Wt,pt)};var Yt=Object.prototype.hasOwnProperty;const Gt=function(e,t,n,r,o,i){var s=1&n,a=Zt(e),c=a.length;if(c!=Zt(t).length&&!s)return!1;for(var l=c;l--;){var u=a[l];if(!(s?u in t:Yt.call(t,u)))return!1}var d=i.get(e),g=i.get(t);if(d&&g)return d==t&&g==e;var h=!0;i.set(e,t),i.set(t,e);for(var p=s;++l<c;){var m=e[u=a[l]],f=t[u];if(r)var b=s?r(f,m,u,t,e,i):r(m,f,u,e,t,i);if(!(void 0===b?m===f||o(m,f,n,r,i):b)){h=!1;break}p||(p="constructor"==u)}if(h&&!p){var v=e.constructor,w=t.constructor;v==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof w&&w instanceof w||(h=!1)}return i.delete(e),i.delete(t),h};const Jt=Ie(J,"DataView");const Xt=Ie(J,"Promise");const Qt=Ie(J,"Set");const en=Ie(J,"WeakMap");var tn="[object Map]",nn="[object Promise]",rn="[object Set]",on="[object WeakMap]",sn="[object DataView]",an=me(Jt),cn=me(Ae),ln=me(Xt),un=me(Qt),dn=me(en),gn=ae;(Jt&&gn(new Jt(new ArrayBuffer(1)))!=sn||Ae&&gn(new Ae)!=tn||Xt&&gn(Xt.resolve())!=nn||Qt&&gn(new Qt)!=rn||en&&gn(new en)!=on)&&(gn=function(e){var t=ae(e),n="[object Object]"==t?e.constructor:void 0,r=n?me(n):"";if(r)switch(r){case an:return sn;case cn:return tn;case ln:return nn;case un:return rn;case dn:return on}return t});const hn=gn;var pn="[object Arguments]",mn="[object Array]",fn="[object Object]",bn=Object.prototype.hasOwnProperty;const vn=function(e,t,n,r,o,i){var s=ct(e),a=ct(t),c=s?mn:hn(e),l=a?mn:hn(t),u=(c=c==pn?fn:c)==fn,d=(l=l==pn?fn:l)==fn,g=c==l;if(g&&Et(e)){if(!Et(t))return!1;s=!0,u=!1}if(g&&!u)return i||(i=new We),s||zt(e)?et(e,t,n,r,o,i):st(e,t,c,n,r,o,i);if(!(1&n)){var h=u&&bn.call(e,"__wrapped__"),p=d&&bn.call(t,"__wrapped__");if(h||p){var m=h?e.value():e,f=p?t.value():t;return i||(i=new We),o(m,f,n,r,i)}}return!!g&&(i||(i=new We),Gt(e,t,n,r,o,i))};const wn=function e(t,n,r,o,i){return t===n||(null==t||null==n||!ft(t)&&!ft(n)?t!=t&&n!=n:vn(t,n,r,o,e,i))};const _n=function(e,t){return wn(e,t)};function yn(e){if(Array.isArray(e)){const t=e.map(yn);return e=>t.some((t=>t(e)))}if("origin"==e){const e=s.global.window.location.origin;return t=>new URL(t,s.global.document.baseURI).origin==e}if("function"==typeof e)return e;if(e instanceof RegExp)return t=>!(!t.match(e)&&!t.replace(/^https?:\/\//,"").match(e));return()=>!1}class kn extends e.Command{constructor(e){super(e),this._wrapper=null,this._processInProgress=new Set,this._updateUiDelayed=(0,s.delay)((()=>this.editor.ui.update()),0),this.value=!1,this._canEdit=function(e){const t=yn(e);return e=>!(!e.is("element","imageInline")&&!e.is("element","imageBlock"))&&(!!e.hasAttribute("ckboxImageId")||!!e.hasAttribute("src")&&t(e.getAttribute("src")))}(e.config.get("ckbox.allowExternalImagesEditing")),this._prepareOptions=(0,s.abortableDebounce)(((e,t)=>this._prepareOptionsAbortable(e,t))),this._prepareListeners()}refresh(){const e=this.editor;this.value=this._getValue();const t=e.model.document.selection.getSelectedElement();this.isEnabled=!!t&&this._canEdit(t)&&!this._checkIfElementIsBeingProcessed(t)}execute(){if(this._getValue())return;const e=(0,s.createElement)(document,"div",{class:"ck ckbox-wrapper"});this._wrapper=e,this.value=!0,document.body.appendChild(this._wrapper);const n={element:this.editor.model.document.selection.getSelectedElement(),controller:new AbortController};this._prepareOptions(n).then((t=>window.CKBox.mountImageEditor(e,t)),(e=>{const n=this.editor,r=n.t;n.plugins.get(t.Notification).showWarning(r("Failed to determine category of edited image."),{namespace:"ckbox"}),console.error(e),this._handleImageEditorClose()}))}destroy(){this._handleImageEditorClose(),this._prepareOptions.abort(),this._updateUiDelayed.cancel();for(const e of this._processInProgress.values())e.controller.abort();super.destroy()}_getValue(){return null!==this._wrapper}async _prepareOptionsAbortable(e,t){const n=this.editor,r=n.config.get("ckbox"),o=n.plugins.get(A),{element:i}=t;let s;const a=i.getAttribute("ckboxImageId");if(a)s={assetId:a};else{const t=new URL(i.getAttribute("src"),document.baseURI).href;s={imageUrl:t,uploadCategoryId:await o.getCategoryIdForFile(t,{signal:e})}}return{...s,imageEditing:{allowOverwrite:!1},tokenUrl:r.tokenUrl,...r.serviceOrigin&&{serviceOrigin:r.serviceOrigin},onClose:()=>this._handleImageEditorClose(),onSave:e=>this._handleImageEditorSave(t,e)}}_prepareListeners(){this.listenTo(this.editor.model.document,"change:data",(()=>{this._getProcessingStatesOfDeletedImages().forEach((e=>{e.controller.abort()}))}))}_getProcessingStatesOfDeletedImages(){const e=[];for(const t of this._processInProgress.values())"$graveyard"==t.element.root.rootName&&e.push(t);return e}_checkIfElementIsBeingProcessed(e){for(const{element:t}of this._processInProgress)if(_n(t,e))return!0;return!1}_handleImageEditorClose(){this._wrapper&&(this._wrapper.remove(),this._wrapper=null,this.editor.editing.view.focus(),this._updateUiDelayed(),this.refresh())}_handleImageEditorSave(n,r){const o=this.editor.locale.t,i=this.editor.plugins.get(t.Notification),a=this.editor.plugins.get(e.PendingActions),c=a.add(o("Processing the edited image."));this._processInProgress.add(n),this._showImageProcessingIndicator(n.element,r),this.refresh(),this._waitForAssetProcessed(r.data.id,n.controller.signal).then((e=>{this._replaceImage(n.element,e)}),(e=>{this.editor.editing.reconvertItem(n.element),n.controller.signal.aborted||(!e||e instanceof s.CKEditorError?i.showWarning(o("Server failed to process the image."),{namespace:"ckbox"}):console.error(e))})).finally((()=>{this._processInProgress.delete(n),a.remove(c),this.refresh()}))}async _getAssetStatusFromServer(e,t){const n=this.editor.plugins.get(A),r=new URL("assets/"+e,this.editor.config.get("ckbox.serviceOrigin")),o=await v({url:r,signal:t,authorization:(await n.getToken()).value}),i=o.metadata.metadataProcessingStatus;if(!i||"queued"==i)throw new s.CKEditorError("ckbox-image-not-processed");return{data:{...o}}}async _waitForAssetProcessed(e,t){const n=await(0,s.retry)((()=>this._getAssetStatusFromServer(e,t)),{signal:t,maxAttempts:5});if("success"!=n.data.metadata.metadataProcessingStatus)throw new s.CKEditorError("ckbox-image-processing-failed");return n}_showImageProcessingIndicator(e,t){const n=this.editor;n.editing.view.change((r=>{const o=n.editing.mapper.toViewElement(e),i=this.editor.plugins.get("ImageUtils").findViewImgElement(o);r.removeStyle("aspect-ratio",i),r.setAttribute("width",t.data.metadata.width,i),r.setAttribute("height",t.data.metadata.height,i),r.setStyle("width",`${t.data.metadata.width}px`,i),r.setStyle("height",`${t.data.metadata.height}px`,i),r.addClass("image-processing",o)}))}_replaceImage(e,t){const n=this.editor,{imageFallbackUrl:r,imageSources:o,imageWidth:i,imageHeight:s,imagePlaceholder:a}=y(t),c=Array.from(n.model.document.selection.getRanges());n.model.change((l=>{l.setSelection(e,"on"),n.execute("insertImage",{imageType:e.is("element","imageInline")?"imageInline":null,source:{src:r,sources:o,width:i,height:s,...a?{placeholder:a}:null,...e.hasAttribute("alt")?{alt:e.getAttribute("alt")}:null}});const u=e.getChildren();e=n.model.document.selection.getSelectedElement();for(const t of u)l.append(l.cloneElement(t),e);l.setAttribute("ckboxImageId",t.data.id,e),l.setSelection(c)}))}}class xn extends e.Plugin{static get pluginName(){return"CKBoxImageEditEditing"}static get isOfficialPlugin(){return!0}static get requires(){return[O,A,e.PendingActions,t.Notification,"ImageUtils","ImageEditing"]}init(){const{editor:e}=this;e.commands.add("ckboxImageEdit",new kn(e))}}class In extends e.Plugin{static get pluginName(){return"CKBoxImageEditUI"}static get isOfficialPlugin(){return!0}init(){const e=this.editor;e.ui.componentFactory.add("ckboxImageEdit",(n=>{const r=e.commands.get("ckboxImageEdit"),o=e.commands.get("uploadImage"),i=new t.ButtonView(n),s=n.t;return i.set({icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M1.201 1C.538 1 0 1.47 0 2.1v14.363c0 .64.534 1.037 1.186 1.037H5.06l5.058-5.078L6.617 9.15a.696.696 0 0 0-.957-.033L1.5 13.6V2.5h15v4.354a3.478 3.478 0 0 1 1.5.049V2.1c0-.63-.547-1.1-1.2-1.1H1.202Zm11.713 2.803a2.147 2.147 0 0 0-2.049 1.992 2.14 2.14 0 0 0 1.28 2.096 2.13 2.13 0 0 0 2.642-3.11 2.129 2.129 0 0 0-1.873-.978ZM8.089 17.635v2.388h2.389l7.046-7.046-2.39-2.39-7.045 7.048Zm11.282-6.507a.637.637 0 0 0 .139-.692.603.603 0 0 0-.139-.205l-1.49-1.488a.63.63 0 0 0-.899 0l-1.166 1.163 2.39 2.39 1.165-1.168Z"/></svg>',tooltip:!0}),i.bind("label").to(o,"isAccessAllowed",(e=>s(e?"Edit image":"You have no image editing permissions."))),i.bind("isOn").to(r,"value",r,"isEnabled",((e,t)=>e&&t)),i.bind("isEnabled").to(r),this.listenTo(i,"execute",(()=>{e.execute("ckboxImageEdit"),e.editing.view.focus()})),i}))}}var An=n(591),En=n.n(An),jn=n(639),Cn=n.n(jn),On=n(128),Pn=n.n(On),Sn=n(21),Bn=n.n(Sn),Ln=n(51),Un=n.n(Ln),Fn=n(957),Tn={attributes:{"data-cke":!0}};Tn.setAttributes=Bn(),Tn.insert=Pn().bind(null,"head"),Tn.domAPI=Cn(),Tn.insertStyleElement=Un();En()(Fn.A,Tn);Fn.A&&Fn.A.locals&&Fn.A.locals;class Mn extends e.Plugin{static get pluginName(){return"CKBoxImageEdit"}static get isOfficialPlugin(){return!0}static get requires(){return[xn,In]}}})(),(window.CKEditor5=window.CKEditor5||{}).ckbox=r})();
|
5
|
+
*/(()=>{var e={21:e=>{"use strict";e.exports=function(e,t){Object.keys(t).forEach((function(i){e.setAttribute(i,t[i])}))}},51:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},128:e=>{"use strict";var t={};e.exports=function(e,i){var r=function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}t[e]=i}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(i)}},237:e=>{"use strict";e.exports=CKEditor5.dll},260:(e,t,i)=>{e.exports=i(237)("./src/upload.js")},311:(e,t,i)=>{e.exports=i(237)("./src/ui.js")},355:(e,t,i)=>{e.exports=i(237)("./src/icons.js")},584:(e,t,i)=>{e.exports=i(237)("./src/utils.js")},591:e=>{"use strict";var t=[];function i(e){for(var i=-1,r=0;r<t.length;r++)if(t[r].identifier===e){i=r;break}return i}function r(e,r){for(var n={},s=[],a=0;a<e.length;a++){var c=e[a],l=r.base?c[0]+r.base:c[0],d=n[l]||0,u="".concat(l," ").concat(d);n[l]=d+1;var g=i(u),m={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==g)t[g].references++,t[g].updater(m);else{var h=o(m,r);r.byIndex=a,t.splice(a,0,{identifier:u,updater:h,references:1})}s.push(u)}return s}function o(e,t){var i=t.domAPI(t);i.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;i.update(e=t)}else i.remove()}}e.exports=function(e,o){var n=r(e=e||[],o=o||{});return function(e){e=e||[];for(var s=0;s<n.length;s++){var a=i(n[s]);t[a].references--}for(var c=r(e,o),l=0;l<n.length;l++){var d=i(n[l]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}n=c}}},639:e=>{"use strict";var t,i=(t=[],function(e,i){return t[e]=i,t.filter(Boolean).join("\n")});function r(e,t,r,o){var n;if(r)n="";else{n="",o.supports&&(n+="@supports (".concat(o.supports,") {")),o.media&&(n+="@media ".concat(o.media," {"));var s=void 0!==o.layer;s&&(n+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),n+=o.css,s&&(n+="}"),o.media&&(n+="}"),o.supports&&(n+="}")}if(e.styleSheet)e.styleSheet.cssText=i(t,n);else{var a=document.createTextNode(n),c=e.childNodes;c[t]&&e.removeChild(c[t]),c.length?e.insertBefore(a,c[t]):e.appendChild(a)}}var o={singleton:null,singletonCounter:0};e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=o.singletonCounter++,i=o.singleton||(o.singleton=e.insertStyleElement(e));return{update:function(e){r(i,t,!1,e)},remove:function(e){r(i,t,!0,e)}}}},758:e=>{"use strict";e.exports=function(e){return e[1]}},782:(e,t,i)=>{e.exports=i(237)("./src/core.js")},783:(e,t,i)=>{e.exports=i(237)("./src/engine.js")},935:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i="",r=void 0!==t[5];return t[4]&&(i+="@supports (".concat(t[4],") {")),t[2]&&(i+="@media ".concat(t[2]," {")),r&&(i+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),i+=e(t),r&&(i+="}"),t[2]&&(i+="}"),t[4]&&(i+="}"),i})).join("")},t.i=function(e,i,r,o,n){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var c=this[a][0];null!=c&&(s[c]=!0)}for(var l=0;l<e.length;l++){var d=[].concat(e[l]);r&&s[d[0]]||(void 0!==n&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=n),i&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=i):d[2]=i),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},957:(e,t,i)=>{"use strict";i.d(t,{A:()=>a});var r=i(758),o=i.n(r),n=i(935),s=i.n(n)()(o());s.push([e.id,':root{--ck-image-processing-highlight-color:#f9fafa;--ck-image-processing-background-color:#e3e5e8}.ck.ck-editor__editable .image.image-processing{position:relative}.ck.ck-editor__editable .image.image-processing:before{animation:ck-image-processing-animation 2s linear infinite;background:linear-gradient(90deg,var(--ck-image-processing-background-color),var(--ck-image-processing-highlight-color),var(--ck-image-processing-background-color));background-size:200% 100%;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.ck.ck-editor__editable .image.image-processing img{height:100%}@keyframes ck-image-processing-animation{0%{background-position:200% 0}to{background-position:-200% 0}}',""]);const a=s}},t={};function i(r){var o=t[r];if(void 0!==o)return o.exports;var n=t[r]={id:r,exports:{}};return e[r](n,n.exports,i),n.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";i.r(r),i.d(r,{CKBox:()=>F,CKBoxEditing:()=>P,CKBoxImageEdit:()=>ae,CKBoxImageEditEditing:()=>W,CKBoxImageEditUI:()=>Y,CKBoxUI:()=>n});var e=i(782),t=i(311),o=i(355);class n extends e.Plugin{static get pluginName(){return"CKBoxUI"}static get isOfficialPlugin(){return!0}afterInit(){const e=this.editor;e.commands.get("ckbox")&&(e.ui.componentFactory.add("ckbox",(()=>this._createFileToolbarButton())),e.ui.componentFactory.add("menuBar:ckbox",(()=>this._createFileMenuBarButton())),e.plugins.has("ImageInsertUI")&&e.plugins.get("ImageInsertUI").registerIntegration({name:"assetManager",observable:()=>e.commands.get("ckbox"),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?"insertOnly":"insertNested")}))}_createButton(e){const t=this.editor,i=new e(t.locale),r=t.commands.get("ckbox");return i.bind("isOn","isEnabled").to(r,"value","isEnabled"),i.on("execute",(()=>{t.execute("ckbox")})),i}_createFileToolbarButton(){const e=this.editor.locale.t,i=this._createButton(t.ButtonView);return i.icon=o.IconBrowseFiles,i.label=e("Open file manager"),i.tooltip=!0,i}_createImageToolbarButton(){const e=this.editor.locale.t,i=this.editor.plugins.get("ImageInsertUI"),r=this._createButton(t.ButtonView);return r.icon=o.IconImageAssetManager,r.bind("label").to(i,"isImageSelected",(t=>e(t?"Replace image with file manager":"Insert image with file manager"))),r.tooltip=!0,r}_createImageDropdownButton(){const e=this.editor.locale.t,i=this.editor.plugins.get("ImageInsertUI"),r=this._createButton(t.ButtonView);return r.icon=o.IconImageAssetManager,r.withText=!0,r.bind("label").to(i,"isImageSelected",(t=>e(t?"Replace with file manager":"Insert with file manager"))),r.on("execute",(()=>{i.dropdownView.isOpen=!1})),r}_createFileMenuBarButton(){const e=this.editor.locale.t,i=this._createButton(t.MenuBarMenuListItemButtonView);return i.icon=o.IconBrowseFiles,i.withText=!0,i.label=e("File"),i}_createImageMenuBarButton(e){const i=this.editor.locale.t,r=this.editor.locale.t,n=this._createButton(t.MenuBarMenuListItemButtonView);switch(n.icon=o.IconImageAssetManager,n.withText=!0,e){case"insertOnly":n.label=i("Image");break;case"insertNested":n.label=r("With file manager")}return n}}var s=i(783),a=i(584),c=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],l=e=>{let t=0;for(let i=0;i<e.length;i++){let r=e[i];t=83*t+c.indexOf(r)}return t},d=e=>{let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},u=e=>{let t=Math.max(0,Math.min(1,e));return t<=.0031308?Math.trunc(12.92*t*255+.5):Math.trunc(255*(1.055*Math.pow(t,.4166666666666667)-.055)+.5)},g=(e,t)=>(e=>e<0?-1:1)(e)*Math.pow(Math.abs(e),t),m=class extends Error{constructor(e){super(e),this.name="ValidationError",this.message=e}},h=e=>{if(!e||e.length<6)throw new m("The blurhash string must be at least 6 characters");let t=l(e[0]),i=Math.floor(t/9)+1,r=t%9+1;if(e.length!==4+2*r*i)throw new m(`blurhash length mismatch: length is ${e.length} but it should be ${4+2*r*i}`)},p=e=>{let t=e>>8&255,i=255&e;return[d(e>>16),d(t),d(i)]},f=(e,t)=>{let i=Math.floor(e/361),r=Math.floor(e/19)%19,o=e%19;return[g((i-9)/9,2)*t,g((r-9)/9,2)*t,g((o-9)/9,2)*t]},b=(e,t,i,r)=>{h(e),r|=1;let o=l(e[0]),n=Math.floor(o/9)+1,s=o%9+1,a=(l(e[1])+1)/166,c=new Array(s*n);for(let t=0;t<c.length;t++)if(0===t){let i=l(e.substring(2,6));c[t]=p(i)}else{let i=l(e.substring(4+2*t,6+2*t));c[t]=f(i,a*r)}let d=4*t,g=new Uint8ClampedArray(d*i);for(let e=0;e<i;e++)for(let r=0;r<t;r++){let o=0,a=0,l=0;for(let d=0;d<n;d++)for(let n=0;n<s;n++){let u=Math.cos(Math.PI*r*n/t)*Math.cos(Math.PI*e*d/i),g=c[n+d*s];o+=g[0]*u,a+=g[1]*u,l+=g[2]*u}let m=u(o),h=u(a),p=u(l);g[4*r+0+e*d]=m,g[4*r+1+e*d]=h,g[4*r+2+e*d]=p,g[4*r+3+e*d]=255}return g};function k(e){const t=[];let i=0;for(const r in e){const o=parseInt(r,10);isNaN(o)||(o>i&&(i=o),t.push(`${e[r]} ${r}w`))}const r=[{srcset:t.join(","),sizes:`(max-width: ${i}px) 100vw, ${i}px`,type:"image/webp"}];return{imageFallbackUrl:e.default,imageSources:r}}function w({url:e,method:t="GET",data:i,onUploadProgress:r,signal:o,authorization:n}){const s=new XMLHttpRequest;s.open(t,e.toString()),s.setRequestHeader("Authorization",n),s.setRequestHeader("CKBox-Version","CKEditor 5"),s.responseType="json";const a=()=>{s.abort()};return new Promise(((e,t)=>{o.throwIfAborted(),o.addEventListener("abort",a),s.addEventListener("loadstart",(()=>{o.addEventListener("abort",a)})),s.addEventListener("loadend",(()=>{o.removeEventListener("abort",a)})),s.addEventListener("error",(()=>{t()})),s.addEventListener("abort",(()=>{t()})),s.addEventListener("load",(()=>{const i=s.response;if(!i||i.statusCode>=400)return t(i&&i.message);e(i)})),r&&s.upload.addEventListener("progress",(e=>{r(e)})),s.send(i)}))}const I={"image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff"};class x extends e.Command{_chosenAssets=new Set;_wrapper=null;constructor(e){super(e),this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire("ckbox:open")}_getValue(){return null!==this._wrapper}_checkEnabled(){const e=this.editor.commands.get("insertImage"),t=this.editor.commands.get("link");return!(!e.isEnabled&&!t.isEnabled)}_prepareOptions(){const e=this.editor.config.get("ckbox"),t=e.dialog,i=e.categories,r=e.view,o=e.upload;return{theme:e.theme,language:e.language,tokenUrl:e.tokenUrl,serviceOrigin:e.serviceOrigin,forceDemoLabel:e.forceDemoLabel,choosableFileExtensions:e.choosableFileExtensions,assets:{onChoose:e=>this.fire("ckbox:choose",e)},dialog:{onClose:()=>this.fire("ckbox:close"),width:t&&t.width,height:t&&t.height},categories:i&&{icons:i.icons},view:r&&{openLastView:r.openLastView,startupFolderId:r.startupFolderId,startupCategoryId:r.startupCategoryId,hideMaximizeButton:r.hideMaximizeButton},upload:o&&{componentsHideTimeout:o.componentsHideTimeout,dialogMinimizeTimeout:o.dialogMinimizeTimeout}}}_initListeners(){const e=this.editor,t=e.model,i=!e.config.get("ckbox.ignoreDataId"),r=e.config.get("ckbox.downloadableFiles");this.on("ckbox",(()=>{this.refresh()}),{priority:"low"}),this.on("ckbox:open",(()=>{this.isEnabled&&!this.value&&(this._wrapper=(0,a.createElement)(document,"div",{class:"ck ckbox-wrapper"}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))})),this.on("ckbox:close",(()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,e.editing.view.focus())})),this.on("ckbox:choose",((o,n)=>{if(!this.isEnabled)return;const s=e.commands.get("insertImage"),a=e.commands.get("link"),c=function({downloadableFilesConfig:e,assets:t,isImageAllowed:i,isLinkAllowed:r}){return t.map((t=>function(e){const t=e.data.metadata;if(!t)return!1;return t.width&&t.height}(t)?{id:t.data.id,type:"image",attributes:v(t)}:{id:t.data.id,type:"link",attributes:y(t,e)})).filter((e=>"image"===e.type?i:r))}({assets:n,downloadableFilesConfig:r,isImageAllowed:s.isEnabled,isLinkAllowed:a.isEnabled}),l=c.length;0!==l&&(t.change((e=>{for(const t of c){const r=t===c[l-1],o=1===l;this._insertAsset(t,r,e,o),i&&(setTimeout((()=>this._chosenAssets.delete(t)),1e3),this._chosenAssets.add(t))}})),e.editing.view.focus())})),this.listenTo(e,"destroy",(()=>{this.fire("ckbox:close"),this._chosenAssets.clear()}))}_insertAsset(e,t,i,r){const o=this.editor.model.document.selection;i.removeSelectionAttribute("linkHref"),"image"===e.type?this._insertImage(e):this._insertLink(e,i,r),t||i.setSelection(o.getLastPosition())}_insertImage(e){const t=this.editor,{imageFallbackUrl:i,imageSources:r,imageTextAlternative:o,imageWidth:n,imageHeight:s,imagePlaceholder:a}=e.attributes;t.execute("insertImage",{source:{src:i,sources:r,alt:o,width:n,height:s,...a?{placeholder:a}:null}})}_insertLink(e,t,i){const r=this.editor,o=r.model,n=o.document.selection,{linkName:s,linkHref:c}=e.attributes;if(n.isCollapsed){const e=(0,a.toMap)(n.getAttributes()),l=t.createText(s,e);if(!i){const e=n.getLastPosition(),i=e.parent;"paragraph"===i.name&&i.isEmpty||r.execute("insertParagraph",{position:e});const s=o.insertContent(l);return t.setSelection(s),void r.execute("link",c)}const d=o.insertContent(l);t.setSelection(d)}r.execute("link",c)}}function v(e){const{imageFallbackUrl:t,imageSources:i}=k(e.data.imageUrls),{description:r,width:o,height:n,blurHash:s}=e.data.metadata,a=function(e){if(e)try{const t="32px",i=document.createElement("canvas");i.setAttribute("width",t),i.setAttribute("height",t);const r=i.getContext("2d");if(!r)return;const o=r.createImageData(32,32),n=b(e,32,32);return o.data.set(n),r.putImageData(o,0,0),i.toDataURL()}catch(e){return}}(s);return{imageFallbackUrl:t,imageSources:i,imageTextAlternative:r||"",imageWidth:o,imageHeight:n,...a?{imagePlaceholder:a}:null}}function y(e,t){return{linkName:e.data.name,linkHref:_(e,t)}}function _(e,t){const i=new URL(e.data.url);return function(e,t){if("function"==typeof t)return t(e);return!0}(e,t)&&i.searchParams.set("download","true"),i.toString()}var A=i(260);class E extends e.Plugin{_token;static get pluginName(){return"CKBoxUtils"}static get isOfficialPlugin(){return!0}static get requires(){return["CloudServices"]}init(){const e=this.editor,t=!!e.config.get("ckbox"),i=!!window.CKBox;if(!t&&!i)return;e.config.define("ckbox",{serviceOrigin:"https://api.ckbox.io",defaultUploadCategories:null,ignoreDataId:!1,language:e.locale.uiLanguage,theme:"lark",tokenUrl:e.config.get("cloudServices.tokenUrl")});const r=e.plugins.get("CloudServices"),o=e.config.get("cloudServices.tokenUrl"),n=e.config.get("ckbox.tokenUrl");if(!n)throw new a.CKEditorError("ckbox-plugin-missing-token-url",this);this._token=n==o?Promise.resolve(r.token):r.registerTokenUrl(n),this._token=this._token.then((async e=>(await this._authorizePrivateCategoriesAccess(e.value),e)))}getToken(){return this._token}async getWorkspaceId(){const e=(0,this.editor.t)("Cannot access default workspace."),t=this.editor.config.get("ckbox.defaultUploadWorkspaceId"),i=function(e,t){const[,i]=e.value.split("."),r=JSON.parse(atob(i)),o=r.auth?.ckbox?.workspaces||[r.aud];return t?"superadmin"==r.auth?.ckbox?.role||o.includes(t)?t:null:o[0]}(await this._token,t);if(null==i)throw(0,a.logError)("ckbox-access-default-workspace-error"),e;return i}async getCategoryIdForFile(e,t){const i=(0,this.editor.t)("Cannot determine a category for the uploaded file."),r=this.editor.config.get("ckbox.defaultUploadCategories"),o=this._getAvailableCategories(t),n="string"==typeof e?(s=await async function(e,t){try{const i=await fetch(e,{method:"HEAD",cache:"force-cache",...t});return i.ok&&i.headers.get("content-type")||""}catch{return""}}(e,t),I[s]):e.name.match(/\.(?<ext>[^.]+)$/).groups.ext.toLowerCase();var s;const a=await o;if(!a)throw i;if(r){const e=Object.keys(r).find((e=>r[e].find((e=>e.toLowerCase()==n))));if(e){const t=a.find((t=>t.id===e||t.name===e));if(!t)throw i;return t.id}}const c=a.find((e=>e.extensions.find((e=>e.toLowerCase()==n))));if(!c)throw i;return c.id}async _getAvailableCategories(e){const t=this.editor,i=this._token,{signal:r}=e,o=t.config.get("ckbox.serviceOrigin"),n=await this.getWorkspaceId();try{const e=[];let t,i=0;do{const r=await s(i);e.push(...r.items),t=r.totalCount-(i+50),i+=50}while(t>0);return e}catch{return r.throwIfAborted(),void(0,a.logError)("ckbox-fetch-category-http-error")}async function s(e){const t=new URL("categories",o);return t.searchParams.set("limit",String(50)),t.searchParams.set("offset",String(e)),t.searchParams.set("workspaceId",n),w({url:t,signal:r,authorization:(await i).value})}}async _authorizePrivateCategoriesAccess(e){const t=this.editor.config.get("ckbox.serviceOrigin"),i=new FormData;i.set("token",e),await fetch(`${t}/categories/authorizePrivateAccess`,{method:"POST",credentials:"include",mode:"no-cors",body:i})}}class C extends e.Plugin{static get requires(){return["ImageUploadEditing","ImageUploadProgress",A.FileRepository,P]}static get pluginName(){return"CKBoxUploadAdapter"}static get isOfficialPlugin(){return!0}async afterInit(){const e=this.editor,t=!!e.config.get("ckbox"),i=!!window.CKBox;if(!t&&!i)return;const r=e.plugins.get(A.FileRepository),o=e.plugins.get(E);r.createUploadAdapter=t=>new O(t,e,o);const n=!e.config.get("ckbox.ignoreDataId"),s=e.plugins.get("ImageUploadEditing");n&&s.on("uploadComplete",((t,{imageElement:i,data:r})=>{e.model.change((e=>{e.setAttribute("ckboxImageId",r.ckboxImageId,i)}))}))}}class O{loader;token;editor;controller;serviceOrigin;ckboxUtils;constructor(e,t,i){this.loader=e,this.token=i.getToken(),this.ckboxUtils=i,this.editor=t,this.controller=new AbortController,this.serviceOrigin=t.config.get("ckbox.serviceOrigin")}async upload(){const e=this.ckboxUtils,t=this.editor.t,i=await this.loader.file,r=await e.getCategoryIdForFile(i,{signal:this.controller.signal}),o=new URL("assets",this.serviceOrigin),n=new FormData;o.searchParams.set("workspaceId",await e.getWorkspaceId()),n.append("categoryId",r),n.append("file",i);return w({method:"POST",url:o,data:n,onUploadProgress:e=>{e.lengthComputable&&(this.loader.uploadTotal=e.total,this.loader.uploaded=e.loaded)},signal:this.controller.signal,authorization:(await this.token).value}).then((async e=>{const t=k(e.imageUrls);return{ckboxImageId:e.id,default:t.imageFallbackUrl,sources:t.imageSources}})).catch((()=>{const e=t("Cannot upload file:")+` ${i.name}.`;return Promise.reject(e)}))}abort(){this.controller.abort()}}const B="NoPermission";class P extends e.Plugin{static get pluginName(){return"CKBoxEditing"}static get isOfficialPlugin(){return!0}static get requires(){return["LinkEditing","PictureEditing",C,E]}init(){const e=this.editor;this._shouldBeInitialised()&&(this._checkImagePlugins(),L()&&e.commands.add("ckbox",new x(e)),async function(e){const t=e.plugins.get(E),i=e.config.get("ckbox.serviceOrigin"),r=new URL("permissions",i),{value:o}=await t.getToken(),n=await w({url:r,authorization:o,signal:(new AbortController).signal});return Object.values(n).some((e=>e["asset:create"]))}(e).then((e=>{e||this._blockImageCommands()})))}afterInit(){const e=this.editor;this._shouldBeInitialised()&&(e.config.get("ckbox.ignoreDataId")||(this._initSchema(),this._initConversion(),this._initFixers()))}_shouldBeInitialised(){return!!this.editor.config.get("ckbox")||L()}_blockImageCommands(){const e=this.editor,t=e.commands.get("uploadImage"),i=e.commands.get("ckboxImageEdit");t&&(t.isAccessAllowed=!1,t.forceDisabled(B)),i&&i.forceDisabled(B)}_checkImagePlugins(){const e=this.editor;e.plugins.has("ImageBlockEditing")||e.plugins.has("ImageInlineEditing")||(0,a.logError)("ckbox-plugin-image-feature-missing",e)}_initSchema(){const e=this.editor.model.schema;e.extend("$text",{allowAttributes:"ckboxLinkId"}),e.isRegistered("imageBlock")&&e.extend("imageBlock",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),e.isRegistered("imageInline")&&e.extend("imageInline",{allowAttributes:["ckboxImageId","ckboxLinkId"]}),e.addAttributeCheck((e=>{if(!e.last.getAttribute("linkHref"))return!1}),"ckboxLinkId")}_initConversion(){const e=this.editor;e.conversion.for("downcast").add((e=>{e.on("attribute:ckboxLinkId:imageBlock",((e,t,i)=>{const{writer:r,mapper:o,consumable:n}=i;if(!n.consume(t.item,e.name))return;const s=[...o.toViewElement(t.item).getChildren()].find((e=>"a"===e.name));s&&(t.item.hasAttribute("ckboxLinkId")?r.setAttribute("data-ckbox-resource-id",t.item.getAttribute("ckboxLinkId"),s):r.removeAttribute("data-ckbox-resource-id",s))}),{priority:"low"}),e.on("attribute:ckboxLinkId",((e,t,i)=>{const{writer:r,mapper:o,consumable:n}=i;if(n.consume(t.item,e.name)){if(t.attributeOldValue){const e=j(r,t.attributeOldValue);r.unwrap(o.toViewRange(t.range),e)}if(t.attributeNewValue){const e=j(r,t.attributeNewValue);if(t.item.is("selection")){const t=r.document.selection;r.wrap(t.getFirstRange(),e)}else r.wrap(o.toViewRange(t.range),e)}}}),{priority:"low"})})),e.conversion.for("upcast").add((e=>{e.on("element:a",((e,t,i)=>{const{writer:r,consumable:o}=i;if(!t.viewItem.getAttribute("href"))return;if(!o.consume(t.viewItem,{attributes:["data-ckbox-resource-id"]}))return;const n=t.viewItem.getAttribute("data-ckbox-resource-id");if(n)if(t.modelRange)for(let e of t.modelRange.getItems())e.is("$textProxy")&&(e=e.textNode),U(e)&&r.setAttribute("ckboxLinkId",n,e);else{const e=t.modelCursor.nodeBefore||t.modelCursor.parent;r.setAttribute("ckboxLinkId",n,e)}}),{priority:"low"})})),e.conversion.for("downcast").attributeToAttribute({model:"ckboxImageId",view:"data-ckbox-resource-id"}),e.conversion.for("upcast").elementToAttribute({model:{key:"ckboxImageId",value:e=>e.getAttribute("data-ckbox-resource-id")},view:{attributes:{"data-ckbox-resource-id":/[\s\S]+/}}});const t=e.commands.get("replaceImageSource");t&&this.listenTo(t,"cleanupImage",((e,[t,i])=>{t.removeAttribute("ckboxImageId",i)}))}_initFixers(){const e=this.editor,t=e.model,i=t.document.selection;t.document.registerPostFixer(function(e){return t=>{let i=!1;const r=e.model,o=e.commands.get("ckbox");if(!o)return i;for(const e of r.document.differ.getChanges()){if("insert"!==e.type&&"attribute"!==e.type)continue;const r="insert"===e.type?new s.Range(e.position,e.position.getShiftedBy(e.length)):e.range,n="attribute"===e.type&&"linkHref"===e.attributeKey&&null===e.attributeNewValue;for(const e of r.getItems()){if(n&&e.hasAttribute("ckboxLinkId")){t.removeAttribute("ckboxLinkId",e),i=!0;continue}const r=S(e,o._chosenAssets);for(const o of r){const r="image"===o.type?"ckboxImageId":"ckboxLinkId";o.id!==e.getAttribute(r)&&(t.setAttribute(r,o.id,e),i=!0)}}}return i}}(e)),t.document.registerPostFixer(function(e){return t=>!(e.hasAttribute("linkHref")||!e.hasAttribute("ckboxLinkId"))&&(t.removeSelectionAttribute("ckboxLinkId"),!0)}(i))}}function S(e,t){const i=e.is("element","imageInline")||e.is("element","imageBlock"),r=e.hasAttribute("linkHref");return[...t].filter((t=>"image"===t.type&&i?t.attributes.imageFallbackUrl===e.getAttribute("src"):"link"===t.type&&r?t.attributes.linkHref===e.getAttribute("linkHref"):void 0))}function j(e,t){const i=e.createAttributeElement("a",{"data-ckbox-resource-id":t},{priority:5});return e.setCustomProperty("link",!0,i),i}function U(e){return!!e.is("$text")||!(!e.is("element","imageInline")&&!e.is("element","imageBlock"))}function L(){return!!window.CKBox}class F extends e.Plugin{static get pluginName(){return"CKBox"}static get isOfficialPlugin(){return!0}static get requires(){return[P,n]}}function T(e){if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}function M(e){return Object.getOwnPropertySymbols(e).filter((t=>Object.prototype.propertyIsEnumerable.call(e,t)))}function N(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const R="[object Arguments]",K="[object Object]";function V(e,t,i,r,o,n,s){const a=s(e,t,i,r,o,n);if(void 0!==a)return a;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t);case"object":return D(e,t,n,s)}return D(e,t,n,s)}function D(e,t,i,r){if(Object.is(e,t))return!0;let o=N(e),n=N(t);if(o===R&&(o=K),n===R&&(n=K),o!==n)return!1;switch(o){case"[object String]":return e.toString()===t.toString();case"[object Number]":{const i=e.valueOf(),r=t.valueOf();return(s=i)===(a=r)||Number.isNaN(s)&&Number.isNaN(a)}case"[object Boolean]":case"[object Date]":case"[object Symbol]":return Object.is(e.valueOf(),t.valueOf());case"[object RegExp]":return e.source===t.source&&e.flags===t.flags;case"[object Function]":return e===t}var s,a;const c=(i=i??new Map).get(e),l=i.get(t);if(null!=c&&null!=l)return c===t;i.set(e,t),i.set(t,e);try{switch(o){case"[object Map]":if(e.size!==t.size)return!1;for(const[o,n]of e.entries())if(!t.has(o)||!V(n,t.get(o),o,e,t,i,r))return!1;return!0;case"[object Set]":{if(e.size!==t.size)return!1;const o=Array.from(e.values()),n=Array.from(t.values());for(let s=0;s<o.length;s++){const a=o[s],c=n.findIndex((o=>V(a,o,void 0,e,t,i,r)));if(-1===c)return!1;n.splice(c,1)}return!0}case"[object Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":case"[object BigUint64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object BigInt64Array]":case"[object Float32Array]":case"[object Float64Array]":if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!V(e[o],t[o],o,e,t,i,r))return!1;return!0;case"[object ArrayBuffer]":return e.byteLength===t.byteLength&&D(new Uint8Array(e),new Uint8Array(t),i,r);case"[object DataView]":return e.byteLength===t.byteLength&&e.byteOffset===t.byteOffset&&D(new Uint8Array(e),new Uint8Array(t),i,r);case"[object Error]":return e.name===t.name&&e.message===t.message;case K:{if(!(D(e.constructor,t.constructor,i,r)||T(e)&&T(t)))return!1;const o=[...Object.keys(e),...M(e)],n=[...Object.keys(t),...M(t)];if(o.length!==n.length)return!1;for(let n=0;n<o.length;n++){const s=o[n],a=e[s];if(!Object.hasOwn(t,s))return!1;if(!V(a,t[s],s,e,t,i,r))return!1}return!0}default:return!1}}finally{i.delete(e),i.delete(t)}}function H(){}function z(e,t){return function(e,t,i){return V(e,t,void 0,void 0,void 0,void 0,i)}(e,t,H)}function $(e){if(Array.isArray(e)){const t=e.map($);return e=>t.some((t=>t(e)))}if("origin"==e){const e=a.global.window.location.origin;return t=>new URL(t,a.global.document.baseURI).origin==e}if("function"==typeof e)return e;if(e instanceof RegExp)return t=>!(!t.match(e)&&!t.replace(/^https?:\/\//,"").match(e));return()=>!1}class q extends e.Command{_wrapper=null;_processInProgress=new Set;_canEdit;_prepareOptions;_updateUiDelayed=(0,a.delay)((()=>this.editor.ui.update()),0);constructor(e){super(e),this.value=!1,this._canEdit=function(e){const t=$(e);return e=>!(!e.is("element","imageInline")&&!e.is("element","imageBlock"))&&(!!e.hasAttribute("ckboxImageId")||!!e.hasAttribute("src")&&t(e.getAttribute("src")))}(e.config.get("ckbox.allowExternalImagesEditing")),this._prepareOptions=(0,a.abortableDebounce)(((e,t)=>this._prepareOptionsAbortable(e,t))),this._prepareListeners()}refresh(){const e=this.editor;this.value=this._getValue();const t=e.model.document.selection.getSelectedElement();this.isEnabled=!!t&&this._canEdit(t)&&!this._checkIfElementIsBeingProcessed(t)}execute(){if(this._getValue())return;const e=(0,a.createElement)(document,"div",{class:"ck ckbox-wrapper"});this._wrapper=e,this.value=!0,document.body.appendChild(this._wrapper);const i={element:this.editor.model.document.selection.getSelectedElement(),controller:new AbortController};this._prepareOptions(i).then((t=>window.CKBox.mountImageEditor(e,t)),(e=>{const i=this.editor,r=i.t;i.plugins.get(t.Notification).showWarning(r("Failed to determine category of edited image."),{namespace:"ckbox"}),console.error(e),this._handleImageEditorClose()}))}destroy(){this._handleImageEditorClose(),this._prepareOptions.abort(),this._updateUiDelayed.cancel();for(const e of this._processInProgress.values())e.controller.abort();super.destroy()}_getValue(){return null!==this._wrapper}async _prepareOptionsAbortable(e,t){const i=this.editor,r=i.config.get("ckbox"),o=i.plugins.get(E),{element:n}=t;let s;const a=n.getAttribute("ckboxImageId");if(a)s={assetId:a};else{const t=new URL(n.getAttribute("src"),document.baseURI).href;s={imageUrl:t,uploadCategoryId:await o.getCategoryIdForFile(t,{signal:e})}}return{...s,imageEditing:{allowOverwrite:!1},tokenUrl:r.tokenUrl,...r.serviceOrigin&&{serviceOrigin:r.serviceOrigin},onClose:()=>this._handleImageEditorClose(),onSave:e=>this._handleImageEditorSave(t,e)}}_prepareListeners(){this.listenTo(this.editor.model.document,"change:data",(()=>{this._getProcessingStatesOfDeletedImages().forEach((e=>{e.controller.abort()}))}))}_getProcessingStatesOfDeletedImages(){const e=[];for(const t of this._processInProgress.values())"$graveyard"==t.element.root.rootName&&e.push(t);return e}_checkIfElementIsBeingProcessed(e){for(const{element:t}of this._processInProgress)if(z(t,e))return!0;return!1}_handleImageEditorClose(){this._wrapper&&(this._wrapper.remove(),this._wrapper=null,this.editor.editing.view.focus(),this._updateUiDelayed(),this.refresh())}_handleImageEditorSave(i,r){const o=this.editor.locale.t,n=this.editor.plugins.get(t.Notification),s=this.editor.plugins.get(e.PendingActions),c=s.add(o("Processing the edited image."));this._processInProgress.add(i),this._showImageProcessingIndicator(i.element,r),this.refresh(),this._waitForAssetProcessed(r.data.id,i.controller.signal).then((e=>{this._replaceImage(i.element,e)}),(e=>{this.editor.editing.reconvertItem(i.element),i.controller.signal.aborted||(!e||e instanceof a.CKEditorError?n.showWarning(o("Server failed to process the image."),{namespace:"ckbox"}):console.error(e))})).finally((()=>{this._processInProgress.delete(i),s.remove(c),this.refresh()}))}async _getAssetStatusFromServer(e,t){const i=this.editor.plugins.get(E),r=new URL("assets/"+e,this.editor.config.get("ckbox.serviceOrigin")),o=await w({url:r,signal:t,authorization:(await i.getToken()).value}),n=o.metadata.metadataProcessingStatus;if(!n||"queued"==n)throw new a.CKEditorError("ckbox-image-not-processed");return{data:{...o}}}async _waitForAssetProcessed(e,t){const i=await(0,a.retry)((()=>this._getAssetStatusFromServer(e,t)),{signal:t,maxAttempts:5});if("success"!=i.data.metadata.metadataProcessingStatus)throw new a.CKEditorError("ckbox-image-processing-failed");return i}_showImageProcessingIndicator(e,t){const i=this.editor;i.editing.view.change((r=>{const o=i.editing.mapper.toViewElement(e),n=this.editor.plugins.get("ImageUtils").findViewImgElement(o);r.removeStyle("aspect-ratio",n),r.setAttribute("width",t.data.metadata.width,n),r.setAttribute("height",t.data.metadata.height,n),r.setStyle("width",`${t.data.metadata.width}px`,n),r.setStyle("height",`${t.data.metadata.height}px`,n),r.addClass("image-processing",o)}))}_replaceImage(e,t){const i=this.editor,{imageFallbackUrl:r,imageSources:o,imageWidth:n,imageHeight:s,imagePlaceholder:a}=v(t),c=Array.from(i.model.document.selection.getRanges());i.model.change((l=>{l.setSelection(e,"on"),i.execute("insertImage",{imageType:e.is("element","imageInline")?"imageInline":null,source:{src:r,sources:o,width:n,height:s,...a?{placeholder:a}:null,...e.hasAttribute("alt")?{alt:e.getAttribute("alt")}:null}});const d=e.getChildren();e=i.model.document.selection.getSelectedElement();for(const t of d)l.append(l.cloneElement(t),e);l.setAttribute("ckboxImageId",t.data.id,e),l.setSelection(c)}))}}class W extends e.Plugin{static get pluginName(){return"CKBoxImageEditEditing"}static get isOfficialPlugin(){return!0}static get requires(){return[P,E,e.PendingActions,t.Notification,"ImageUtils","ImageEditing"]}init(){const{editor:e}=this;e.commands.add("ckboxImageEdit",new q(e))}}class Y extends e.Plugin{static get pluginName(){return"CKBoxImageEditUI"}static get isOfficialPlugin(){return!0}init(){const e=this.editor;e.ui.componentFactory.add("ckboxImageEdit",(i=>{const r=e.commands.get("ckboxImageEdit"),n=e.commands.get("uploadImage"),s=new t.ButtonView(i),a=i.t;return s.set({icon:o.IconCkboxImageEdit,tooltip:!0}),s.bind("label").to(n,"isAccessAllowed",(e=>a(e?"Edit image":"You have no image editing permissions."))),s.bind("isOn").to(r,"value",r,"isEnabled",((e,t)=>e&&t)),s.bind("isEnabled").to(r),this.listenTo(s,"execute",(()=>{e.execute("ckboxImageEdit"),e.editing.view.focus()})),s}))}}var G=i(591),J=i.n(G),X=i(639),Q=i.n(X),Z=i(128),ee=i.n(Z),te=i(21),ie=i.n(te),re=i(51),oe=i.n(re),ne=i(957),se={attributes:{"data-cke":!0}};se.setAttributes=ie(),se.insert=ee().bind(null,"head"),se.domAPI=Q(),se.insertStyleElement=oe();J()(ne.A,se);ne.A&&ne.A.locals&&ne.A.locals;class ae extends e.Plugin{static get pluginName(){return"CKBoxImageEdit"}static get isOfficialPlugin(){return!0}static get requires(){return[W,Y]}}})(),(window.CKEditor5=window.CKEditor5||{}).ckbox=r})();
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e){const i=e.be=e.be||{};i.dictionary=Object.assign(i.dictionary||{},{"Cannot access default workspace.":"Немагчыма атрымаць доступ да прадвызначанай працоўнай прасторы.","Cannot determine a category for the uploaded file.":"Немагчыма вызначыць катэгорыю для запампаванага файла.","Edit image":"Рэдагаваць відарыс","Failed to determine category of edited image.":"Не здольны вызначыць катэгорыю адрэдагаванага відарыса.","Open file manager":"Адкрыць менеджэр файлаў","Processing the edited image.":"Апрацоўка адрэдагаванага відарыса.","Server failed to process the image.":"Сервер не здольны апрацаваць відарыс.","You have no image editing permissions.":"У вас няма дозволу на рэдагаванне відарыса."})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
package/ckeditor5-metadata.json
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
{
|
21
21
|
"name": "ckbox",
|
22
22
|
"type": "Button",
|
23
|
-
"iconPath": "@ckeditor/ckeditor5-
|
23
|
+
"iconPath": "@ckeditor/ckeditor5-icons/theme/icons/browse-files.svg"
|
24
24
|
}
|
25
25
|
],
|
26
26
|
"htmlOutput": [
|
@@ -50,7 +50,7 @@
|
|
50
50
|
{
|
51
51
|
"name": "ckboxImageEdit",
|
52
52
|
"type": "Button",
|
53
|
-
"iconPath": "theme/icons/ckbox-image-edit.svg"
|
53
|
+
"iconPath": "@ckeditor/ckeditor5-icons/theme/icons/ckbox-image-edit.svg"
|
54
54
|
}
|
55
55
|
]
|
56
56
|
}
|
package/dist/index.js
CHANGED
@@ -2,13 +2,14 @@
|
|
2
2
|
* @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
|
3
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
4
4
|
*/
|
5
|
-
import { Plugin,
|
5
|
+
import { Plugin, Command, PendingActions } from '@ckeditor/ckeditor5-core/dist/index.js';
|
6
6
|
import { ButtonView, MenuBarMenuListItemButtonView, Notification } from '@ckeditor/ckeditor5-ui/dist/index.js';
|
7
|
+
import { IconBrowseFiles, IconImageAssetManager, IconCkboxImageEdit } from '@ckeditor/ckeditor5-icons/dist/index.js';
|
7
8
|
import { Range } from '@ckeditor/ckeditor5-engine/dist/index.js';
|
8
9
|
import { createElement, toMap, CKEditorError, logError, global, delay, abortableDebounce, retry } from '@ckeditor/ckeditor5-utils/dist/index.js';
|
9
10
|
import { decode } from 'blurhash';
|
10
11
|
import { FileRepository } from '@ckeditor/ckeditor5-upload/dist/index.js';
|
11
|
-
import { isEqual } from '
|
12
|
+
import { isEqual } from 'es-toolkit/compat';
|
12
13
|
|
13
14
|
/**
|
14
15
|
* Introduces UI components for the `CKBox` plugin.
|
@@ -69,7 +70,7 @@ import { isEqual } from 'lodash-es';
|
|
69
70
|
*/ _createFileToolbarButton() {
|
70
71
|
const t = this.editor.locale.t;
|
71
72
|
const button = this._createButton(ButtonView);
|
72
|
-
button.icon =
|
73
|
+
button.icon = IconBrowseFiles;
|
73
74
|
button.label = t('Open file manager');
|
74
75
|
button.tooltip = true;
|
75
76
|
return button;
|
@@ -80,7 +81,7 @@ import { isEqual } from 'lodash-es';
|
|
80
81
|
const t = this.editor.locale.t;
|
81
82
|
const imageInsertUI = this.editor.plugins.get('ImageInsertUI');
|
82
83
|
const button = this._createButton(ButtonView);
|
83
|
-
button.icon =
|
84
|
+
button.icon = IconImageAssetManager;
|
84
85
|
button.bind('label').to(imageInsertUI, 'isImageSelected', (isImageSelected)=>isImageSelected ? t('Replace image with file manager') : t('Insert image with file manager'));
|
85
86
|
button.tooltip = true;
|
86
87
|
return button;
|
@@ -91,7 +92,7 @@ import { isEqual } from 'lodash-es';
|
|
91
92
|
const t = this.editor.locale.t;
|
92
93
|
const imageInsertUI = this.editor.plugins.get('ImageInsertUI');
|
93
94
|
const button = this._createButton(ButtonView);
|
94
|
-
button.icon =
|
95
|
+
button.icon = IconImageAssetManager;
|
95
96
|
button.withText = true;
|
96
97
|
button.bind('label').to(imageInsertUI, 'isImageSelected', (isImageSelected)=>isImageSelected ? t('Replace with file manager') : t('Insert with file manager'));
|
97
98
|
button.on('execute', ()=>{
|
@@ -104,7 +105,7 @@ import { isEqual } from 'lodash-es';
|
|
104
105
|
*/ _createFileMenuBarButton() {
|
105
106
|
const t = this.editor.locale.t;
|
106
107
|
const button = this._createButton(MenuBarMenuListItemButtonView);
|
107
|
-
button.icon =
|
108
|
+
button.icon = IconBrowseFiles;
|
108
109
|
button.withText = true;
|
109
110
|
button.label = t('File');
|
110
111
|
return button;
|
@@ -116,7 +117,7 @@ import { isEqual } from 'lodash-es';
|
|
116
117
|
const translateVariableKey = this.editor.locale.t;
|
117
118
|
const t = this.editor.locale.t;
|
118
119
|
const button = this._createButton(MenuBarMenuListItemButtonView);
|
119
|
-
button.icon =
|
120
|
+
button.icon = IconImageAssetManager;
|
120
121
|
button.withText = true;
|
121
122
|
switch(type){
|
122
123
|
case 'insertOnly':
|
@@ -165,14 +166,13 @@ import { isEqual } from 'lodash-es';
|
|
165
166
|
*/ function getWorkspaceId(token, defaultWorkspaceId) {
|
166
167
|
const [, binaryTokenPayload] = token.value.split('.');
|
167
168
|
const payload = JSON.parse(atob(binaryTokenPayload));
|
168
|
-
const workspaces = payload.auth
|
169
|
+
const workspaces = payload.auth?.ckbox?.workspaces || [
|
169
170
|
payload.aud
|
170
171
|
];
|
171
172
|
if (!defaultWorkspaceId) {
|
172
173
|
return workspaces[0];
|
173
174
|
}
|
174
|
-
|
175
|
-
if (role == 'superadmin' || workspaces.includes(defaultWorkspaceId)) {
|
175
|
+
if (payload.auth?.ckbox?.role == 'superadmin' || workspaces.includes(defaultWorkspaceId)) {
|
176
176
|
return defaultWorkspaceId;
|
177
177
|
}
|
178
178
|
return null;
|
@@ -723,6 +723,13 @@ const DEFAULT_CKBOX_THEME_NAME = 'lark';
|
|
723
723
|
} else {
|
724
724
|
this._token = cloudServices.registerTokenUrl(ckboxTokenUrl);
|
725
725
|
}
|
726
|
+
// Grant access to private categories after token is fetched. This is done within the same promise chain
|
727
|
+
// to ensure all services using the token have access to private categories.
|
728
|
+
// This step is critical as previewing images from private categories requires proper cookies.
|
729
|
+
this._token = this._token.then(async (token)=>{
|
730
|
+
await this._authorizePrivateCategoriesAccess(token.value);
|
731
|
+
return token;
|
732
|
+
});
|
726
733
|
}
|
727
734
|
/**
|
728
735
|
* Returns a token used by the CKBox plugin for communication with the CKBox service.
|
@@ -823,6 +830,20 @@ const DEFAULT_CKBOX_THEME_NAME = 'lark';
|
|
823
830
|
});
|
824
831
|
}
|
825
832
|
}
|
833
|
+
/**
|
834
|
+
* Authorize private categories access to the CKBox service. Request sets cookie for the current domain,
|
835
|
+
* that allows user to preview images from private categories.
|
836
|
+
*/ async _authorizePrivateCategoriesAccess(token) {
|
837
|
+
const serviceUrl = this.editor.config.get('ckbox.serviceOrigin');
|
838
|
+
const formData = new FormData();
|
839
|
+
formData.set('token', token);
|
840
|
+
await fetch(`${serviceUrl}/categories/authorizePrivateAccess`, {
|
841
|
+
method: 'POST',
|
842
|
+
credentials: 'include',
|
843
|
+
mode: 'no-cors',
|
844
|
+
body: formData
|
845
|
+
});
|
846
|
+
}
|
826
847
|
}
|
827
848
|
|
828
849
|
/**
|
@@ -1735,8 +1756,6 @@ function createUrlChecker(allowExternalImagesEditing) {
|
|
1735
1756
|
}
|
1736
1757
|
}
|
1737
1758
|
|
1738
|
-
var ckboxImageEditIcon = "<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.201 1C.538 1 0 1.47 0 2.1v14.363c0 .64.534 1.037 1.186 1.037H5.06l5.058-5.078L6.617 9.15a.696.696 0 0 0-.957-.033L1.5 13.6V2.5h15v4.354a3.478 3.478 0 0 1 1.5.049V2.1c0-.63-.547-1.1-1.2-1.1H1.202Zm11.713 2.803a2.147 2.147 0 0 0-2.049 1.992 2.14 2.14 0 0 0 1.28 2.096 2.13 2.13 0 0 0 2.642-3.11 2.129 2.129 0 0 0-1.873-.978ZM8.089 17.635v2.388h2.389l7.046-7.046-2.39-2.39-7.045 7.048Zm11.282-6.507a.637.637 0 0 0 .139-.692.603.603 0 0 0-.139-.205l-1.49-1.488a.63.63 0 0 0-.899 0l-1.166 1.163 2.39 2.39 1.165-1.168Z\"/></svg>";
|
1739
|
-
|
1740
1759
|
/**
|
1741
1760
|
* The UI plugin of the CKBox image edit feature.
|
1742
1761
|
*
|
@@ -1763,7 +1782,7 @@ var ckboxImageEditIcon = "<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2
|
|
1763
1782
|
const view = new ButtonView(locale);
|
1764
1783
|
const t = locale.t;
|
1765
1784
|
view.set({
|
1766
|
-
icon:
|
1785
|
+
icon: IconCkboxImageEdit,
|
1767
1786
|
tooltip: true
|
1768
1787
|
});
|
1769
1788
|
view.bind('label').to(uploadImageCommand, 'isAccessAllowed', (isAccessAllowed)=>isAccessAllowed ? t('Edit image') : t('You have no image editing permissions.'));
|