/* * * File: basicQuery.js * * Javascript for Verity K2 Enterprise Web Sample Templates - Basic Query * * Depends upon: * none */ var g_blnLastChecked = false; // Should the search query be checked for VQL and single/double quotes? // If yes and the query contains some, THESAURUS, TYPO and SOUNDEX are NOT applied. var g_blnCheckDisableTST = true; // Helper function to trim whitespace String.prototype.trim = function() { var strThis = this; strThis = strThis.replace(/^\s*(.*)/, "$1"); strThis = strThis.replace(/(.*?)\s*$/, "$1"); return strThis; } /* * ===================================================================== * F O R M S U B M I T & C L E A R * ===================================================================== */ function generateQuery(form, g_strTypo, g_strSoundex, g_strThesaurus) { var strQueryText = getValue(form, "QueryText"); strQueryText = strQueryText.trim(); var nonUtf8String = false; var encoding = getValue(form, "Encoding"); // check if we are in a latin1/2 environment if (encoding.indexOf("iso-8859-1") != -1) { nonUtf8String = strQueryText; strQueryText = encode_utf8(strQueryText, "latin1"); setValue(form, "QueryText", strQueryText); } else if (encoding.indexOf("iso-8859-2") != -1) { nonUtf8String = strQueryText; strQueryText = encode_utf8(strQueryText, "latin2"); setValue(form, "QueryText", strQueryText); } //remember original query field for later setValue(form, "hiddenOriginalQueryText", strQueryText); setValue(form, "hiddenBasicQueryText", strQueryText); var strSourceQuery = ""; // exclude pdf // ----------- var strExcludePDF = getExcludePDF(form); if (strExcludePDF != "") { strSourceQuery = "(" + strExcludePDF + ")"; } var TSTenabled = (g_strTypo || g_strSoundex || g_strThesaurus) && g_blnCheckDisableTST && expandQueryWithTST(strQueryText); // typo, soundex, thesaurus // ------------------------ var strTSTResult = ""; if (strQueryText != "" && TSTenabled) { var arrQueryTextSplitted = strQueryText.split(" "); var boolMode = " "; var sSkippedWords = ""; for (var i=0; i < arrQueryTextSplitted.length; ++i) { var sWord = arrQueryTextSplitted[i]; var sWordLower = sWord.toLowerCase(); var bIsBool = false; if (sWordLower == "und" || sWordLower == "and" || sWordLower == "+") { boolMode = " "; bIsBool = true; } if (sWordLower == "oder" || sWordLower == "or") { boolMode = " "; bIsBool = true; } if (sWordLower == "nicht" || sWordLower == "not" || sWordLower == "-") { boolMode = " "; bIsBool = true; } if (sWord != "" && !bIsBool) { if (sWord.indexOf("<") != 0) { if (sWord.indexOf("-") == 0) { sWord = sWord.substr(1); boolMode = " "; bIsBool = true; } if (sWord.indexOf("+") == 0) { sWord = sWord.substr(1); boolMode = " "; bIsBool = true; } if (g_strTypo) { if (strTSTResult != "") { strTSTResult = strTSTResult + boolMode; } // inkludiere das evtl. falsch geschriebene Wort ebenfalls // da wenn es richtig ist, Verity weniger findet als wenn // kein Typo angeschaltet wurde... strTSTResult = strTSTResult + "(" + sWord + "," + sWord + ")"; } if (g_strSoundex) { if (strTSTResult != "") { strTSTResult = strTSTResult + boolMode; } strTSTResult = strTSTResult + "(" + sWord + ")"; } if (g_strThesaurus) { if (strTSTResult != "") { strTSTResult = strTSTResult + boolMode; } strTSTResult = strTSTResult + "(" + sWord + ")"; } } else { sSkippedWords += sWord + " "; } // set mode for next word boolMode = " "; } } sSkippedWords.trim(); if (strTSTResult != "") { if (strSourceQuery == "") { strSourceQuery = strTSTResult; } else { strSourceQuery += " (" +strTSTResult+ ")"; } } // Delete IQP Query, since for e.g. queries any // _wrongly_ typed word delivers 0 results. // Set any skipped words instead there. setValue(form, "QueryText", sSkippedWords); } setValue(form, "SourceQueryText", strSourceQuery); // disable the submit button, so if the search takes a little longer the user does // not do click-click-click // the search field with the name "search" may not exist if the form is the header // search form if (form.elements['search']) { form.elements['search'].disabled = true; } // finally: submit // ----------------------- form.submit(); // reset the original encoded QueryText if (nonUtf8String) { window.setTimeout(function() { setValue(form, "QueryText", nonUtf8String) }, 10); } } /* * ===================================================================== * H E L P E R F U N C T I O N S * ===================================================================== */ // checks if a string contains Verity Search VQL // or strings in single or double quotes. These // things are pretty much screwy up the above code function expandQueryWithTST(str) { // at first find any single or double quote if (str.match(/[\'\"]/)) return false; // now find any VQL inside by matching tags if (str.match(/\<.+?\>/)) return false; // this seems to be a normal string... return true; } function getValue(myForm, name) { if (myForm == null) return ""; myElem = myForm.elements[name]; if (myElem == null) return ""; return myElem.value; } function setValue(myForm, name, value) { if (myForm == null) return false; myElem = myForm.elements[name]; if (myElem == null) return false; myElem.value = value; return true; } function getExcludePDF(form) { var strResult = ""; var elmExcludePDF = form.elements["ExcludePDF"]; if (elmExcludePDF) { var strExcludePDF = elmExcludePDF.checked; if (strExcludePDF == true) { strResult = " MIME-Type application/pdf"; } } return strResult; } // // taken from http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm // function encode_utf8(source, charset) { source = source.replace(/\r\n/g,"\n"); var dest = ""; if (charset == "latin1") { for(var n=0; n127) && (c<2048)) { dest += String.fromCharCode((c>>6)|192); dest += String.fromCharCode((c&63)|128);} else { dest += String.fromCharCode((c>>12)|224); dest += String.fromCharCode(((c>>6)&63)|128); dest += String.fromCharCode((c&63)|128);} } } elseif (charset == "latin2") { latin2table = new Array(); latin2table[0xA0] = String.fromCharCode(U+00A0); latin2table[0xA1] = String.fromCharCode(U+0104); latin2table[0xA2] = String.fromCharCode(U+02D8); latin2table[0xA3] = String.fromCharCode(U+0141); latin2table[0xA4] = String.fromCharCode(U+00A4); latin2table[0xA5] = String.fromCharCode(U+013D); latin2table[0xA6] = String.fromCharCode(U+015A); latin2table[0xA7] = String.fromCharCode(U+00A7); latin2table[0xA8] = String.fromCharCode(U+00A8); latin2table[0xA9] = String.fromCharCode(U+0160); latin2table[0xAA] = String.fromCharCode(U+015E); latin2table[0xAB] = String.fromCharCode(U+0164); latin2table[0xAC] = String.fromCharCode(U+0179); latin2table[0xAD] = String.fromCharCode(U+00AD); latin2table[0xAE] = String.fromCharCode(U+017D); latin2table[0xAF] = String.fromCharCode(U+017B); latin2table[0xB0] = String.fromCharCode(U+00B0); latin2table[0xB1] = String.fromCharCode(U+0105); latin2table[0xB2] = String.fromCharCode(U+02DB); latin2table[0xB3] = String.fromCharCode(U+0142); latin2table[0xB4] = String.fromCharCode(U+00B4); latin2table[0xB5] = String.fromCharCode(U+013E); latin2table[0xB6] = String.fromCharCode(U+015B); latin2table[0xB7] = String.fromCharCode(U+02C7); latin2table[0xB8] = String.fromCharCode(U+00B8); latin2table[0xB9] = String.fromCharCode(U+0161); latin2table[0xBA] = String.fromCharCode(U+015F); latin2table[0xBB] = String.fromCharCode(U+0165); latin2table[0xBC] = String.fromCharCode(U+017A); latin2table[0xBD] = String.fromCharCode(U+02DD); latin2table[0xBE] = String.fromCharCode(U+017E); latin2table[0xBF] = String.fromCharCode(U+017C); latin2table[0xC0] = String.fromCharCode(U+0154); latin2table[0xC1] = String.fromCharCode(U+00C1); latin2table[0xC2] = String.fromCharCode(U+00C2); latin2table[0xC3] = String.fromCharCode(U+0102); latin2table[0xC4] = String.fromCharCode(U+00C4); latin2table[0xC5] = String.fromCharCode(U+0139); latin2table[0xC6] = String.fromCharCode(U+0106); latin2table[0xC7] = String.fromCharCode(U+00C7); latin2table[0xC8] = String.fromCharCode(U+010C); latin2table[0xC9] = String.fromCharCode(U+00C9); latin2table[0xCA] = String.fromCharCode(U+0118); latin2table[0xCB] = String.fromCharCode(U+00CB); latin2table[0xCC] = String.fromCharCode(U+011A); latin2table[0xCD] = String.fromCharCode(U+00CD); latin2table[0xCE] = String.fromCharCode(U+00CE); latin2table[0xCF] = String.fromCharCode(U+010E); latin2table[0xD0] = String.fromCharCode(U+0110); latin2table[0xD1] = String.fromCharCode(U+0143); latin2table[0xD2] = String.fromCharCode(U+0147); latin2table[0xD3] = String.fromCharCode(U+00D3); latin2table[0xD4] = String.fromCharCode(U+00D4); latin2table[0xD5] = String.fromCharCode(U+0150); latin2table[0xD6] = String.fromCharCode(U+00D6); latin2table[0xD7] = String.fromCharCode(U+00D7); latin2table[0xD8] = String.fromCharCode(U+0158); latin2table[0xD9] = String.fromCharCode(U+016E); latin2table[0xDA] = String.fromCharCode(U+00DA); latin2table[0xDB] = String.fromCharCode(U+0170); latin2table[0xDC] = String.fromCharCode(U+00DC); latin2table[0xDD] = String.fromCharCode(U+00DD); latin2table[0xDE] = String.fromCharCode(U+0162); latin2table[0xDF] = String.fromCharCode(U+00DF); latin2table[0xE0] = String.fromCharCode(U+0155); latin2table[0xE1] = String.fromCharCode(U+00E1); latin2table[0xE2] = String.fromCharCode(U+00E2); latin2table[0xE3] = String.fromCharCode(U+0103); latin2table[0xE4] = String.fromCharCode(U+00E4); latin2table[0xE5] = String.fromCharCode(U+013A); latin2table[0xE6] = String.fromCharCode(U+0107); latin2table[0xE7] = String.fromCharCode(U+00E7); latin2table[0xE8] = String.fromCharCode(U+010D); latin2table[0xE9] = String.fromCharCode(U+00E9); latin2table[0xEA] = String.fromCharCode(U+0119); latin2table[0xEB] = String.fromCharCode(U+00EB); latin2table[0xEC] = String.fromCharCode(U+011B); latin2table[0xED] = String.fromCharCode(U+00ED); latin2table[0xEE] = String.fromCharCode(U+00EE); latin2table[0xEF] = String.fromCharCode(U+010F); latin2table[0xF0] = String.fromCharCode(U+0111); latin2table[0xF1] = String.fromCharCode(U+0144); latin2table[0xF2] = String.fromCharCode(U+0148); latin2table[0xF3] = String.fromCharCode(U+00F3); latin2table[0xF4] = String.fromCharCode(U+00F4); latin2table[0xF5] = String.fromCharCode(U+0151); latin2table[0xF6] = String.fromCharCode(U+00F6); latin2table[0xF7] = String.fromCharCode(U+00F7); latin2table[0xF8] = String.fromCharCode(U+0159); latin2table[0xF9] = String.fromCharCode(U+016F); latin2table[0xFA] = String.fromCharCode(U+00FA); latin2table[0xFB] = String.fromCharCode(U+0171); latin2table[0xFC] = String.fromCharCode(U+00FC); latin2table[0xFD] = String.fromCharCode(U+00FD); latin2table[0xFE] = String.fromCharCode(U+0163); latin2table[0xFF] = String.fromCharCode(U+02D9); for(var n=0; n