-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlunrclient.js
97 lines (82 loc) · 2.67 KB
/
lunrclient.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// From: https://github.com/BLE-LTER/Lunr-Index-and-Search-for-Static-Sites
"use strict";
var LUNR_CONFIG = {
"resultsElementId": "searchResults", // Element to contain results
"countElementId": "resultCount" // Element showing number of results
};
// Get URL arguments
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return "";
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
// Parse search results into HTML
function parseLunrResults(results) {
var html = [];
for (var i = 0; i < results.length; i++) {
var id = results[i]["ref"];
var item = PREVIEW_LOOKUP[id]
var title = item["t"];
var preview = item["p"];
var link = item["l"];
var result = ('<p><span class="result-title"><a href="' + link + '">'
+ title + '</a></span><br><span class="result-preview">'
+ preview + '</span></p>');
html.push(result);
}
if (html.length) {
return html.join("");
}
else {
return "<p>Your search returned no results.</p>";
}
}
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function showResultCount(query, total, domElementId) {
if (total == 0) {
return;
}
var s = "";
if (total > 1) {
s = "s";
}
var found = "<p>Found " + total + " result" + s;
if (query != "" && query != null) {
query = escapeHtml(query);
var forQuery = ' for <span class="result-query">' + query + '</span>';
}
else {
var forQuery = "";
}
var element = document.getElementById(domElementId);
element.innerHTML = found + forQuery + "</p>";
}
function searchLunr(query) {
var idx = lunr.Index.load(LUNR_DATA);
// Write results to page
var results = idx.search(query);
var resultHtml = parseLunrResults(results);
var elementId = LUNR_CONFIG["resultsElementId"];
document.getElementById(elementId).innerHTML = resultHtml;
var count = results.length;
showResultCount(query, count, LUNR_CONFIG["countElementId"]);
}
// When the window loads, read query parameters and perform search
window.onload = function() {
var query = getParameterByName("q");
if (query != "" && query != null) {
document.forms.lunrSearchForm.q.value = query;
searchLunr(query);
}
};