blob: 12484842a79884302732ff1b4759d396641785a8 [file] [log] [blame]
/*---------------------------------------*\
Find and Replace Plugin for HTMLArea-3.0
-----------------------------------------
author: Cau guanabara
e-mail: caugb@ibest.com.br
\*---------------------------------------*/
var FindReplace = window.opener.FindReplace;
var editor = FindReplace.editor;
var is_mo = window.opener.Xinha.is_gecko;
var tosearch = '';
var pater = null;
var buffer = null;
var matches = 0;
var replaces = 0;
var fr_spans = new Array();
function _lc(string) {
return(window.opener.Xinha._lc(string, 'FindReplace'));
}
function execSearch(params) {
var ihtml = editor._doc.body.innerHTML;
if(buffer == null)
buffer = ihtml;
if(params['fr_pattern'] != tosearch) {
if(tosearch != '')
clearDoc();
tosearch = params['fr_pattern'];
}
if(matches == 0) {
er = params['fr_words'] ? "/(?!<[^>]*)(\\b"+params['fr_pattern']+"\\b)(?![^<]*>)/g" :
"/(?!<[^>]*)("+params['fr_pattern']+")(?![^<]*>)/g";
if(!params['fr_matchcase'])
er += "i";
pater = eval(er);
var tago = '<span id=frmark>';
var tagc = '</span>';
var newHtml = ihtml.replace(pater,tago+"$1"+tagc);
editor.setHTML(newHtml);
var getallspans = editor._doc.body.getElementsByTagName("span");
for (var i = 0; i < getallspans.length; i++)
if(/^frmark/.test(getallspans[i].id))
fr_spans.push(getallspans[i]);
}
spanWalker(params['fr_pattern'],params['fr_replacement'],params['fr_replaceall']);
}
function spanWalker(pattern,replacement,replaceall) {
var foundtrue = false;
clearMarks();
for (var i = matches; i < fr_spans.length; i++) {
var elm = fr_spans[i];
foundtrue = true;
if(!(/[0-9]$/.test(elm.id))) {
matches++;
disab('fr_clear',false);
elm.id = 'frmark_'+matches;
elm.style.color = 'white';
elm.style.backgroundColor = 'highlight';
elm.style.fontWeight = 'bold';
elm.scrollIntoView(false);
if(/\w/.test(replacement)) {
if(replaceall || confirm(_lc("Substitute this occurrence?"))) {
elm.firstChild.replaceData(0,elm.firstChild.data.length,replacement);
replaces++;
disab('fr_undo',false);
}
if(replaceall) {
clearMarks();
continue;
}
}
break;
}
}
var last = (i >= fr_spans.length - 1);
if(last || !foundtrue) { // EOF
var message = _lc("Done")+':\n\n';
if(matches > 0) {
if(matches == 1) message += matches+' '+_lc("found item");
else message += matches+' '+_lc("found items");
if(replaces > 0) {
if(replaces == 1) message += ',\n'+replaces+' '+_lc("replaced item");
else message += ',\n'+replaces+' '+_lc("replaced items");
}
hiliteAll();
disab('fr_hiliteall',false);
} else { message += '"'+pattern+'" '+_lc("not found"); }
alert(message+'.');
}
}
function clearDoc() {
var doc = editor._doc.body.innerHTML;
var er = /(<span\s+[^>]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi;
editor._doc.body.innerHTML = doc.replace(er,"$2");
pater = null;
tosearch = '';
fr_spans = new Array();
matches = 0;
replaces = 0;
disab("fr_hiliteall,fr_clear",true);
}
function clearMarks() {
var getall = editor._doc.body.getElementsByTagName("span");
for (var i = 0; i < getall.length; i++) {
var elm = getall[i];
if(/^frmark/.test(elm.id)) {
var objStyle = editor._doc.getElementById(elm.id).style;
objStyle.backgroundColor = "";
objStyle.color = "";
objStyle.fontWeight = "";
}
}
}
function hiliteAll() {
var getall = editor._doc.body.getElementsByTagName("span");
for (var i = 0; i < getall.length; i++) {
var elm = getall[i];
if(/^frmark/.test(elm.id)) {
var objStyle = editor._doc.getElementById(elm.id).style;
objStyle.backgroundColor = "highlight";
objStyle.color = "white";
objStyle.fontWeight = "bold";
}
}
}
function resetContents() {
if(buffer == null) return;
var transp = editor._doc.body.innerHTML;
editor._doc.body.innerHTML = buffer;
buffer = transp;
}
function disab(elms,toset) {
var names = elms.split(/[,; ]+/);
for(var i = 0; i < names.length; i++)
document.getElementById(names[i]).disabled = toset;
}