diff options
Diffstat (limited to 'src/extsearch_js.h')
-rw-r--r-- | src/extsearch_js.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/extsearch_js.h b/src/extsearch_js.h new file mode 100644 index 0000000..dc72659 --- /dev/null +++ b/src/extsearch_js.h @@ -0,0 +1,129 @@ +"function SearchBox(name, resultsPath, inFrame, label)\n" +"{\n" +" this.searchLabel = label;\n" +" this.DOMSearchField = function()\n" +" { return document.getElementById(\"MSearchField\"); }\n" +" this.DOMSearchBox = function()\n" +" { return document.getElementById(\"MSearchBox\"); }\n" +" this.OnSearchFieldFocus = function(isActive)\n" +" {\n" +" if (isActive)\n" +" {\n" +" this.DOMSearchBox().className = 'MSearchBoxActive';\n" +" var searchField = this.DOMSearchField();\n" +" if (searchField.value == this.searchLabel) \n" +" {\n" +" searchField.value = '';\n" +" }\n" +" }\n" +" else\n" +" {\n" +" this.DOMSearchBox().className = 'MSearchBoxInactive';\n" +" this.DOMSearchField().value = this.searchLabel;\n" +" }\n" +" }\n" +"}\n" +"\n" +"function trim(s) {\n" +" return s?s.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''):'';\n" +"}\n" +"\n" +"function getURLParameter(name) {\n" +" return decodeURIComponent((new RegExp('[?|&]'+name+\n" +" '='+'([^&;]+?)(&|#|;|$)').exec(location.search)\n" +" ||[,\"\"])[1].replace(/\\+/g, '%20'))||null;\n" +"}\n" +"\n" +"var entityMap = {\n" +" \"&\": \"&\",\n" +" \"<\": \"<\",\n" +" \">\": \">\",\n" +" '\"': '"',\n" +" \"'\": ''',\n" +" \"/\": '/'\n" +"};\n" +"\n" +"function escapeHtml(s) {\n" +" return String(s).replace(/[&<>\"'\\/]/g, function (s) {\n" +" return entityMap[s];\n" +" });\n" +"}\n" +"\n" +"function searchFor(query,page,count) {\n" +" $.getJSON(serverUrl+\"?cb=?\",\n" +" {\n" +" n:count,\n" +" p:page,\n" +" q:query\n" +" },\n" +" function(data) {\n" +" var results = $('#searchresults');\n" +" $('#MSearchField').val(query);\n" +" if (data.hits>0) {\n" +" if (data.hits==1) {\n" +" results.html('<p>'+searchResultsText[1]+'</p>');\n" +" } else {\n" +" results.html('<p>'+searchResultsText[2].replace(/\\$num/,data.hits)+'</p>');\n" +" }\n" +" var r='<table>';\n" +" $.each(data.items, function(i,item){\n" +" var prefix = tagMap[item.tag];\n" +" if (prefix) prefix+='/'; else prefix='';\n" +" r+='<tr class=\"searchresult\">'+\n" +" '<td align=\"right\">'+(data.first+i+1)+'.</td>'+\n" +" '<td>'+escapeHtml(item.type)+' '+\n" +" '<a href=\"'+escapeHtml(prefix+item.url)+\n" +" '\">'+escapeHtml(item.name)+'</a>';\n" +" if (item.type==\"source\") {\n" +" var l=item.url.match(/[1-9][0-9]*$/);\n" +" if (l) r+=' at line '+parseInt(l[0]);\n" +" }\n" +" r+='</td>';\n" +" for (var i=0;i<item.fragments.length;i++)\n" +" {\n" +" r+='<tr><td></td><td>'+item.fragments[i]+'</td></tr>';\n" +" }\n" +" r+='</tr>';\n" +" });\n" +" r+='</table>';\n" +" if (data.pages>1) // write multi page navigation bar\n" +" {\n" +" r+='<div class=\"searchpages\">';\n" +" if (data.page>0)\n" +" {\n" +" r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+(page-1).toString()+','+count.toString()+')\">«</a></span> ';\n" +" }\n" +" var firstPage = data.page-5;\n" +" var lastPage = data.page+5;\n" +" if (firstPage<0)\n" +" {\n" +" lastPage-=firstPage;\n" +" firstPage=0;\n" +" } \n" +" if (lastPage>data.pages)\n" +" {\n" +" lastPage=data.pages;\n" +" }\n" +" for(var i=firstPage;i<lastPage;i++)\n" +" {\n" +" if (i==data.page)\n" +" {\n" +" r+='<span class=\"pages\"><b>'+(i+1).toString()+'</b></span> ';\n" +" }\n" +" else\n" +" {\n" +" r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+i.toString()+','+count.toString()+')\">'+(i+1).toString()+'</a></span> ';\n" +" }\n" +" }\n" +" if (data.page+1<data.pages)\n" +" {\n" +" r+='<span class=\"pages\"><a href=\"javascript:searchFor(\\''+escapeHtml(query)+'\\','+(page+1).toString()+','+count.toString()+')\">»</a></span>';\n" +" }\n" +" r+='</div>';\n" +" }\n" +" results.append(r);\n" +" } else {\n" +" results.html('<p>'+searchResultsText[0]+'</p>');\n" +" }\n" +" });\n" +"}\n" |