From a5788d71fa7ac1cd6e5ed9a98f95f6ca1bddcbb4 Mon Sep 17 00:00:00 2001 From: Alex Shpak Date: Sun, 27 Oct 2019 11:58:58 +0100 Subject: #80, Add search index configuration --- assets/search-data.js | 45 ++++++++++++++++++++------------------------- assets/search.js | 14 +++++++------- 2 files changed, 27 insertions(+), 32 deletions(-) (limited to 'assets') diff --git a/assets/search-data.js b/assets/search-data.js index 6848438..a3fd51b 100644 --- a/assets/search-data.js +++ b/assets/search-data.js @@ -1,30 +1,25 @@ +'use strict'; + (function() { - const pages = [ - {{ range $index, $page := .Site.Pages }} - {{- if $index -}},{{- end }} - { - 'idx': {{ $index }}, - 'href': '{{ $page.RelPermalink }}', - 'title': {{ (partial "docs/title" $page) | jsonify }}, - 'content': {{ $page.Plain | jsonify }} - } - {{- end -}} - ]; + const indexCfg = {{ with .Site.Params.BookSearchConfig }} + {{ . }} + {{ end }}; - var index = new FlexSearch({ - cache: true, - encode: 'balance', - /* tokenize: function(str) { - return str.replace(/[\x00-\x7F]/g, ' ').split(''); - } */ - }); + indexCfg.doc = { + id: 'id', + field: ['title', 'content'], + store: ['title', 'href'], + }; - pages.forEach(function(page, x) { - index.add(x, pages[x].content); - }) + const index = FlexSearch.create('balance', indexCfg); + window.bookSearchIndex = index; - window.bookSearch = { - pages: pages, - index: index, - } + {{ range $index, $page := .Site.Pages }} + index.add({ + 'id': {{ $index }}, + 'href': '{{ $page.RelPermalink }}', + 'title': {{ (partial "docs/title" $page) | jsonify }}, + 'content': {{ $page.Plain | jsonify }} + }); + {{- end -}} })(); diff --git a/assets/search.js b/assets/search.js index b9cbb11..89302b1 100644 --- a/assets/search.js +++ b/assets/search.js @@ -1,5 +1,6 @@ -{{- $searchData := resources.Get "search-data.js" | resources.ExecuteAsTemplate "search-data.js" . | resources.Minify | resources.Fingerprint }} +'use strict'; +{{- $searchData := resources.Get "search-data.js" | resources.ExecuteAsTemplate "search-data.js" . | resources.Minify | resources.Fingerprint }} (function() { const input = document.querySelector('#book-search-input'); const results = document.querySelector('#book-search-results'); @@ -8,10 +9,10 @@ input.addEventListener('keyup', search); function init() { - input.removeEventListener('focus', init); //init once + input.removeEventListener('focus', init); // init once input.required = true; - loadScript('{{ "flexsearch.light.js" | relURL }}'); + loadScript('{{ "flexsearch.min.js" | relURL }}'); loadScript('{{ $searchData.RelPermalink }}', function() { input.required = false; search(); @@ -27,9 +28,8 @@ return; } - let searchHits = window.bookSearch.index.search(input.value, 10); - searchHits.forEach(function(hit) { - const page = window.bookSearch.pages[hit]; + const searchHits = window.bookSearchIndex.search(input.value, 10); + searchHits.forEach(function(page) { const li = document.createElement('li'), a = li.appendChild(document.createElement('a')); @@ -47,6 +47,6 @@ script.src = src; script.onload = callback; - document.head.append(script); + document.head.appendChild(script); } })(); -- cgit v1.2.3