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