| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. The ASF licenses this file to You |
| * under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. For additional information regarding |
| * copyright in this work, please see the NOTICE file in the top level |
| * directory of this distribution. |
| */ |
| /* http://www.kryogenix.org/code/browser/searchhi/ */ |
| /* Modified 20021006 to fix query string parsing and add case insensitivity */ |
| function highlightWord(node,word) { |
| // Iterate into this nodes childNodes |
| if (node.hasChildNodes) { |
| var hi_cn; |
| for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) { |
| highlightWord(node.childNodes[hi_cn],word); |
| } |
| } |
| |
| // And do this node itself |
| if (node.nodeType == 3) { // text node |
| var tempNodeVal = node.nodeValue.toLowerCase(); |
| var tempWordVal = word.toLowerCase(); |
| if (tempNodeVal.indexOf(tempWordVal) != -1) { |
| var pn = node.parentNode; |
| if (pn.className != "searchword") { |
| // word has not already been highlighted! |
| var nv = node.nodeValue; |
| var ni = tempNodeVal.indexOf(tempWordVal); |
| // Create a load of replacement nodes |
| var before = document.createTextNode(nv.substr(0,ni)); |
| var docWordVal = nv.substr(ni,word.length); |
| var after = document.createTextNode(nv.substr(ni+word.length)); |
| var hiwordtext = document.createTextNode(docWordVal); |
| var hiword = document.createElement("span"); |
| hiword.className = "searchword"; |
| hiword.appendChild(hiwordtext); |
| pn.insertBefore(before,node); |
| pn.insertBefore(hiword,node); |
| pn.insertBefore(after,node); |
| pn.removeChild(node); |
| } |
| } |
| } |
| } |
| |
| function googleSearchHighlight() { |
| if (!document.createElement) return; |
| var ref = document.referrer; |
| if (ref.indexOf('?') == -1) return; |
| var qs = ref.substr(ref.indexOf('?')+1); |
| var qsa = qs.split('&'); |
| for (var i=0;i<qsa.length;i++) { |
| var qsip = qsa[i].split('='); |
| if (qsip.length == 1) continue; |
| if (qsip[0] == 'q' || qsip[0] == 'p') { // q= for Google, p= for Yahoo |
| var words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/); |
| for (var w=0;w<words.length;w++) { |
| highlightWord(document.getElementsByTagName("body")[0],words[w]); |
| } |
| } |
| } |
| } |
| |
| function highlightTerm() { |
| if (!document.createElement) return; |
| // ensure this only executes when showing search results |
| if (document.getElementById("searchAgain")) { |
| var searchTerm = document.getElementById("q").value; |
| var words = unescape(searchTerm.replace(/\+/g,' ')).split(/\s+/); |
| for (var w=0;w<words.length;w++) { |
| highlightWord(document.getElementsByTagName("body")[0],words[w]); |
| } |
| } |
| } |
| |
| window.onload = highlightTerm; |