bgneal@45: tinyMCEPopup.requireLangPack(); bgneal@45: bgneal@45: var SearchReplaceDialog = { bgneal@45: init : function(ed) { bgneal@45: var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); bgneal@45: bgneal@45: this.switchMode(m); bgneal@45: bgneal@45: f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); bgneal@45: bgneal@45: // Focus input field bgneal@45: f[m + '_panel_searchstring'].focus(); bgneal@45: }, bgneal@45: bgneal@45: switchMode : function(m) { bgneal@45: var f, lm = this.lastMode; bgneal@45: bgneal@45: if (lm != m) { bgneal@45: f = document.forms[0]; bgneal@45: bgneal@45: if (lm) { bgneal@45: f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; bgneal@45: f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; bgneal@45: f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; bgneal@45: f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; bgneal@45: } bgneal@45: bgneal@45: mcTabs.displayTab(m + '_tab', m + '_panel'); bgneal@45: document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; bgneal@45: document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; bgneal@45: this.lastMode = m; bgneal@45: } bgneal@45: }, bgneal@45: bgneal@45: searchNext : function(a) { bgneal@45: var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; bgneal@45: bgneal@45: // Get input bgneal@45: f = document.forms[0]; bgneal@45: s = f[m + '_panel_searchstring'].value; bgneal@45: b = f[m + '_panel_backwardsu'].checked; bgneal@45: ca = f[m + '_panel_casesensitivebox'].checked; bgneal@45: rs = f['replace_panel_replacestring'].value; bgneal@45: bgneal@45: if (s == '') bgneal@45: return; bgneal@45: bgneal@45: function fix() { bgneal@45: // Correct Firefox graphics glitches bgneal@45: r = se.getRng().cloneRange(); bgneal@45: ed.getDoc().execCommand('SelectAll', false, null); bgneal@45: se.setRng(r); bgneal@45: }; bgneal@45: bgneal@45: function replace() { bgneal@45: if (tinymce.isIE) bgneal@45: ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE bgneal@45: else bgneal@45: ed.getDoc().execCommand('InsertHTML', false, rs); bgneal@45: }; bgneal@45: bgneal@45: // IE flags bgneal@45: if (ca) bgneal@45: fl = fl | 4; bgneal@45: bgneal@45: switch (a) { bgneal@45: case 'all': bgneal@45: // Move caret to beginning of text bgneal@45: ed.execCommand('SelectAll'); bgneal@45: ed.selection.collapse(true); bgneal@45: bgneal@45: if (tinymce.isIE) { bgneal@45: while (r.findText(s, b ? -1 : 1, fl)) { bgneal@45: r.scrollIntoView(); bgneal@45: r.select(); bgneal@45: replace(); bgneal@45: fo = 1; bgneal@183: bgneal@183: if (b) { bgneal@183: r.moveEnd("character", -(rs.length)); // Otherwise will loop forever bgneal@183: } bgneal@45: } bgneal@45: bgneal@45: tinyMCEPopup.storeSelection(); bgneal@45: } else { bgneal@45: while (w.find(s, ca, b, false, false, false, false)) { bgneal@45: replace(); bgneal@45: fo = 1; bgneal@45: } bgneal@45: } bgneal@45: bgneal@45: if (fo) bgneal@45: tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); bgneal@45: else bgneal@45: tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); bgneal@45: bgneal@45: return; bgneal@45: bgneal@45: case 'current': bgneal@45: if (!ed.selection.isCollapsed()) bgneal@45: replace(); bgneal@45: bgneal@45: break; bgneal@45: } bgneal@45: bgneal@45: se.collapse(b); bgneal@45: r = se.getRng(); bgneal@45: bgneal@45: // Whats the point bgneal@45: if (!s) bgneal@45: return; bgneal@45: bgneal@45: if (tinymce.isIE) { bgneal@45: if (r.findText(s, b ? -1 : 1, fl)) { bgneal@45: r.scrollIntoView(); bgneal@45: r.select(); bgneal@45: } else bgneal@45: tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); bgneal@45: bgneal@45: tinyMCEPopup.storeSelection(); bgneal@45: } else { bgneal@45: if (!w.find(s, ca, b, false, false, false, false)) bgneal@45: tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); bgneal@45: else bgneal@45: fix(); bgneal@45: } bgneal@45: } bgneal@45: }; bgneal@45: bgneal@45: tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);