X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=program%2Fjs%2Ftiny_mce%2Fplugins%2Fsearchreplace%2Fjs%2Fsearchreplace.js;h=80284b9f3ff0b33d7348de16cbdf0a162bb89419;hb=511160353722ebec8c258ddd6fa963ec8851eede;hp=890eb37f1abb8e12b8f3ebfdb32c23dcc9cf87c2;hpb=244596b3e5adbf9b7c67bf9d03ee49fbdd915e37;p=roundcube.git diff --git a/program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js b/program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js index 890eb37..80284b9 100644 --- a/program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js +++ b/program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js @@ -2,14 +2,18 @@ tinyMCEPopup.requireLangPack(); var SearchReplaceDialog = { init : function(ed) { - var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); - this.switchMode(m); + t.switchMode(m); f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); // Focus input field f[m + '_panel_searchstring'].focus(); + + mcTabs.onChange.add(function(tab_id, panel_id) { + t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); + }); }, switchMode : function(m) { @@ -42,18 +46,23 @@ var SearchReplaceDialog = { ca = f[m + '_panel_casesensitivebox'].checked; rs = f['replace_panel_replacestring'].value; + if (tinymce.isIE) { + r = ed.getDoc().selection.createRange(); + } + + if (s == '') + return; + function fix() { // Correct Firefox graphics glitches + // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? r = se.getRng().cloneRange(); ed.getDoc().execCommand('SelectAll', false, null); se.setRng(r); }; function replace() { - if (tinymce.isIE) - ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE - else - ed.getDoc().execCommand('InsertHTML', false, rs); + ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE }; // IE flags @@ -62,12 +71,23 @@ var SearchReplaceDialog = { switch (a) { case 'all': + // Move caret to beginning of text + ed.execCommand('SelectAll'); + ed.selection.collapse(true); + if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + while (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); r.select(); replace(); fo = 1; + + if (b) { + r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } } tinyMCEPopup.storeSelection(); @@ -79,14 +99,16 @@ var SearchReplaceDialog = { } if (fo) - wm.alert(ed.getLang('searchreplace_dlg.allreplaced')); + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); else - wm.alert(ed.getLang('searchreplace_dlg.notfound')); + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); return; case 'current': - replace(); + if (!ed.selection.isCollapsed()) + replace(); + break; } @@ -98,16 +120,19 @@ var SearchReplaceDialog = { return; if (tinymce.isIE) { + ed.focus(); + r = ed.getDoc().selection.createRange(); + if (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); r.select(); } else - wm.alert(ed.getLang('searchreplace_dlg.notfound')); + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); tinyMCEPopup.storeSelection(); } else { if (!w.find(s, ca, b, false, false, false, false)) - wm.alert(ed.getLang('searchreplace_dlg.notfound')); + tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); else fix(); }