1jQuery(document).ready(function(){jQuery('.search-form.wpfts_autocomplete').each(function(i,v){let formElement=v;let inp=jQuery('input[name="s"]',v);jQuery(inp).autocomplete({source:function(request,response){const formData=new FormData(formElement);const fd={};for(const[key,value]of formData.entries()){fd[key]=value} 2fd.s=request.term;jQuery.ajax({method:'POST',url:document.wpfts_ajaxurl,dataType:"json",data:{action:'wpfts_autocomplete',form_data:fd,},success:function(data){if(data&&(data.length>0)){response(data)}else{let nodata=[{'label':'<i>No results found</i>'}];response(nodata)}}})},minLength:1,delay:300,select:function(event,ui){var t=jQuery('<textarea />').html(ui.item.label).text();t=t.replace(/<sup>[^<]*<\/sup>?/gm,'');t=t.replace(/<[^>]*>?/gm,'');if('link' in ui.item){document.location.href=ui.item.link} 3event.preventDefault();return!1},focus:function(event,ui){var t=jQuery('<textarea />').html(ui.item.label).text();t=t.replace(/<sup>[^<]*<\/sup>?/gm,'');t=t.replace(/<[^>]*>?/gm,'');event.preventDefault();return!1},create:function(event,ui){jQuery(this).data('ui-autocomplete')._renderItem=function(ul,item){var str='<li><a>'+item.label+'</a></li>';return jQuery(str).appendTo(ul)}}})})});jQuery(document).ready(function(){let islands=[];let mainNode=null;function getWords(text){text=text.replace(/[\u00b4\u2018\u2019]/,"'");let regex=new RegExp(/([\u00C0-\u1FFF\u2C00-\uD7FF\w][\u00C0-\u1FFF\u2C00-\uD7FF\w']*[\u00C0-\u1FFF\u2C00-\uD7FF\w]+|[\u00C0-\u1FFF\u2C00-\uD7FF\w]+)/,'g');let words=text.matchAll(regex);let ws=[];for(let w of words){ws.push([w[0],w.index])} 4return ws} 5function traverseSubNodes(node,level=0){let textNodes=[];let is_has_own_texts=!1;for(let i=0;i<node.childNodes.length;i++){const childNode=node.childNodes[i];if(childNode.nodeType===Node.TEXT_NODE){let tx=childNode.textContent.trim();if(tx.length>0){let tx2=getWords(childNode.textContent);if(tx2&&(tx2.length>0)){textNodes.push([childNode,tx2,level,level,i]);is_has_own_texts=!0}}}else{if(childNode.nodeType===Node.ELEMENT_NODE){if(['META','SCRIPT','STYLE','FRAME','IFRAME'].indexOf(childNode.tagName.toUpperCase())<0){let subsinfo=traverseSubNodes(childNode,level+1);for(let subn of subsinfo){subn[4]=i;textNodes.push(subn)}}}}} 6let resNodes=[];let i=0;while(i<textNodes.length){let cnode=textNodes[i];if(cnode[2]-level>=3){let nn=cnode[4];let island=[];island.push(cnode);let n_words=cnode[1].length;i ++;while(i<textNodes.length){let cnode2=textNodes[i];if(cnode2[4]==nn){island.push(cnode2);n_words+=cnode2[1].length;i ++}else{i --;break}} 7islands.push([island,n_words])}else{if(level==cnode[2]){resNodes.push(cnode)}else{if(is_has_own_texts){cnode[2]=level;resNodes.push(cnode)}else{resNodes.push(cnode)}}} 8i ++} 9if(level==0){let i=0;while(i<resNodes.length){let cnode=resNodes[i];let nn=cnode[4];let island=[];island.push(cnode);let n_words=cnode[1].length;i ++;while(i<resNodes.length){let cnode2=resNodes[i];if(cnode2[4]==nn){island.push(cnode2);n_words+=cnode2[1].length;i ++}else{break}} 10islands.push([island,n_words])} 11resNodes=[]} 12return resNodes} 13function findGoodNodes(sw,as_query=!1,limit=-1,min_words=1){let goodNodes=[];for(let i=0;i<islands.length;i ++){let island=islands[i];if(island[1]<min_words){continue} 14let is_found=!1;let is_stop=!1;for(let wi=0;wi<island[0].length;wi ++){let node=island[0][wi];for(let ni=0;ni<node[1].length;ni ++){if((sw[0][0]==node[1][ni][0])||(as_query&&(sw[0][0].toLowerCase()==node[1][ni][0].toLowerCase()))){let startInfo=[node[0],node[1][ni][1]];let sw_i=1;let is_break=!1;let ni_start=ni+1;if(sw_i>=sw.length){goodNodes.push([startInfo,[node[0],node[1][ni][1]+node[1][ni][0].length]]);is_found=!0}else{for(let wi2=wi;wi2<island[0].length;wi2 ++){let node2=island[0][wi2];for(let ni2=ni_start;ni2<node2[1].length;ni2 ++){if(sw_i<sw.length){if((sw[sw_i][0]==node2[1][ni2][0])||(as_query&&(sw[sw_i][0].toLowerCase()==node2[1][ni2][0].toLowerCase()))){sw_i ++;if(sw_i>=sw.length){goodNodes.push([startInfo,[node2[0],node2[1][ni2][1]+node2[1][ni2][0].length]]);wi=wi2;ni=ni2+1;is_found=!0;is_break=!0;break}}else{is_found=!1;is_break=!0;break}}else{goodNodes.push([startInfo,[node2[0],node2[1][ni2-1][1]+node2[1][ni2-1][0].length]]);wi=wi2;ni=ni2;is_found=!0;is_break=!0;break}} 15if(is_break){break} 16ni_start=0}}}
17if(is_found){if((limit>0)&&(goodNodes.length>=limit)){is_stop=!0} 18is_found=!1} 19if(is_stop){break}} 20if(is_stop){break}}} 21return goodNodes} 22function highlightSentence(sentence,classV='wpfts-highlight-sentence'){let sw=getWords(sentence);let nodePaths=findGoodNodes(sw,!1,-1);if(nodePaths.length>0){const nodePath=nodePaths[0];const range=document.createRange();range.setStart(nodePath[0][0],nodePath[0][1]);range.setEnd(nodePath[1][0],nodePath[1][1]);const selectedText=range.extractContents();const hlblock=document.createElement("wpfts-highlight");hlblock.classList.add(classV);hlblock.appendChild(selectedText);range.insertNode(hlblock);window.scrollTo(0,hlblock.offsetTop)}} 23function highlightWords(words,classV='wpfts-highlight-word'){for(let word of words){islands=[];traverseSubNodes(mainNode,0);let sw=getWords(word);let nodePaths=findGoodNodes(sw,!0,-1);for(let ii=nodePaths.length-1;ii>=0;ii --){let nodePath=nodePaths[ii];const range=document.createRange();range.setStart(nodePath[0][0],nodePath[0][1]);range.setEnd(nodePath[1][0],nodePath[1][1]);const selectedText=range.extractContents();const hlblock=document.createElement("wpfts-highlight");hlblock.classList.add(classV);hlblock.appendChild(selectedText);range.insertNode(hlblock)}}} 24function extractValueFromFragment(fragment,key){const regex=new RegExp(`:\\$:${key}=([^&#]+)`);const match=fragment.match(regex);return match?match[1]:null} 25function extractValuesFromFragment(fragment,key){const regex=new RegExp(`:\\$:${key}=([^&#]+)`,'g');const matches=fragment.matchAll(regex);return Array.from(matches).map(match=>match[1])} 26const urlFragment=window.location.hash.substring(1);const s1=extractValueFromFragment(urlFragment,'sentence');const sentence=decodeURIComponent(s1?s1:'');const s2=extractValueFromFragment(urlFragment,'word');let w2=decodeURIComponent(s2?s2:'').split(',').map((v)=>{return v.trim()});let words=[];for(let w of w2){let t=w.trim();if(t.length>0){words.push(t)}} 27mainNode=document.querySelector('body');if(sentence&&(sentence.length>0)){islands=[];traverseSubNodes(mainNode,0);highlightSentence(sentence)} 28if(words&&(words.length>0)){highlightWords(words)}})
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.