@webspellchecker/wproofreader-ckeditor5
Version:
Multilingual spelling and grammar checking plugin for CKEditor 5
14 lines (10 loc) • 9.38 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('ckeditor5')) :
typeof define === 'function' && define.amd ? define(['exports', 'ckeditor5'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@webspellchecker/wproofreader-ckeditor5"] = {}, global.CKEDITOR));
})(this, (function (exports, ckeditor5) { 'use strict';
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 ckeditor5.Command{execute(){this.editor.plugins.get("WProofreader").toggle();}}class d extends ckeditor5.Command{execute(){this.editor.plugins.get("WProofreader").openSettings();}}class c extends ckeditor5.Command{execute(){this.editor.plugins.get("WProofreader").openDialog();}}class h extends ckeditor5.Plugin{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 ckeditor5.Plugin{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=ckeditor5.createDropdown(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),ckeditor5.addListToDropdown(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 ckeditor5.Collection;return e.forEach((e=>{const s={type:"button",model:new ckeditor5.ViewModel({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 ckeditor5.Plugin{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};
exports.WProofreader = m;
exports.icons = u;
}));
//# sourceMappingURL=index.umd.js.map