diff options
Diffstat (limited to 'docs/js/search.js')
-rw-r--r-- | docs/js/search.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/docs/js/search.js b/docs/js/search.js new file mode 100644 index 000000000..6127f55c7 --- /dev/null +++ b/docs/js/search.js @@ -0,0 +1,57 @@ +(function() { + function displaySearchResults(results, store) { + var searchResults = document.getElementById('search-results'); + + if (results.length) { // Are there any results? + var appendString = ''; + + for (var i = 0; i < results.length; i++) { // Iterate over the results + var item = store[results[i].ref]; + appendString += '<li><a href="' + item.url + '"><h3>' + item.title + '</h3></a>'; + appendString += '<p>' + item.content.substring(0, 100) + '...</p></li>'; + } + + searchResults.innerHTML = appendString; + } else { + searchResults.innerHTML = '<li>No results found</li>'; + } + } + + 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')); + } + } + } + + var searchTerm = getQueryVariable('query'); + + if (searchTerm) { + document.getElementById('search-box').setAttribute("value", searchTerm); + var idx = lunr(function () { + this.field('id'); + this.field('title', { boost: 10 }); // hits in title get a boost + this.field('author'); + this.field('content'); + }); + + for (var key in window.store) { // Add the data to lunr + var author = (typeof window.store[key].author === 'undefined') ? "" : window.store[key].author; + idx.add({ + 'id': key, + 'title': window.store[key].title, + 'author': author, + 'content': window.store[key].content + }); + + var results = idx.search(searchTerm); // Get lunr to perform a search + displaySearchResults(results, window.store); // We'll write this in the next section + } + } +})(); |