From a3f7d8b9484d14f36e34ce77d5f4b25405bcc01f Mon Sep 17 00:00:00 2001 From: Alex Shpak Date: Wed, 17 Jul 2019 13:42:39 +0200 Subject: Improve search settings --- assets/book.scss | 10 +++++----- assets/search-data.js | 6 +++--- assets/search.js | 45 +++++++++++++++++++++++++++++---------------- 3 files changed, 37 insertions(+), 24 deletions(-) (limited to 'assets') diff --git a/assets/book.scss b/assets/book.scss index 08ae91e..86bcf84 100644 --- a/assets/book.scss +++ b/assets/book.scss @@ -139,20 +139,20 @@ ul.pagination { .book-search { #book-search-input { + opacity: .33; + border: 0; - border-bottom: $padding-1 solid $gray-200; + border-bottom: $padding-1 solid $body-font-color; outline: none; padding: $padding-4 $padding-8 $padding-4 $padding-16 + $padding-4; - margin-bottom: $padding-4; - width: 85%; background: url("svg/search.svg") left center no-repeat; background-size: $padding-16; - + &:focus { - border-bottom-color: $body-font-color; + opacity: 1; } } diff --git a/assets/search-data.js b/assets/search-data.js index 5b015e4..53394e7 100644 --- a/assets/search-data.js +++ b/assets/search-data.js @@ -14,9 +14,9 @@ window.bookSearch = { pages: pages, idx: lunr(function() { - this.ref('idx'); - this.field('title'); - this.field('content'); + this.ref("idx"); + this.field("title", { boost: 10000 }); + this.field("content"); pages.forEach(this.add, this); }), diff --git a/assets/search.js b/assets/search.js index e29f183..edb81e9 100644 --- a/assets/search.js +++ b/assets/search.js @@ -6,14 +6,12 @@ const dummy = document.querySelector("#book-search-dummy"); input.addEventListener("focus", init); + input.addEventListener("keyup", search); function init() { loadScript("{{ "lunr.min.js" | relURL }}") - loadScript("{{ $searchData.RelPermalink }}", function() { - input.disabled = false; - input.addEventListener("keyup", search); - search(); - }); + loadScript("{{ $searchData.RelPermalink }}", search); + input.removeEventListener("focus", init); } @@ -22,19 +20,34 @@ results.removeChild(results.firstChild); } - if (input.value) { - const hits = window.bookSearch.idx.search(`${input.value}*`); - hits.slice(0, 10).forEach(function(hit) { - const page = window.bookSearch.pages[hit.ref]; - const li = dummy.querySelector("li").cloneNode(true), - a = li.querySelector("a"); - - a.href = page.href; - a.textContent = page.title; + if (!input.value || !window.bookSearch) { + return + } - results.appendChild(li); + const terms = lunr.tokenizer(input.value); + const searchHits = window.bookSearch.idx.query(function(query) { + query.term(terms, { + boost: 100, }); - } + query.term(terms, { + boost: 10, + wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING, + }); + query.term(terms, { + editDistance: 2 + }); + }); + + searchHits.slice(0, 10).forEach(function(hit) { + const page = window.bookSearch.pages[hit.ref]; + const li = dummy.querySelector("li").cloneNode(true), + a = li.querySelector("a"); + + a.href = page.href; + a.textContent = page.title; + + results.appendChild(li); + }); } function loadScript(src, callback) { -- cgit v1.2.3