var uiWebview_SearchResultCount = 0; /*! @method uiWebview_HighlightAllOccurencesOfStringForElement @abstract // helper function, recursively searches in elements and their child nodes @discussion // helper function, recursively searches in elements and their child nodes element - HTML elements keyword - string to search */ function uiWebview_HighlightAllOccurencesOfStringForElement(element,keyword) { if (element) { if (element.nodeType == 3) { // Text node while (true) { //if (counter < 1) { var value = element.nodeValue; // Search for keyword in text node var tmp=value.toLowerCase(); tmp= tmp.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g,"a"); tmp= tmp.replace(/đ/g,"d"); tmp= tmp.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/g,"e"); tmp= tmp.replace(/í|ì|ỉ|ĩ|ị/g,"i"); tmp= tmp.replace(/ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/g,"o"); tmp= tmp.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/g,"u"); tmp= tmp.replace(/ý|ỳ|ỷ|ỹ|ỵ/g,"y"); keyword= keyword.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g,"a"); keyword= keyword.replace(/đ/g,"d"); keyword= keyword.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/g,"e"); keyword= keyword.replace(/í|ì|ỉ|ĩ|ị/g,"i"); keyword= keyword.replace(/ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/g,"o"); keyword= keyword.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/g,"u"); keyword= keyword.replace(/ý|ỳ|ỷ|ỹ|ỵ/g,"y"); var idx = tmp.indexOf(keyword); if (idx < 0) break; // not found, abort //(value.split); //we create a SPAN element for every parts of matched keywords var span = document.createElement("span"); var text = document.createTextNode(value.substr(idx,keyword.length)); span.appendChild(text); span.setAttribute("class","uiWebviewHighlight"); span.style.backgroundColor="yellow"; span.style.color="black"; uiWebview_SearchResultCount++; // update the counter text = document.createTextNode(value.substr(idx+keyword.length)); element.deleteData(idx, value.length - idx); var next = element.nextSibling; element.parentNode.insertBefore(span, next); element.parentNode.insertBefore(text, next); element = text; } } else if (element.nodeType == 1) { // Element node if (element.style.display != "none" && element.nodeName.toLowerCase() != 'select') { for (var i=element.childNodes.length-1; i>=0; i--) { uiWebview_HighlightAllOccurencesOfStringForElement(element.childNodes[i],keyword); } } } } } // the main entry point to start the search function uiWebview_HighlightAllOccurencesOfString(keyword) { //uiWebview_RemoveAllHighlights(); uiWebview_HighlightAllOccurencesOfStringForElement(document.body, keyword.toLowerCase()); } // helper function, recursively removes the highlights in elements and their childs function uiWebview_RemoveAllHighlightsForElement(element) { if (element) { if (element.nodeType == 1) { if (element.getAttribute("class") == "uiWebviewHighlight") { var text = element.removeChild(element.firstChild); element.parentNode.insertBefore(text,element); element.parentNode.removeChild(element); return true; } else { var normalize = false; for (var i=element.childNodes.length-1; i>=0; i--) { if (uiWebview_RemoveAllHighlightsForElement(element.childNodes[i])) { normalize = true; } } if (normalize) { element.normalize(); } } } } return false; } // the main entry point to remove the highlights function uiWebview_RemoveAllHighlights() { uiWebview_SearchResultCount = 0; uiWebview_RemoveAllHighlightsForElement(document.body); }