143 lines
3.6 KiB
JavaScript
143 lines
3.6 KiB
JavaScript
tinyMCEPopup.requireLangPack();
|
|
|
|
var SearchReplaceDialog = {
|
|
init : function(ed) {
|
|
var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
|
|
|
|
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) {
|
|
var f, lm = this.lastMode;
|
|
|
|
if (lm != m) {
|
|
f = document.forms[0];
|
|
|
|
if (lm) {
|
|
f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
|
|
f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
|
|
f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
|
|
f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
|
|
}
|
|
|
|
mcTabs.displayTab(m + '_tab', m + '_panel');
|
|
document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
|
|
document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
|
|
this.lastMode = m;
|
|
}
|
|
},
|
|
|
|
searchNext : function(a) {
|
|
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;
|
|
|
|
// Get input
|
|
f = document.forms[0];
|
|
s = f[m + '_panel_searchstring'].value;
|
|
b = f[m + '_panel_backwardsu'].checked;
|
|
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() {
|
|
ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE
|
|
};
|
|
|
|
// IE flags
|
|
if (ca)
|
|
fl = fl | 4;
|
|
|
|
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();
|
|
} else {
|
|
while (w.find(s, ca, b, false, false, false, false)) {
|
|
replace();
|
|
fo = 1;
|
|
}
|
|
}
|
|
|
|
if (fo)
|
|
tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
|
|
else
|
|
tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
|
|
|
return;
|
|
|
|
case 'current':
|
|
if (!ed.selection.isCollapsed())
|
|
replace();
|
|
|
|
break;
|
|
}
|
|
|
|
se.collapse(b);
|
|
r = se.getRng();
|
|
|
|
// Whats the point
|
|
if (!s)
|
|
return;
|
|
|
|
if (tinymce.isIE) {
|
|
ed.focus();
|
|
r = ed.getDoc().selection.createRange();
|
|
|
|
if (r.findText(s, b ? -1 : 1, fl)) {
|
|
r.scrollIntoView();
|
|
r.select();
|
|
} else
|
|
tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
|
|
|
tinyMCEPopup.storeSelection();
|
|
} else {
|
|
if (!w.find(s, ca, b, false, false, false, false))
|
|
tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
|
else
|
|
fix();
|
|
}
|
|
}
|
|
};
|
|
|
|
tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);
|