attemp at fixing search not working
This commit is contained in:
parent
5087f26919
commit
72e11c0eda
@ -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){}
|
|
||||||
);
|
|
Loading…
Reference in New Issue
Block a user