
content.search.nwSearchFnt.js Maven / Gradle / Ivy
/*----------------------------------------------------------------------------
* JavaScript for webhelp search
*----------------------------------------------------------------------------
This file is part of the webhelpsearch plugin for DocBook WebHelp
Copyright (c) 2007-2008 NexWave Solutions All Rights Reserved.
www.nexwave.biz Nadege Quaine
http://kasunbg.blogspot.com/ Kasun Gajasinghe
*/
//string initialization
var htmlfileList = "htmlFileList.js";
var htmlfileinfoList = "htmlFileInfoList.js";
var useCJKTokenizing = false;
/* Cette fonction verifie la validite de la recherche entrre par l utilisateur */
function Verifie(ditaSearch_Form) {
// Check browser compatibitily
if (navigator.userAgent.indexOf("Konquerer") > -1) {
alert(txt_browser_not_supported);
return;
}
var expressionInput = document.ditaSearch_Form.textToSearch.value.replace(/\(\)\<\>["',;]/g,' ');
//Set a cookie to store the searched keywords
$.cookie('textToSearch', expressionInput);
if (expressionInput.length < 1) {
// expression is invalid
alert(txt_enter_at_least_1_char);
// reactive la fenetre de search (utile car cadres)
document.ditaSearch_Form.textToSearch.focus();
}
else {
// Effectuer la recherche
Effectuer_recherche(expressionInput);
//Track with Google Analytics:
_gaq.push(['_trackEvent', 'Search', expressionInput, 'null', 1]);
// reactive la fenetre de search (utile car cadres)
document.ditaSearch_Form.textToSearch.focus();
var highlightChecked=$('#searchCheckBox').is(':checked');
//the highlight button is checked
if(highlightChecked){
//first remove the previous highlight
searchUnhighlight();
//Now highlight the new search term
toggleHighlight(highlightChecked);
}
}
}
var stemQueryMap = new Array(); // A hashtable which maps stems to query words
/* This function parses the search expression, loads the indices and displays the results*/
function Effectuer_recherche(expressionInput) {
/* Display a waiting message */
//DisplayWaitingMessage();
/*data initialisation*/
var searchFor = ""; // expression en lowercase et sans les caracte res speciaux
//w = new Object(); // hashtable, key=word, value = list of the index of the html files
scriptLetterTab = new Scriptfirstchar(); // Array containing the first letter of each word to look for
var wordsList = new Array(); // Array with the words to look for
var finalWordsList = new Array(); // Array with the words to look for after removing spaces
var linkTab = new Array();
var fileAndWordList = new Array();
var txt_wordsnotfound = "";
/*nqu: expressionInput, la recherche est lower cased, plus remplacement des char speciaux*/
//The original replacement expression is:
//searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "").replace(/_di_/g, "%24_");
//The above expression was error prone because it did not deal with words that have a . as part of the word correctly, for example, document.txt
//Do not automatically replace a . with a space
searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "").replace(/_di_/g, "%24_");
//If it ends with a period, replace it with a space
searchFor = searchFor.replace(/[.]$/,"");
searchFor = searchFor.replace(/ +/g, " ");
searchFor = searchFor.replace(/ $/, "").replace(/^ /, "");
wordsList = searchFor.split(" ");
wordsList.sort();
//set the tokenizing method
if(typeof indexerLanguage != "undefined" && (indexerLanguage=="zh" || indexerLanguage=="ja" ||indexerLanguage=="ko")){
useCJKTokenizing=true;
} else {
useCJKTokenizing=false;
}
//If Lucene CJKTokenizer was used as the indexer, then useCJKTokenizing will be true. Else, do normal tokenizing.
// 2-gram tokenizinghappens in CJKTokenizing,
if(useCJKTokenizing){
finalWordsList = cjkTokenize(wordsList);
} else {
finalWordsList = tokenize(wordsList);
}
//load the scripts with the indices: the following lines do not work on the server. To be corrected
/*if (IEBrowser) {
scriptsarray = loadTheIndexScripts (scriptLetterTab);
} */
/**
* Compare with the indexed words (in the w[] array), and push words that are in it to tempTab.
*/
var tempTab = new Array();
//Do not use associative array in for loop, for example:
//for(var t in finalWordsList)
//it causes errors when finalWordList contains
//stemmed words such as: kei from the stemmed word: key
for(var t=0;t= 0; i--) {
if (fileAndWordList[i] != undefined) {
linkTab.push("" + txt_results_for + " " + "" + fileAndWordList[i][0].motslisteDisplay + "" + "
");
linkTab.push("");
for (t in fileAndWordList[i]) {
//DEBUG: alert(": "+ fileAndWordList[i][t].filenb+" " +fileAndWordList[i][t].motsliste);
//linkTab.push("- "+fl[fileAndWordList[i][t].filenb]+"
");
var tempInfo = fil[fileAndWordList[i][t].filenb];
var pos1 = tempInfo.indexOf("@@@");
var pos2 = tempInfo.lastIndexOf("@@@");
var tempPath = tempInfo.substring(0, pos1);
var tempTitle = tempInfo.substring(pos1 + 3, pos2);
var tempShortdesc = tempInfo.substring(pos2 + 3, tempInfo.length);
//file:///home/kasun/docbook/WEBHELP/webhelp-draft-output-format-idea/src/main/resources/web/webhelp/installation.html
var linkString = "- " + tempTitle + "";
// var linkString = "
- " + tempTitle + "";
if ((tempShortdesc != "null")) {
linkString += "\n" + tempShortdesc + "";
}
linkString += "
";
linkTab.push(linkString);
}
linkTab.push("
");
}
}
}
var results = "";
if (linkTab.length > 0) {
/*writeln ("" + txt_results_for + " " + "" + cleanwordsList + "" + "
"+"
");*/
results = "";
//write("
");
for (t in linkTab) {
results += linkTab[t].toString();
}
results += "";
} else {
results = "" + "Your search returned no results for " + "" + txt_wordsnotfound + "" + "
";
}
//alert(results);
document.getElementById('searchResults').innerHTML = results;
}
function tokenize(wordsList){
var stemmedWordsList = new Array(); // Array with the words to look for after removing spaces
var cleanwordsList = new Array(); // Array with the words to look for
for(var j=0;j";
return this.input.substring(this.offset,this.offset+2);
}
function getAllTokens(){
while(this.incrementToken()){
var tmp = this.tokenize();
this.tokens.push(tmp);
}
return this.unique(this.tokens);
// document.getElementById("content").innerHTML += tokens+" ";
// document.getElementById("content").innerHTML += "
dada"+sortedTokens+" ";
// console.log(tokens.length+"dsdsds");
/*for(i=0;idada"+un[i]+"- "+stems[i]+" "+ ss;
document.getElementById("content").innerHTML += "
"+sortedTokens[i];
}*/
}
function unique(a)
{
var r = new Array();
o:for(var i = 0, n = a.length; i < n; i++)
{
for(var x = 0, y = r.length; x < y; x++)
{
if(r[x]==a[i]) continue o;
}
r[r.length] = a[i];
}
return r;
}
}
/* Scriptfirstchar: to gather the first letter of index js files to upload */
function Scriptfirstchar() {
this.strLetters = "";
this.add = addLettre;
}
function addLettre(caract) {
if (this.strLetters == 'undefined') {
this.strLetters = caract;
} else if (this.strLetters.indexOf(caract) < 0) {
this.strLetters += caract;
}
return 0;
}
/* end of scriptfirstchar */
/*main loader function*/
/*tab contains the first letters of each word looked for*/
function loadTheIndexScripts(tab) {
//alert (tab.strLetters);
var scriptsarray = new Array();
for (var i = 0; i < tab.strLetters.length; i++) {
scriptsarray[i] = "..\/search" + "\/" + tab.strLetters.charAt(i) + ".js";
}
// add the list of html files
i++;
scriptsarray[i] = "..\/search" + "\/" + htmlfileList;
//debug
for (var t in scriptsarray) {
//alert (scriptsarray[t]);
}
tab = new ScriptLoader();
for (t in scriptsarray) {
tab.add(scriptsarray[t]);
}
tab.load();
//alert ("scripts loaded");
return (scriptsarray);
}
/* ScriptLoader: to load the scripts and wait that it's finished */
function ScriptLoader() {
this.cpt = 0;
this.scriptTab = new Array();
this.add = addAScriptInTheList;
this.load = loadTheScripts;
this.onScriptLoaded = onScriptLoadedFunc;
}
function addAScriptInTheList(scriptPath) {
this.scriptTab.push(scriptPath);
}
function loadTheScripts() {
var script;
var head;
head = document.getElementsByTagName('head').item(0);
//script = document.createElement('script');
for (var el in this.scriptTab) {
//alert (el+this.scriptTab[el]);
script = document.createElement('script');
script.src = this.scriptTab[el];
script.type = 'text/javascript';
script.defer = false;
head.appendChild(script);
}
}
function onScriptLoadedFunc(e) {
e = e || window.event;
var target = e.target || e.srcElement;
var isComplete = true;
if (typeof target.readyState != undefined) {
isComplete = (target.readyState == "complete" || target.readyState == "loaded");
}
if (isComplete) {
ScriptLoader.cpt++;
if (ScriptLoader.cpt == ScriptLoader.scripts.length) {
ScriptLoader.onLoadComplete();
}
}
}
/*
function onLoadComplete() {
alert("loaded !!");
} */
/* End of scriptloader functions */
// Array.unique( strict ) - Remove duplicate values
function unique(tab) {
var a = new Array();
var i;
var l = tab.length;
if (tab[0] != undefined) {
a[0] = tab[0];
}
else {
return -1
}
for (i = 1; i < l; i++) {
if (indexof(a, tab[i], 0) < 0) {
a.push(tab[i]);
}
}
return a;
}
function indexof(tab, element, begin) {
for (var i = begin; i < tab.length; i++) {
if (tab[i] == element) {
return i;
}
}
return -1;
}
/* end of Array functions */
/*
Param: mots= list of words to look for.
This function creates an hashtable:
- The key is the index of a html file which contains a word to look for.
- The value is the list of all words contained in the html file.
Return value: the hashtable fileAndWordList
*/
function SortResults(mots) {
var fileAndWordList = new Object();
if (mots.length == 0) {
return null;
}
for (var t in mots) {
// get the list of the indices of the files.
var listNumerosDesFicStr = w[mots[t].toString()];
//alert ("listNumerosDesFicStr "+listNumerosDesFicStr);
var tab = listNumerosDesFicStr.split(",");
//for each file (file's index):
for (var t2 in tab) {
var temp = tab[t2].toString();
if (fileAndWordList[temp] == undefined) {
fileAndWordList[temp] = "" + mots[t];
} else {
fileAndWordList[temp] += "," + mots[t];
}
}
}
var fileAndWordListValuesOnly = new Array();
// sort results according to values
var temptab = new Array();
for (t in fileAndWordList) {
tab = fileAndWordList[t].split(',');
var tempDisplay = new Array();
for (var x in tab) {
if(stemQueryMap[tab[x]] != undefined){
tempDisplay.push(stemQueryMap[tab[x]]); //get the original word from the stem word.
} else {
tempDisplay.push(tab[x]); //no stem is available. (probably a CJK language)
}
}
var tempDispString = tempDisplay.join(", ");
temptab.push(new resultPerFile(t, fileAndWordList[t], tab.length, tempDispString));
fileAndWordListValuesOnly.push(fileAndWordList[t]);
}
//alert("t"+fileAndWordListValuesOnly.toString());
fileAndWordListValuesOnly = unique(fileAndWordListValuesOnly);
fileAndWordListValuesOnly = fileAndWordListValuesOnly.sort(compare_nbMots);
//alert("t: "+fileAndWordListValuesOnly.join(';'));
var listToOutput = new Array();
for (var j in fileAndWordListValuesOnly) {
for (t in temptab) {
if (temptab[t].motsliste == fileAndWordListValuesOnly[j]) {
if (listToOutput[j] == undefined) {
listToOutput[j] = new Array(temptab[t]);
} else {
listToOutput[j].push(temptab[t]);
}
}
}
}
return listToOutput;
}
function resultPerFile(filenb, motsliste, motsnb, motslisteDisplay) {
this.filenb = filenb;
this.motsliste = motsliste;
this.motsnb = motsnb;
this.motslisteDisplay= motslisteDisplay;
}
function compare_nbMots(s1, s2) {
var t1 = s1.split(',');
var t2 = s2.split(',');
//alert ("s1:"+t1.length + " " +t2.length)
if (t1.length == t2.length) {
return 0;
} else if (t1.length > t2.length) {
return 1;
} else {
return -1;
}
//return t1.length - t2.length);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy