(function(){function e(a){l.call(this,a);this.hintContainer=this.codeContainer=null}var l=ToolbarConfigurator.AbstractToolbarModifier,g=ToolbarConfigurator.FullToolbarEditor;ToolbarConfigurator.ToolbarTextModifier=e;e.prototype=Object.create(l.prototype);e.prototype._onInit=function(a,d){l.prototype._onInit.call(this,void 0,d);this._createModifier(d?this.actualConfig:void 0);“function”===typeof a&&a(this.mainContainer)};e.prototype._createModifier=function(a){function d(a){var b=c(a);if(null!==b.charsBetween){var d= k.getUnusedButtonsArray(k.actualConfig.toolbar,!0,b.charsBetween),e=a.getCursor(),b=CodeMirror.Pos(e.line,e.ch-b.charsBetween.length),h=a.getTokenAt(e);“{”===a.getTokenAt({line:e.line,ch:h.start}).string&&(d=);if(0!==d.length)return new f(b,e,d)}}function f(a,c,b){this.from=a;this.to=c;this.list=b;this._handlers=[]}function c(a,c){var b={};b.cur=a.getCursor();b.tok=a.getTokenAt(b.cur);b=c||b.tok.string.charAt(b.tok.string.length-1);var d=a.getRange(CodeMirror.Pos(b.cur.line,0),b.cur).split(“”).reverse().join(“”), d=d.replace(/(w*)/g,”“);b.charsBetween=d.match(/(^w*)()/);b.charsBetween&&(b.endChar=b.charsBetween,b.charsBetween=b.charsBetween.split(”“).reverse().join(”“));return b}function b(a){setTimeout(function(){a.state.completionActive||CodeMirror.showHint(a,d,{hintsClass:”toolbar-modifier“,completeSingle:!1})},100);return CodeMirror.Pass}var k=this;this._createToolbar();this.toolbarContainer&&this.mainContainer.append(this.toolbarContainer);l.prototype._createModifier.call(this); this._setupActualConfig(a);a=this.actualConfig.toolbar;a=CKEDITOR.tools.isArray(a)?”tconfig.toolbar x3d “+(”[ntt“+g.map(a,function(a){return l.stringifyJSONintoOneLine(a,{addSpaces:!0,noQuotesOnKey:!0,singleQuotes:!0})}).join(”,ntt“)+”nt]“)+”;“:”config.toolbar x3d [];“;a=[”CKEDITOR.editorConfig x3d function( config ) {n“,a,”n};“].join(”“);var e=new CKEDITOR.dom.element(”div“);e.addClass(”codemirror-wrapper“);this.modifyContainer.append(e);this.codeContainer=CodeMirror(e.$,{mode:{name:”javascript“, json:!0},lineNumbers:!1,lineWrapping:!0,viewportMargin:Infinity,value:a,smartIndent:!1,indentWithTabs:!0,indentUnit:4,tabSize:4,theme:”neo“,extraKeys:{Left:b,Right:b,”'''“:b,”'"'“:b,Backspace:b,Delete:b,”Shift-Tab“:”indentLess“}});this.codeContainer.on(”endCompletion“,function(a,b){var d=c(a);void 0!==b&&a.replaceSelection(d.endChar)});this.codeContainer.on(”change“,function(){var a=k.codeContainer.getValue(),a=k._evaluateValue(a);null!==a?(k.actualConfig.toolbar=a.toolbar?a.toolbar:k.actualConfig.toolbar, k._fillHintByUnusedElements(),k._refreshEditor(),k.mainContainer.removeClass(”invalid“)):k.mainContainer.addClass(”invalid“)});this.hintContainer=new CKEDITOR.dom.element(”div“);this.hintContainer.addClass(”toolbarModifier-hints“);this._fillHintByUnusedElements();this.hintContainer.insertBefore(e)};e.prototype._fillHintByUnusedElements=function(){var a=this.getUnusedButtonsArray(this.actualConfig.toolbar,!0),a=this.groupButtonNamesByGroup(a),d=g.map(a,function(a){var b=g.map(a.buttons,function(a){return”x3ccodex3e“+ a+”x3c/codex3e “}).join(”“);return.join(”“)}).join(” “),f='x3cdt classx3d”list-header“x3eToolbar groupx3c/dtx3ex3cdd classx3d”list-header“x3eUnused itemsx3c/ddx3e';a.length||(f=”x3cpx3eAll items are in use.x3c/px3e“);this.codeContainer.refresh();this.hintContainer.setHtml(”x3ch3x3eUnused toolbar itemsx3c/h3x3ex3cdlx3e“+f+d+”x3c/dlx3e“)};e.prototype.getToolbarGroupByButtonName=function(a){var d= this.fullToolbarEditor.buttonNamesByGroup,f;for(f in d)for(var c=d,b=c.length;b–;)if(a===c)return f;return null};e.prototype.getUnusedButtonsArray=function(a,d,f){d=!0===d?!0:!1;var c=e.mapToolbarCfgToElementsList(a);a=Object.keys(this.fullToolbarEditor.editorInstance.ui.items);a=g.filter(a,function(a){var d=”-“===a;a=void 0===f||0===a.toLowerCase().indexOf(f.toLowerCase());return!d&&a});a=g.filter(a,function(a){return-1==CKEDITOR.tools.indexOf(c,a)});d&&a.sort();return a};e.prototype.groupButtonNamesByGroup= function(a){var d=[],f=JSON.parse(JSON.stringify(this.fullToolbarEditor.buttonNamesByGroup)),c;for(c in f){var b=f,b=g.filter(b,function(b){return-1!==CKEDITOR.tools.indexOf(a,b)});b.length&&d.push({name:c,buttons:b})}return d};e.mapToolbarCfgToElementsList=function(a){function d(a){return”-“!==a}for(var f=[],c=a.length,b=0;b&&”string“!==typeof a&&(f=f.concat(g.filter(a.items,d)));return f};e.prototype._setupActualConfig=function(a){a=a||this.editorInstance.config;CKEDITOR.tools.isArray(a.toolbar)|| (a.toolbarGroups||(a.toolbarGroups=this.fullToolbarEditor.getFullToolbarGroupsConfig(!0)),this._fixGroups(a),a.toolbar=this._mapToolbarGroupsToToolbar(a.toolbarGroups,this.actualConfig.removeButtons),this.actualConfig.toolbar=a.toolbar,this.actualConfig.removeButtons=”“)};e.prototype._mapToolbarGroupsToToolbar=function(a,d){d=d||this.editorInstance.config.removedBtns;d=”string“==typeof d?d.split(”,“):[];for(var f=a.length;f–;){var c=this._mapToolbarSubgroup(a,d);”separator“===a.type?a=”/“: CKEDITOR.tools.isArray©&&0===c.length?a.splice(f,1):a=”string“==typeof c?c:{name:a.name,items:c}}return a};e.prototype._mapToolbarSubgroup=function(a,d){if(”string“==typeof a)return a;for(var f=a.groups?a.groups.length:0,c=[],b=0;b<f;b+=1){var e=a.groups,e=this.fullToolbarEditor.buttonsByGroup[”string“===typeof e?e:e.name]||[],e=this._mapButtonsToButtonsNames(e,d),g=e.length,c=c.concat(e);g&&c.push(”-“)}”-“==c&&c.pop();return c};e.prototype._mapButtonsToButtonsNames=function(a, d){for(var f=a.length;f–;){var c=a,c=”string“===typeof c?c:this.fullToolbarEditor.getCamelCasedButtonName(c.name);-1!==CKEDITOR.tools.indexOf(d,c)?a.splice(f,1):a=c}return a};e.prototype._evaluateValue=function(a){var d;try{var f={};Function(”var CKEDITOR x3d {}; “a”; return CKEDITOR;“)().editorConfig(f);d=f;for(var c=d.toolbar.length;c–;)d.toolbar||d.toolbar.splice(c,1)}catch(b){d=null}return d};e.prototype.mapToolbarToToolbarGroups=function(a){function d(a,b){a=a.slice();for(var d= b.length;d–;){var c=a.indexOf(b);-1!==c&&a.splice(c,1)}return a}for(var f={},c=[],b=,c=a.length,e=0;e)b.push(”/“);else{var g=a.items,m={};m.name=a.name;m.groups=[];for(var l=g.length,p=0;p<l;p++){var n=g;if(”-“!==n){var h=this.getToolbarGroupByButtonName(n);-1===m.groups.indexOf(h)&&m.groups.push(h);f=f||{};h=f.buttons=f.buttons||{};h=h||{used:0,origin:m.name};h.used++}}b.push(m)}c=function(a,b){var c=[],e;for(e in a)var f=a,g=b.slice(), c=c.concat(d(g,Object.keys(f.buttons)));return c}(f,this.fullToolbarEditor.buttonNamesByGroup);return{toolbarGroups:b,removeButtons:c.join(”,“)}};return e})();