diff --git a/content/redirector.md b/content/redirector.md new file mode 100644 index 0000000000000000000000000000000000000000..b7211b62e4462784e59762e86cf77d2abfdba04a --- /dev/null +++ b/content/redirector.md @@ -0,0 +1,76 @@ +--- +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 }}