Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bep/docuapi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-02 13:38:15 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-02 19:11:08 +0300
commit54be3ea1162306f86f1e2916e5e6babd58ea7382 (patch)
treef11b7c7bbafd7c15d7f64bd961788d73f89ed807 /assets
parent3c0ca916a78a6b207176e947563581c9e5f1ac44 (diff)
Update to lunr.js v2.3.8
Diffstat (limited to 'assets')
-rw-r--r--assets/js/slate/app/_search.js103
1 files changed, 103 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);
+ }
+})();
+