UNPKG

@webspellchecker/wproofreader-ckeditor5

Version:

Multilingual spelling and grammar checking plugin for CKEditor 5

3 lines (2 loc) 8.84 kB
import{Command as e,Plugin as t}from"ckeditor5";import{createDropdown as s,addListToDropdown as i,ViewModel as r}from"ckeditor5";import{Collection as o}from"ckeditor5";var n='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><polygon points="10.46 17.747 7.014 14.292 8.076 13.232 10.461 15.624 16.377 9.708 17.437 10.768 10.46 17.747"/><path d="M10.147,12.276c.063.153.138.331.226.531a2.7,2.7,0,0,0,.144.286L12,11.614l-.01-.027L9.4,5.189c-.122-.321-.222-.576-.3-.768A2.871,2.871,0,0,0,8.8,3.883a1.355,1.355,0,0,0-.453-.409,1.4,1.4,0,0,0-.7-.159,1.387,1.387,0,0,0-.693.159,1.314,1.314,0,0,0-.453.416,3.4,3.4,0,0,0-.325.646L5.92,5.2,3.383,11.641c-.1.257-.178.457-.223.6a1.4,1.4,0,0,0-.067.419.852.852,0,0,0,.29.629.941.941,0,0,0,.67.277.756.756,0,0,0,.643-.26,4.432,4.432,0,0,0,.473-1l.473-1.272H9.673ZM6.17,9.524,7.638,5.432,9.132,9.524Z"/></svg>\n';class a extends e{execute(){this.editor.plugins.get("WProofreader").toggle()}}class d extends e{execute(){this.editor.plugins.get("WProofreader").openSettings()}}class c extends e{execute(){this.editor.plugins.get("WProofreader").openDialog()}}class h extends t{static get pluginName(){return"WProofreaderEditing"}init(){this._addCommands()}afterInit(){this._enableInModes([{modeName:"TrackChanges",editingName:"TrackChangesEditing"},{modeName:"RestrictedEditingMode",editingName:"RestrictedEditingModeEditing"}])}_addCommands(){this.editor.commands.add("WProofreaderToggle",new a(this.editor)),this.editor.commands.add("WProofreaderSettings",new d(this.editor)),this.editor.commands.add("WProofreaderDialog",new c(this.editor))}_enableInModes(e){e.forEach((e=>{this._enableInMode(e.modeName,e.editingName)}))}_enableInMode(e,t){if(this.editor.plugins.has(e)){const e=this.editor.plugins.get(t);["WProofreaderToggle","WProofreaderSettings","WProofreaderDialog"].forEach((t=>e.enableCommand(t)))}}}class l extends t{static get pluginName(){return"WProofreaderUI"}constructor(e){super(e),this._commands={toggle:"WProofreaderToggle",settings:"WProofreaderSettings",proofreadDialog:"WProofreaderDialog"}}init(){this._registerDropdown()}_registerDropdown(){const e=this.editor,t=e.plugins.get("WProofreader");e.ui.componentFactory.add("wproofreader",(r=>{const o=s(r);let a,d;return o.buttonView.set({label:"WProofreader text checker",icon:n,tooltip:!0}),o.on("change:isOpen",(()=>{const e=t.isInstancesReady(),s=t.isInstancesEnabled();e?(a||(d=t.getStaticActions(),a=this._getDropdownItemsDefinitions(d),i(o,a)),o.class="",a.map((e=>{e.model.class=s?"":"ck-hidden","WProofreaderToggle"===e.model.commandParam&&(e.model.label=s?e.model.localization.disable:e.model.localization.enable,e.model.class="")}))):o.class="ck-wproofreader-empty"})),o.on("execute",(t=>{e.execute(t.source.commandParam)})),o.bind("isEnabled").to(e.commands.get("WProofreaderToggle")),o}))}_getDropdownItemsDefinitions(e){const t=new o;return e.forEach((e=>{const s={type:"button",model:new r({commandParam:this._commands[e.name],label:e.localization.default,localization:e.localization,class:"",withText:!0})};t.add(s)})),t}}class g{constructor(){this._create()}_create(){window.WPROOFREADER_SRCSTORAGE=window.WPROOFREADER_SRCSTORAGE||{},this._storage=window.WPROOFREADER_SRCSTORAGE}has(e){return!!this._storage[e]}add(e){this._storage[e]={onLoad:[],onError:[]}}addCallbacks(e,t,s){this._storage[e].onLoad.push(t),this._storage[e].onError.push(s)}eachOnLoad(e,t){this._storage[e].onLoad.forEach(t)}eachOnError(e,t){this._storage[e].onError.forEach(t)}delete(e){delete this._storage[e]}get(e){return this._storage[e]}}class _{constructor(e){this._validateSrc(e),this._src=e,this._globalSrcStorage=new g}load(){return new Promise(((e,t)=>{this._isScriptOnPage()?this._processExistingScript(e,t):this._createScript(e,t)}))}_validateSrc(e){if(!e)throw new Error("Path to the script is not specified.")}_isScriptOnPage(){return!!document.querySelector('script[src="'+this._src+'"]')}_createScript(e,t){this._script=this._createElement(),this._globalSrcStorage.add(this._src),this._globalSrcStorage.addCallbacks(this._src,e,t),this._subscribeOnScriptLoad(),this._subscribeOnScriptError(),this._appendScript(this._script)}_createElement(){const e=document.createElement("script");return e.type="text/javascript",e.charset="UTF-8",e.src=this._src,e}_subscribeOnScriptLoad(){this._script.onload=()=>{this._globalSrcStorage.eachOnLoad(this._src,(e=>{e()})),this._destroy()}}_subscribeOnScriptError(){this._script.onerror=()=>{const e=new Error(`${this._src} failed to load.`);this._globalSrcStorage.eachOnError(this._src,(t=>{t(e)})),this._destroy()}}_destroy(){this._removeListeners(),this._globalSrcStorage.delete(this._src),this._src=null,this._script=null}_removeListeners(){this._script.onload=null,this._script.onerror=null}_appendScript(e){document.getElementsByTagName("head")[0].appendChild(e)}_processExistingScript(e,t){this._globalSrcStorage.has(this._src)?this._addCallbacks(e,t):this._processLoadedScript(e)}_addCallbacks(e,t){this._globalSrcStorage.addCallbacks(this._src,e,t)}_processLoadedScript(e){e()}}const p="InstancesDisabling";class m extends t{static get requires(){return[h,l]}static get pluginName(){return"WProofreader"}constructor(e){super(e),this.set("isToggleCommandEnabled",!0),this._instances=[],this._restrictedEditingName="RestrictedEditingMode"}init(){this._userOptions=this._getUserOptions(),this._setTheme(),this._setAutoStartup(),this._setBadgeOffset(),this._setIsEnabled(this._userOptions.autoStartup,p),this._loadWscbundle().then((()=>{this._handleWscbundleLoaded()})).catch((e=>{throw new Error(e)})),this.bind("isToggleCommandEnabled").to(this.editor.commands.get("WProofreaderToggle"),"isEnabled",(e=>this._handleToggleCommandEnabled(e)))}destroy(){super.destroy(),this._instances.forEach((e=>e.destroy())),this._instances=null}_getUserOptions(){const e=this.editor.config.get("wproofreader");if(!e)throw new Error("No WProofreader configuration.");return e}_setTheme(){this._userOptions.theme||(this._userOptions.theme="ckeditor5")}_setAutoStartup(){Object.prototype.hasOwnProperty.call(this._userOptions,"autoStartup")||(this._userOptions.autoStartup=!0)}_setBadgeOffset(){this._userOptions.fullSizeBadge||(Object.prototype.hasOwnProperty.call(this._userOptions,"badgeOffsetX")||(this._userOptions.badgeOffsetX=11),Object.prototype.hasOwnProperty.call(this._userOptions,"badgeOffsetY")||(this._userOptions.badgeOffsetY=11))}_setIsEnabled(e,t){e?this.clearForceDisabled(t):this.forceDisabled(t)}_loadWscbundle(){return new _(this._userOptions.srcUrl).load().then((()=>{if(!window.WEBSPELLCHECKER)throw new Error("WEBSPELLCHECKER is not defined.")}))}_handleWscbundleLoaded(){"ready"===this.editor.state?this._createInstances():this._subscribeOnEditorReady()}_createInstances(){const e=this.editor.editing.view.domRoots.values();this._setFields();for(const t of e)this._createInstance(t)}_setFields(){this._isRestrictedEditingMode=this._checkRestrictedEditingMode(),this._options=this._createOptions()}_checkRestrictedEditingMode(){return this.editor.plugins.has(this._restrictedEditingName)}_createOptions(){return{appType:"proofreader_ck5",restrictedEditingMode:this._isRestrictedEditingMode,disableBadgePulsing:!0,onCommitOptions:this._onCommitOptions.bind(this),onToggle:this._onToggle.bind(this)}}_onCommitOptions(e){this._syncOptions(e)}_syncOptions(e){this._instances.forEach((t=>{t.commitOption(e,{ignoreCallback:!0})}))}_onToggle(e){const t=!e.isDisabled();this._setIsEnabled(t,p),this._syncToggle(t)}_syncToggle(e){this._instances.forEach((t=>{e?this._enableInstance(t):this._disableInstance(t)}))}_enableInstance(e){this.isEnabled&&e.enable({ignoreCallback:!0})}_disableInstance(e){e.disable({ignoreCallback:!0})}_createInstance(e){window.WEBSPELLCHECKER.init(this._mergeOptions(e),this._handleInstanceCreated.bind(this))}_mergeOptions(e){return Object.assign({},this._userOptions,this._options,{container:e})}_handleInstanceCreated(e){e&&("destroyed"!==this.editor.state?(this.isEnabled||this._disableInstance(e),this._instances.push(e)):e.destroy())}_subscribeOnEditorReady(){this.editor.on("ready",(()=>{this._createInstances()}))}_handleToggleCommandEnabled(e){return this._setIsEnabled(e,"WProofreaderToggleCommandDisabling"),this._syncToggle(e),e}getStaticActions(){return 0===this._instances.length?[]:this._instances[0].getStaticActions()}toggle(){if(0===this._instances.length)return;const e=this.isInstancesEnabled();this._setIsEnabled(!e,p),this._syncToggle(!e)}openSettings(){0!==this._instances.length&&this._instances[0].openSettings()}openDialog(){0!==this._instances.length&&this._instances[0].openDialog()}isInstancesReady(){return this._instances.length>0}isInstancesEnabled(){return 0!==this._instances.length&&!this._instances[0].isDisabled()}}const u={wproofreaderIcon:n};export{m as WProofreader,u as icons}; //# sourceMappingURL=index.js.map