(function(e,t){"use strict";var n={};function r(e,t){var r,i=[];for(var o=0;o=h.end){i=f;s=h.end-d}else if(r){u.push(f)}if(!r&&f.length+d>h.start){r=f;o=h.start-d}d+=f.length}if(r&&i){f=n({startNode:r,startNodeIndex:o,endNode:i,endNodeIndex:s,innerNodes:u,match:h.text,matchIndex:g});d-=i.length-s;r=null;i=null;u=[];h=t.shift();g++;if(!h){break}}else if((!l[f.nodeName]||a[f.nodeName])&&f.firstChild){f=f.firstChild;continue}else if(f.nextSibling){f=f.nextSibling;continue}while(true){if(f.nextSibling){f=f.nextSibling;break}else if(f.parentNode!==e){f=f.parentNode}else{break e}}}}function f(e){function t(t,n){var i=r[n];if(!i.stencil){i.stencil=e(i)}var a=i.stencil.cloneNode(false);a.setAttribute("data-mce-index",n);if(t){a.appendChild(o.doc.createTextNode(t))}return a}return function(e){var n,r,i,a=e.startNode,l=e.endNode,c=e.matchIndex,s=o.doc;if(a===l){var u=a;i=u.parentNode;if(e.startNodeIndex>0){n=s.createTextNode(u.data.substring(0,e.startNodeIndex));i.insertBefore(n,u)}var d=t(e.match,c);i.insertBefore(d,u);if(e.endNodeIndex0){r.insertNode(t.dom.doc.createTextNode(n))}return r}function B(){r.splice(0,r.length);k();return this}i=u(e);return{text:i,matches:r,each:v,filter:m,reset:B,matchFromElement:w,elementFromMatch:b,find:N,add:y,wrap:x,unwrap:k,replace:T,rangeFromMatch:S,indexOf:p}}});i("tinymce/spellcheckerplugin/Plugin",["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/PluginManager","tinymce/util/Tools","tinymce/ui/Menu","tinymce/dom/DOMUtils","tinymce/util/XHR","tinymce/util/URI","tinymce/util/JSON"],function(e,t,n,r,i,o,a,l){t.add("spellchecker",function(t,c){var s,u=this,d,f,h,g=t.settings;function p(){if(!u.textMatcher){u.textMatcher=new e(t.getBody(),t)}return u.textMatcher}function m(e,t){var r=[];n.each(t,function(e){r.push({selectable:true,text:e.name,data:e.value})});return r}var v=g.spellchecker_languages||"English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,"+"German=de,Italian=it,Polish=pl,Portuguese=pt_BR,"+"Spanish=es,Swedish=sv";s=m("Language",n.map(v.split(","),function(e){var t=e.split("=");return{name:t[0],value:t[1]}}));function x(e){for(var t in e){return false}return true}function N(e,o){var a=[],l=d[e];n.each(l,function(e){a.push({text:e,onclick:function(){t.insertContent(t.dom.encode(e));t.dom.remove(o);b()}})});a.push.apply(a,[{text:"-"},{text:"Ignore",onclick:function(){y(e,o)}},{text:"Ignore all",onclick:function(){y(e,o,true)}},{text:"Finish",onclick:S}]);h=new r({items:a,context:"contextmenu",onautohide:function(e){if(e.target.className.indexOf("spellchecker")!=-1){e.preventDefault()}},onhide:function(){h.remove();h=null}});h.renderTo(document.body);var c=i.DOM.getPos(t.getContentAreaContainer());var s=t.dom.getPos(o[0]);var u=t.dom.getRoot();if(u.nodeName=="BODY"){s.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft;s.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop}else{s.x-=u.scrollLeft;s.y-=u.scrollTop}c.x+=s.x;c.y+=s.y;h.moveTo(c.x,c.y+o[0].offsetHeight)}function k(){return t.getParam("spellchecker_wordchar_pattern")||new RegExp("[^"+'\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`'+"§©«®±¶·¸»"+"¼½¾¿×÷¤”“„"+"]+","g")}function w(){if(f){S();return}else{S()}f=true;function e(e){t.setProgressState(false);if(x(e)){t.windowManager.alert("No misspellings found");f=false;return}d=e;p().find(k()).filter(function(t){return!!e[t.text]}).wrap(function(e){return t.dom.create("span",{class:"mce-spellchecker-word","data-mce-bogus":1,"data-mce-word":e.text})});t.fire("SpellcheckStart")}function n(e){t.windowManager.alert(e);t.setProgressState(false);S()}function r(e,t,r){o.send({url:new a(c).toAbsolute(g.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:"text="+encodeURIComponent(t)+"&lang="+g.spellchecker_language,success:function(e){e=l.parse(e);if(!e){n("Sever response wasn't proper JSON.")}else if(e.error){n(e.error)}else{r(e.words)}},error:function(e,t){n("Spellchecker request error: "+t.status)}})}t.setProgressState(true);var i=g.spellchecker_callback||r;i.call(u,"spellcheck",p().text,e,n);t.focus()}function b(){if(!t.dom.select("span.mce-spellchecker-word").length){S()}}function y(e,r,i){t.selection.collapse();if(i){n.each(t.dom.select("span.mce-spellchecker-word"),function(n){if(n.getAttribute("data-mce-word")==e){t.dom.remove(n,true)}})}else{t.dom.remove(r,true)}b()}function S(){p().reset();u.textMatcher=null;if(f){f=false;t.fire("SpellcheckEnd")}}function T(e){var t=e.getAttribute("data-mce-index");if(typeof t=="number"){return""+t}return t}function B(e){var r,i=[];r=n.toArray(t.getBody().getElementsByTagName("span"));if(r.length){for(var o=0;o0){var i=t.dom.createRng();i.setStartBefore(r[0]);i.setEndAfter(r[r.length-1]);t.selection.setRng(i);N(n.getAttribute("data-mce-word"),r)}}});t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:w,selectable:true,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(f)})}});function C(e){var t=g.spellchecker_language;e.control.items().each(function(e){e.active(e.settings.data===t)})}var I={tooltip:"Spellcheck",onclick:w,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(f)})}};if(s.length>1){I.type="splitbutton";I.menu=s;I.onshow=C;I.onselect=function(e){g.spellchecker_language=e.control.settings.data}}t.addButton("spellchecker",I);t.addCommand("mceSpellCheck",w);t.on("remove",function(){if(h){h.remove();h=null}});t.on("change",b);this.getTextMatcher=p;this.getWordCharPattern=k;this.getLanguage=function(){return g.spellchecker_language};g.spellchecker_language=g.spellchecker_language||g.language||"en"})});l(["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/spellcheckerplugin/Plugin"])})(this);