Skip to content
Snippets Groups Projects

Horrible JavaScript search redirector, mk 1

Merged John Thiltges requested to merge redir into master
1 file
+ 76
0
Compare changes
  • Side-by-side
  • Inline
+ 76
0
 
---
 
title: "Redirector"
 
---
 
 
{{ `<script>
 
 
// Search for URL parameter 'q' and redirect to top match
 
 
var lunrIndex;
 
 
function getQueryVariable(variable) {
 
var query = window.location.search.substring(1);
 
var vars = query.split('&');
 
 
for (var i = 0; i < vars.length; i++) {
 
var pair = vars[i].split('=');
 
 
if (pair[0] === variable) {
 
return decodeURIComponent(pair[1].replace(/\+/g, '%20'));
 
}
 
}
 
}
 
 
// Initialize lunrjs using our generated index file
 
function initLunr() {
 
// First retrieve the index file
 
return $.getJSON(baseurl + "/index.json")
 
.done(function(index) {
 
pagesIndex = index;
 
// Set up lunrjs by declaring the fields we use
 
// Also provide their boost level for the ranking
 
lunrIndex = new lunr.Index
 
lunrIndex.ref("uri");
 
lunrIndex.field('title', {
 
boost: 15
 
});
 
lunrIndex.field('tags', {
 
boost: 10
 
});
 
lunrIndex.field("content", {
 
boost: 5
 
});
 
 
// Feed lunr with each file and let lunr actually index them
 
pagesIndex.forEach(function(page) {
 
lunrIndex.add(page);
 
});
 
lunrIndex.pipeline.remove(lunrIndex.stemmer)
 
})
 
.fail(function(jqxhr, textStatus, error) {
 
var err = textStatus + ", " + error;
 
console.error("Error getting Hugo index file:", err);
 
});
 
}
 
 
function search(query) {
 
// Find the item in our index corresponding to the lunr one to have more info
 
return lunrIndex.search(query).map(function(result) {
 
return pagesIndex.filter(function(page) {
 
return page.uri === result.ref;
 
})[0];
 
});
 
}
 
 
initLunr().then(function() {
 
var searchTerm = getQueryVariable('q');
 
var results = search(searchTerm);
 
 
if (!results.length) {
 
window.location = baseurl;
 
} else {
 
window.location = results[0].uri;
 
}
 
});
 
 
</script>` | safeJS }}
Loading