diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-01-02 13:38:15 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-01-02 19:11:08 +0300 |
commit | 54be3ea1162306f86f1e2916e5e6babd58ea7382 (patch) | |
tree | f11b7c7bbafd7c15d7f64bd961788d73f89ed807 | |
parent | 3c0ca916a78a6b207176e947563581c9e5f1ac44 (diff) |
Update to lunr.js v2.3.8
-rw-r--r-- | assets/js/slate/app/_search.js | 103 | ||||
-rw-r--r-- | config.toml | 5 | ||||
-rw-r--r-- | exampleSite/go.mod | 1 | ||||
-rw-r--r-- | exampleSite/go.sum | 2 |
4 files changed, 111 insertions, 0 deletions
diff --git a/assets/js/slate/app/_search.js b/assets/js/slate/app/_search.js new file mode 100644 index 0000000..da51dbb --- /dev/null +++ b/assets/js/slate/app/_search.js @@ -0,0 +1,103 @@ +//= require ../lib/_lunr +//= require ../lib/_jquery +//= require ../lib/_jquery.highlight +; (function () { + 'use strict'; + + var content, searchResults; + var highlightOpts = { element: 'span', className: 'search-highlight' }; + var searchDelay = 0; + var timeoutHandle = 0; + var index; + + $(populate); + $(bind); + + function populate() { + index = lunr(function () { + this.ref('id'); + this.field('title', { boost: 10 }); + this.field('body') + this.pipeline.add(lunr.trimmer, lunr.stopWordFilter); + var that = this; + + $('h1, h2').each(function () { + var title = $(this); + var body = title.nextUntil('h1, h2'); + that.add({ + id: title.prop('id'), + title: title.text(), + body: body.text() + }); + }); + + determineSearchDelay(this); + + }) + } + + + function determineSearchDelay(index) { + if (index._documents.length > 5000) { + searchDelay = 300; + } + } + + function bind() { + content = $('.content'); + searchResults = $('.search-results'); + + $('#input-search').on('keyup', function (e) { + var wait = function () { + return function (executingFunction, waitTime) { + clearTimeout(timeoutHandle); + timeoutHandle = setTimeout(executingFunction, waitTime); + }; + }(); + wait(function () { + search(e); + }, searchDelay); + }); + } + + function search(event) { + + var searchInput = $('#input-search')[0]; + + unhighlight(); + searchResults.addClass('visible'); + + // ESC clears the field + if (event.keyCode === 27) searchInput.value = ''; + + if (searchInput.value) { + var results = index.search(searchInput.value).filter(function (r) { + return r.score > 0.0001; + }); + + if (results.length) { + searchResults.empty(); + $.each(results, function (index, result) { + var elem = document.getElementById(result.ref); + searchResults.append("<li><a href='#" + result.ref + "'>" + $(elem).text() + "</a></li>"); + }); + highlight.call(searchInput); + } else { + searchResults.html('<li></li>'); + $('.search-results li').text('No Results Found for "' + searchInput.value + '"'); + } + } else { + unhighlight(); + searchResults.removeClass('visible'); + } + } + + function highlight() { + if (this.value) content.highlight(this.value, highlightOpts); + } + + function unhighlight() { + content.unhighlight(highlightOpts); + } +})(); + diff --git a/config.toml b/config.toml index ff306cf..41d3404 100644 --- a/config.toml +++ b/config.toml @@ -10,6 +10,11 @@ path="github.com/jquery/jquery-dist" source="dist/jquery.js" target="assets/js/slate/lib/_jquery.js" [[module.imports]] +path="github.com/olivernn/lunr.js" +[[module.imports.mounts]] +source="lunr.js" +target="assets/js/slate/lib/_lunr.js" +[[module.imports]] path="github.com/slatedocs/slate" [[module.imports.mounts]] source="source/images" diff --git a/exampleSite/go.mod b/exampleSite/go.mod index 756ebf4..a39a043 100644 --- a/exampleSite/go.mod +++ b/exampleSite/go.mod @@ -5,5 +5,6 @@ go 1.12 require ( github.com/bep/empty-hugo-module v1.0.0 // indirect github.com/jquery/jquery-dist v0.0.0-20191202185020-55b7d19f7bf1 // indirect + github.com/olivernn/lunr.js v2.3.8+incompatible // indirect github.com/slatedocs/slate v2.3.1+incompatible // indirect ) diff --git a/exampleSite/go.sum b/exampleSite/go.sum index 04c35b2..43df89b 100644 --- a/exampleSite/go.sum +++ b/exampleSite/go.sum @@ -2,4 +2,6 @@ github.com/bep/empty-hugo-module v1.0.0 h1:aYc9RWea644CdYjg9zCy8nkVF4KjC3fwhUTvv github.com/bep/empty-hugo-module v1.0.0/go.mod h1:whohinbSjMoFi/Skivj9kvdPs1tEgzYpZ4rXoQk/0/I= github.com/jquery/jquery-dist v0.0.0-20191202185020-55b7d19f7bf1 h1:5J/Uu1ow4Ldq50ZaN8fq9qkqDq6UJdjSoHy6oVBBSR4= github.com/jquery/jquery-dist v0.0.0-20191202185020-55b7d19f7bf1/go.mod h1:/lTfttEqFU0GWTaOOMIeNTzLGQ7yTIgyzjtkS/pYIoc= +github.com/olivernn/lunr.js v2.3.8+incompatible h1:t9qfO9qpBCSEhjnvTHQtfOA8Ggwnvn5Y1JWFalyoPl0= +github.com/olivernn/lunr.js v2.3.8+incompatible/go.mod h1:yEkQ1DUSMtNsn8n2CqvQXZd0ErWPEG8g9QRmblR+KS8= github.com/slatedocs/slate v2.3.1+incompatible/go.mod h1:n698aXLkExWIlF7prJey0Kq6wlKIKvj/stVb5oouZDM= |