Rohan Sircar
5 years ago
1 changed files with 0 additions and 130 deletions
@ -1,130 +0,0 @@ |
|||||
"use strict"; |
|
||||
{{ $isRel := and $.Site.Params.ref_type (eq $.Site.Params.ref_type "relative") }} |
|
||||
{{ if $isRel }} |
|
||||
// JavaScript trickery to make relative paths work
|
|
||||
var lunrJSON = ""; |
|
||||
var pathToRoot = ""; |
|
||||
var scripts = document.getElementsByTagName('script'); |
|
||||
for (var i = 0; i < scripts.length; i++ ) { |
|
||||
var scr = scripts[i]; |
|
||||
if (scr.hasAttribute("src") && ((scr.getAttribute("src")[0] === '/' && scr.getAttribute("src")[1] !== '/') || scr.getAttribute("src")[0] === '.')) { |
|
||||
pathToRoot = scr.getAttribute("src").replace(/\/js\/.+$/, ""); |
|
||||
lunrJSON = pathToRoot + "/index.json"; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
{{ else }} |
|
||||
var lunrJSON = "{{ partial "make_link" (dict "URL" "/index.json" "Root" $) }}"; |
|
||||
{{ end }} |
|
||||
var lunrIndex = undefined; |
|
||||
var rawIndex = []; |
|
||||
var sbox = document.getElementById("searchbox"); |
|
||||
var sresults = document.getElementById("search-results"); |
|
||||
var searchAnalytics = undefined; |
|
||||
|
|
||||
function getJSON(url) { |
|
||||
return new Promise(function(resolve, reject) { |
|
||||
var req = new XMLHttpRequest(); |
|
||||
req.responseType = 'json'; |
|
||||
req.open('GET', url, true); |
|
||||
req.addEventListener("load", function() { |
|
||||
var status = req.status; |
|
||||
if (status === 200) |
|
||||
resolve(req.response); |
|
||||
else |
|
||||
reject(status); |
|
||||
}); |
|
||||
console.log("Loading search index"); |
|
||||
req.send(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
function loadIndex(url) { |
|
||||
return new Promise(function(resolve, reject) { |
|
||||
getJSON(url).then( |
|
||||
function(json) { |
|
||||
rawIndex = json; |
|
||||
lunrIndex = lunr(function () { |
|
||||
this.ref('id'); |
|
||||
// These are all fields searched for results
|
|
||||
this.field('url'); |
|
||||
this.field('name'); |
|
||||
this.field('description'); |
|
||||
this.field('body'); |
|
||||
|
|
||||
for (var i = 0; i < rawIndex.length; i++) { |
|
||||
// Adding id allows to access other properties later
|
|
||||
rawIndex[i].id = i; |
|
||||
this.add(rawIndex[i]); |
|
||||
} |
|
||||
}); |
|
||||
resolve(lunrIndex); |
|
||||
}, |
|
||||
function(status) { |
|
||||
console.error("Unable to load search index. Status: " + status); |
|
||||
reject(status); |
|
||||
} |
|
||||
); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
function populateSearchbox() { |
|
||||
// Trailing asterisk wildcards a potentially incomplete word
|
|
||||
var content = sbox.value; |
|
||||
if (content.length > 0 && content[content.length - 1] !== " ") |
|
||||
content += "*"; |
|
||||
// Empty previous results
|
|
||||
sresults.innerHTML = ""; |
|
||||
|
|
||||
if (lunrIndex !== undefined) { |
|
||||
var results = lunrIndex.search(content); |
|
||||
|
|
||||
// Add each result to a <a href="url"><div>Name</div></a>
|
|
||||
// and append to the results
|
|
||||
results.forEach(function(data) { |
|
||||
var result = document.createElement("div"); |
|
||||
result.setAttribute("class", "search-result cell button"); |
|
||||
result.innerHTML = rawIndex[data.ref].name; |
|
||||
var link = document.createElement("a"); |
|
||||
{{ if $isRel }} |
|
||||
link.setAttribute("href", pathToRoot + rawIndex[data.ref].url); |
|
||||
{{ else }} |
|
||||
link.setAttribute("href", rawIndex[data.ref].url); |
|
||||
{{ end }} |
|
||||
// Add event handler to results to log search if using piwik
|
|
||||
if (typeof _paq !== "undefined") { |
|
||||
link.addEventListener("click", function() { |
|
||||
searchAnalytics = { |
|
||||
keyword: sbox.value, |
|
||||
numResults: results.length |
|
||||
}; |
|
||||
}); |
|
||||
} |
|
||||
link.appendChild(result); |
|
||||
sresults.appendChild(link); |
|
||||
}); |
|
||||
|
|
||||
// Hide if no content (only asterisk, thanks to above line)
|
|
||||
sresults.setAttribute("class", results.length === 0 ? "hide" : ""); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
sbox.addEventListener("keyup", populateSearchbox); |
|
||||
window.addEventListener("beforeunload", function(){ |
|
||||
if (typeof _paq !== "undefined" && searchAnalytics !== undefined) { |
|
||||
_paq.push(['trackSiteSearch', |
|
||||
// Search keyword searched for
|
|
||||
searchAnalytics.keyword, |
|
||||
// Search category selected in your search engine. If you do not need this, set to false
|
|
||||
false, |
|
||||
// Number of results on the Search results page. Zero indicates a 'No Result Search Keyword'. Set to false if you don't know
|
|
||||
searchAnalytics.numResults |
|
||||
]); |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
var lunrIndex = undefined; |
|
||||
loadIndex(lunrJSON).then( |
|
||||
function(index) { lunrIndex = index; }, |
|
||||
function(status){} |
|
||||
); |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue