You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.6 KiB

function stripSpaces(text) {
// return text.replace(/^\W+/,'').replace(/\W+$/,'');
return text.split(" ").join(" ");
}
function get_bitmap(setbit, size) {
var map = {};
for(var i=0;i<size;++i) map[i]=0;
map[setbit]=1;
return map;
}
function do_search() {
// hide all documents
for(var i=0;i<nurls;i++) document.getElementById("s_"+i).style.display="none";
document.getElementById("content").style.display="none";
document.getElementById("no_results").style.display="none";
document.getElementById("some_results").style.display="none";
// extract all search terms
var term = stripSpaces(document.getElementById("q").value.toLowerCase());
qterms = [];
var chunks = term.split(" ");
for(var i in chunks)
if(chunks[i]) qterms[qterms.length] = chunks[i];
var candidates = {};
for(var i in qterms) {
var term = qterms[i];
/*
if(index[term]!=undefined) {
// whole words
for(var docid in index[term]) {
if(candidates[index[term][docid]]==undefined)
candidates[index[term][docid]]=get_bitmap(i,qterms.length);
else
candidates[index[term][docid]][i]=1;
}
}
else {
*/
// parts of words
for(var keyid in index) {
if(keyid.indexOf(term)>=0) {
for(var docid in index[keyid]) {
if(candidates[index[keyid][docid]]==undefined)
candidates[index[keyid][docid]]=get_bitmap(i,qterms.length);
else
candidates[index[keyid][docid]][i]=1;
}
}
}
//}
}
var somethingFound = false;
for(var key in candidates) {
var on=1;
for(var i in qterms) on = on && candidates[key][i];
if(on) {
document.getElementById("s_"+key).style.display="list-item";
somethingFound = true;
}
}
if (somethingFound){
document.getElementById("content").style.display="block";
document.getElementById("some_results").style.display="block";
} else {
document.getElementById("no_results").style.display="block";
}
}
function do_highlight() {
try {
colors=['yellow','lightgreen','gold','orange','magenta','lightblue'];
var searchFrame = top.frames["vbdocswitch"].frames["main-iframe"]
if(searchFrame.qterms!=undefined) {
for(var i in searchFrame.qterms) {
parent.frames['vbdocright'].document.body.innerHTML = doHighlight(parent.frames['vbdocright'].document.body.innerHTML,searchFrame.qterms[i],colors[i%colors.length]);
parent.frames['vbdocright'].init();
}
}
} catch (ex) {}
}
// from http://www.nsftools.com/misc/SearchAndHighlight.htm
/*
* This is the function that actually highlights a text string by
* adding HTML tags before and after all occurrences of the search
* term. You can pass your own tags if you'd like, or if the
* highlightStartTag or highlightEndTag parameters are omitted or
* are empty strings then the default <font> tags will be used.
*/
function doHighlight(bodyText, searchTerm, color, highlightStartTag, highlightEndTag)
{
// the highlightStartTag and highlightEndTag parameters are optional
if ((!highlightStartTag) || (!highlightEndTag)) {
highlightStartTag = "<font style='background-color:"+color+";'>";
highlightEndTag = "</font>";
}
// find all occurences of the search term in the given text,
// and add some "highlight" tags to them (we're not using a
// regular expression search, because we want to filter out
// matches that occur within HTML tags and script blocks, so
// we have to do a little extra validation)
var newText = "";
var i = -1;
var lcSearchTerm = searchTerm.toLowerCase();
var lcBodyText = bodyText.toLowerCase();
while (bodyText.length > 0) {
i = lcBodyText.indexOf(lcSearchTerm, i+1);
if (i < 0) {
newText += bodyText;
bodyText = "";
} else {
// skip anything inside an HTML tag
if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
// skip anything inside a <script> block
if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
bodyText = bodyText.substr(i + searchTerm.length);
lcBodyText = bodyText.toLowerCase();
i = -1;
}
}
}
}
return newText;
}