From 5ef8c77a6fd8e38854c0aa3796fc8a59e72d2c64 Mon Sep 17 00:00:00 2001 From: John Thiltges <jthiltges2@unl.edu> Date: Thu, 13 Dec 2018 16:18:57 -0600 Subject: [PATCH] Horrible JavaScript search redirector, mk 1 --- content/redirector.md | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 content/redirector.md diff --git a/content/redirector.md b/content/redirector.md new file mode 100644 index 00000000..b7211b62 --- /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 }} -- GitLab