/*---------------------------------------------------------------------------- * JavaScript for webhelp search * updated by neodoc *---------------------------------------------------------------------------- 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 */ /* global txt_browser_not_supported, txt_enter_at_least_1_char, indexerLanguage, w, txt_results_for, fil, txt_no_results_for */ //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; //Set a cookie to store the searched keywords $.cookie('textToSearch', ""); 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); // reactive la fenetre de search (utile car cadres) document.ditaSearch_Form.textToSearch.focus(); } } 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) { var expressionInputMem = expressionInput ; // â à ç ë é ê è ï î ô û ù expressionInput = expressionInput.replace( /â/g , 'a'); expressionInput = expressionInput.replace( /à/g , 'a'); expressionInput = expressionInput.replace( /ç/g , 'c'); expressionInput = expressionInput.replace( /ë/g , 'e'); expressionInput = expressionInput.replace( /é/g , 'e'); expressionInput = expressionInput.replace( /è/g , 'e'); expressionInput = expressionInput.replace( /ê/g , 'e'); expressionInput = expressionInput.replace( /ï/g , 'i'); expressionInput = expressionInput.replace( /î/g , 'i'); expressionInput = expressionInput.replace( /ô/g , 'o'); expressionInput = expressionInput.replace( /û/g , 'u'); expressionInput = expressionInput.replace( /ù/g , 'u'); /* 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*/ 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_"); 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. */ $.cookie('textToSearch', expressionInputMem); var tempTab = new Array(); // console.log("finalWordsList : " ); // console.log( finalWordsList); for(let wordToSearch in finalWordsList){ var flagAdd = false; for(let word in w){ var wordNew = "" ; wordNew = word.replace( /â/ , 'a'); wordNew = wordNew.replace( /à/g , 'a'); wordNew = wordNew.replace( /ç/g , 'c'); wordNew = wordNew.replace( /ë/g , 'e'); wordNew = wordNew.replace( /é/g , 'e'); wordNew = wordNew.replace( /è/g , 'e'); wordNew = wordNew.replace( /ê/g , 'e'); wordNew = wordNew.replace( /ï/g , 'i'); wordNew = wordNew.replace( /î/g , 'i'); wordNew = wordNew.replace( /ô/g , 'o'); wordNew = wordNew.replace( /û/g , 'u'); wordNew = wordNew.replace( /ù/g , 'u'); if( wordNew.includes(finalWordsList[wordToSearch]) ) { // console.log("word : "+word); // console.log('word.includes("'+ finalWordsList[wordToSearch]+'")'); // console.log('tempTab'); // console.log(tempTab); // var cookie = $.cookie('textToSearch') // if (!cookie.includes(word) ){ // if (cookie.length==0) // cookie = word; // else // cookie += " " + word; // $.cookie('textToSearch', cookie); // flagAdd = true; // } if (!tempTab.includes(word)){ tempTab.push(word.trim()); flagAdd = true; } } } if(!flagAdd) txt_wordsnotfound += finalWordsList[wordToSearch] + " "; } // var tempTab = new Array(); // for (var t in finalWordsList) { // if (w[finalWordsList[t].toString()] == undefined) { // txt_wordsnotfound += finalWordsList[t] + " "; // } else { // tempTab.push(finalWordsList[t]); // } // } finalWordsList = tempTab; if (finalWordsList.length) { //search 'and' and 'or' one time fileAndWordList = SortResults(finalWordsList); var cpt = fileAndWordList.length; // console.log('finalWordsList : '); // console.log(finalWordsList); for (var i = cpt - 1; i >= 0; i--) { if (fileAndWordList[i] !== undefined) { linkTab.push("
" + txt_results_for + " " + "" + fileAndWordList[i][0].motslisteDisplay + "" + "
"); linkTab.push("" + txt_results_for + " " + "" + cleanwordsList + "" + "
"+"
"; //write("
" + txt_no_results_for + "" + txt_wordsnotfound + "" + "
"; } //alert(results); document.getElementById('searchResults').innerHTML = results; addHighligthToResults() ; //comes from nwSearchFnt.js } 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 in wordsList){ var word = wordsList[j]; if(typeof stemmer !== "undefined" ){ stemQueryMap[stemmer(word)] = word; } else { stemQueryMap[word] = word; } } //stemmedWordsList is the stemmed list of words separated by spaces. for (var t in wordsList) { wordsList[t] = wordsList[t].replace(/(%22)|^-/g, ""); if (wordsList[t] !== "%20") { scriptLetterTab.add(wordsList[t].charAt(0)); cleanwordsList.push(wordsList[t]); } } if(typeof stemmer !== "undefined" ){ //Do the stemming using Porter's stemming algorithm for (var i = 0; i < cleanwordsList.length; i++) { var stemWord = stemmer(cleanwordsList[i]); stemmedWordsList.push(stemWord); } } else { stemmedWordsList = cleanwordsList; } return stemmedWordsList; } //Invoker of CJKTokenizer class methods. function cjkTokenize(wordsList){ var allTokens= new Array(); var notCJKTokens= new Array(); var j=0; for(j=0;j