From a2e09c950d8716346b151f7980df1b51ebfbdd78 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Tue, 15 Apr 2014 12:35:33 -0400 Subject: [PATCH] Use methods chaining, don't use deprecated row_init method --- program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js | 120 +++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 78 insertions(+), 42 deletions(-) diff --git a/program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js index b49fdf7..5751b0e 100644 --- a/program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js +++ b/program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js @@ -126,6 +126,7 @@ c.onRenderMenu.add(function(c, m) { m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + t.menuItems = {}; each(t.languages, function(v, k) { var o = {icon : 1}, mi; @@ -133,26 +134,59 @@ if (v == t.selectedLang) { return; } - mi.setSelected(1); - t.selectedItem.setSelected(0); - t.selectedItem = mi; + t._updateMenu(mi); t.selectedLang = v; }; o.title = k; mi = m.add(o); mi.setSelected(v == t.selectedLang); - + t.menuItems[v] = mi; if (v == t.selectedLang) t.selectedItem = mi; - }) + }); }); + + return c; } }, + setLanguage: function(lang) { + var t = this; + + if (lang == t.selectedLang) { + // allowed + return; + } + + if (tinymce.grep(t.languages, function(v) { return v === lang; }).length === 0) { + throw "Unknown language: " + lang; + } + + t.selectedLang = lang; + + // if the menu has been shown, update it as well + if (t.menuItems) { + t._updateMenu(t.menuItems[lang]); + } + + if (t.active) { + // clear error in the old language. + t._done(); + + // Don't immediately block the UI to check spelling in the new language, this is an API not a user action. + } + }, + // Internal functions + + _updateMenu: function(mi) { + mi.setSelected(1); + this.selectedItem.setSelected(0); + this.selectedItem = mi; + }, _walk : function(n, f) { var d = this.editor.getDoc(), w; @@ -208,7 +242,7 @@ }, _removeWords : function(w) { - var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark(); + var ed = this.editor, dom = ed.dom, se = ed.selection, r = se.getRng(true); each(dom.select('span').reverse(), function(n) { if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) { @@ -217,11 +251,11 @@ } }); - se.moveToBookmark(b); + se.setRng(r); }, _markWords : function(wl) { - var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark(), nl = [], + var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, r = se.getRng(true), nl = [], w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g'); // Collect all text nodes @@ -235,6 +269,7 @@ each(nl, function(n) { var node, elem, txt, pos, v = n.nodeValue; + rx.lastIndex = 0; if (rx.test(v)) { // Encode the content v = dom.encode(v); @@ -254,7 +289,7 @@ // Add text node for the content before the word txt = v.substring(0, pos); if (txt.length) { - node = document.createTextNode(dom.decode(txt)); + node = doc.createTextNode(dom.decode(txt)); elem.appendChild(node); } v = v.substring(pos+10); @@ -266,7 +301,7 @@ } // Add text node for the rest of the content if (v.length) { - node = document.createTextNode(dom.decode(v)); + node = doc.createTextNode(dom.decode(v)); elem.appendChild(node); } } else { @@ -279,7 +314,7 @@ } }); - se.moveToBookmark(b); + se.setRng(r); }, _showMenu : function(ed, e) { @@ -314,43 +349,44 @@ } else m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); - ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); - m.add({ - title : 'spellchecker.ignore_word', - onclick : function() { - var word = wordSpan.innerHTML; + if (ed.getParam('show_ignore_words', true)) { + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; - dom.remove(wordSpan, 1); - t._checkDone(); + dom.remove(wordSpan, 1); + t._checkDone(); - // tell the server if we need to - if (ignoreRpc) { - ed.setProgressState(1); - t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { - ed.setProgressState(0); - }); + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } } - } - }); + }); - m.add({ - title : 'spellchecker.ignore_words', - onclick : function() { - var word = wordSpan.innerHTML; + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; - t._removeWords(dom.decode(word)); - t._checkDone(); + t._removeWords(dom.decode(word)); + t._checkDone(); - // tell the server if we need to - if (ignoreRpc) { - ed.setProgressState(1); - t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { - ed.setProgressState(0); - }); + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } } - } - }); - + }); + } if (t.editor.getParam("spellchecker_enable_learn_rpc")) { m.add({ @@ -372,7 +408,7 @@ m.update(); }); - p1 = dom.getPos(ed.getContentAreaContainer()); + p1 = DOM.getPos(ed.getContentAreaContainer()); m.settings.offset_x = p1.x; m.settings.offset_y = p1.y; -- Gitblit v1.9.1