diff --git a/content/redirector.md b/content/redirector.md index a7cbcce896ff72471085322791e9ae28b4132d63..75fe28e69c42548791d62122e482bd8a8807a58c 100644 --- a/content/redirector.md +++ b/content/redirector.md @@ -2,75 +2,4 @@ title: "Redirector" --- -{{`` | safeJS }} + diff --git a/static/js/docs-redirector.js b/static/js/docs-redirector.js new file mode 100644 index 0000000000000000000000000000000000000000..27d0da9bbd5ac28e8d49a545582ab491c2dde75f --- /dev/null +++ b/static/js/docs-redirector.js @@ -0,0 +1,69 @@ +// Redirector for hcc-docs links +// 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; + } +});