From 57c4ec440a28abf36ebd9c3cafe01659e6c46e78 Mon Sep 17 00:00:00 2001 From: Fredrik Jonsson Date: Tue, 17 Aug 2021 08:52:46 +0200 Subject: [PATCH] Updating to FlexSearch.js v0.7.2. --- assets/js/lib/flexsearch.compact.js | 27 +++++++++++++++++++ assets/js/lib/flexsearch.min.js | 42 ----------------------------- assets/js/search.js | 26 ++++++++++++------ layouts/partials/scripts.html | 7 +---- 4 files changed, 46 insertions(+), 56 deletions(-) create mode 100644 assets/js/lib/flexsearch.compact.js delete mode 100644 assets/js/lib/flexsearch.min.js diff --git a/assets/js/lib/flexsearch.compact.js b/assets/js/lib/flexsearch.compact.js new file mode 100644 index 0000000..b1b9587 --- /dev/null +++ b/assets/js/lib/flexsearch.compact.js @@ -0,0 +1,27 @@ +/**! + * FlexSearch.js v0.7.2 (Compact) + * Copyright 2018-2021 Nextapps GmbH + * Author: Thomas Wilkerling + * Licence: Apache-2.0 + * https://github.com/nextapps-de/flexsearch + */ +(function(self){'use strict';var t;function v(a){return"undefined"!==typeof a?a:!0}function w(a){const b=Array(a);for(let c=0;c=this.m&&(u||!n[l])){var f=P(q,e,r),g="";switch(this.C){case "full":if(3f;h--)if(h-f>=this.m){var k=P(q,e,r,d,f);g=l.substring(f,h);Q(this,n,g,k,a,c)}break}case "reverse":if(2=this.m&&Q(this,n, +g,P(q,e,r,d,h),a,c);g=""}case "forward":if(1=this.m&&Q(this,n,g,f,a,c);break}default:if(this.G&&(f=Math.min(f/this.G(b,l,r)|0,q-1)),Q(this,n,l,f,a,c),u&&1=this.m&&!d[l]){d[l]=1;const p=this.l&&l>f;Q(this,m,p?f:l,P(g+(e/2>g?0:1),e,r,h-1,k-1),a,c,p?l:f)}}}}this.D||(this.register[a]=1)}}return this}; +function P(a,b,c,e,d){return c&&1=this.m&&!c[q])if(this.s||f||this.h[q])k[u++]=q,c[q]=1;else return e;a=k;d=a.length}if(!d)return e;b||(b=100);h=this.depth&&1=e)))break;if(n){if(f)return ma(k,e,0);b[b.length]=k;return}}return!c&&k}function ma(a,b,c){a=1===a.length?a[0]:[].concat.apply([],a);return c||a.length>b?a.slice(c,c+b):a} +function na(a,b,c,e){c?(e=e&&b>c,a=(a=a[e?b:c])&&a[e?c:b]):a=a[b];return a}t.contain=function(a){return!!this.register[a]};t.update=function(a,b){return this.remove(a).add(a,b)};t.remove=function(a,b){const c=this.register[a];if(c){if(this.D)for(let e=0,d;eb||c)d=d.slice(c,c+b);e&&(d=qa.call(this,d));return{tag:a,result:d}}}function qa(a){const b=Array(a.length);for(let c=0,e;c=d&&(this.u=this.g),this.u===this.g&&(this.cache&&this.j.set(c,this.o),this.F&&this.F(this.o)));return this}function S(a){const c=B();for(const b in a)if(a.hasOwnProperty(b)){const d=a[b];F(d)?c[b]=d.slice(0):G(d)?c[b]=S(d):c[b]=d}return c}function W(a,c){const b=a.length,d=O(c),e=[];for(let f=0,h=0;f=h&&(a=a[g-(e+.5>>0)],a=a[b]||(a[b]=[]), -a[a.length]=d);return e}function ba(a,c){if(a){const b=Object.keys(a);for(let d=0,e=b.length;da?1:a?-1:0}function pa(a,c){a=a[M];c=c[M];return ac?1:0}function oa(a,c){const b=M.length;for(let d=0;dc?1:0}function T(a,c,b){return a?{page:a,next:c?""+c:null,result:b}:b}function ha(a,c,b,d,e,f,h){let g,k=[];if(!0===b){b="0";var l=""}else l=b&&b.split(":");const p=a.length;if(1h&&(l=0),l=l||0,g=l+c,g=this.m.length&&(this.C=0),this.m[this.C].postMessage({add:!0,id:a, -content:c}),this.c[f]=""+this.C,b&&b(),this;if(!e){if(this.async&&"function"!==typeof importScripts){let t=this;f=new Promise(function(v){setTimeout(function(){t.add(a,c,null,d,!0);t=null;v()})});if(b)f.then(b);else return f;return this}if(b)return this.add(a,c,null,d,!0),b(),this}c=this.encode(c);if(!c.length)return this;b=this.f;e=O(b)?b(c):c.split(this.split);this.filter&&(e=W(e,this.filter));const n=B();n._ctx=B();const m=e.length,u=this.threshold,q=this.depth,A=this.b,z=this.i,y=this.D;for(let t= -0;tp;x--)l=h.substring(p,x),V(z,n,l,a,v,k,u,A-1)}break;default:if(g=V(z,n,h,a,1,k,u,A-1),q&&1=u)for(g=n._ctx[h]||(n._ctx[h]=B()),h=this.h[h]||(this.h[h]=ia(A-(u||0))),k=t-q,l=t+q+1,0>k&&(k=0),l> -m&&(l=m);kh;d--)e=g[d-1],g[d]=e,f[e]=d;g[h]=c;f[c]=h}}}return b};return a}();return w}(function(){const K={},R="undefined"!==typeof Blob&& -"undefined"!==typeof URL&&URL.createObjectURL;return function(w,L,S,W,P){S=R?URL.createObjectURL(new Blob(["("+S.toString()+")()"],{type:"text/javascript"})):w+".min.js";w+="-"+L;K[w]||(K[w]=[]);K[w][P]=new Worker(S);K[w][P].onmessage=W;return K[w][P]}}()),this); diff --git a/assets/js/search.js b/assets/js/search.js index fafddf1..72b1893 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -9,10 +9,10 @@ 'use strict'; - const flexSearch = new FlexSearch({ - doc: { + const index = new FlexSearch.Document({ + document: { id: 'id', - field: ['title','tags','content','date'], + index: ['title','tags','content','date'], store: ['title','summary','date','permalink'] } }); @@ -24,7 +24,8 @@ const results = document.querySelector('.search-results'); results.textContent = ''; - for (const item of items) { + for (const id in items) { + const item = items[id]; const result = template.cloneNode(true); const a = result.querySelector('a'); const time = result.querySelector('time'); @@ -40,11 +41,18 @@ function doSearch() { const query = document.querySelector('.search-text').value.trim(); - const results = flexSearch.search({ + const results = index.search({ query: query, + enrich: true, limit: {{ .Site.Params.searchLimit | default 20 }} }); - showResults(results); + const items = {}; + results.forEach( function(result) { + result.result.forEach( function(r) { + items[r.id] = r.doc; + }); + }); + showResults(items); } function enableUI() { @@ -53,7 +61,7 @@ e.preventDefault(); doSearch(); }); - searchform.addEventListener('keyup', function () { + searchform.addEventListener('input', function () { doSearch(); }); document.querySelector('.search-loading').classList.add('hidden'); @@ -68,7 +76,9 @@ return response.json(); }) .then(function (data) { - flexSearch.add(data); + data.forEach(function (item) { + index.add(item); + }) }); } diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html index 60832f7..50834e0 100644 --- a/layouts/partials/scripts.html +++ b/layouts/partials/scripts.html @@ -33,15 +33,10 @@ {{ end -}} {{ if .HasShortcode "search" -}} -{{ $flexsearch := resources.Get "js/lib/flexsearch.min.js" | fingerprint -}} +{{ $flexsearch := resources.Get "js/lib/flexsearch.compact.js" | fingerprint -}} {{ $search := resources.Get "js/search.js" | resources.ExecuteAsTemplate "js/search.js" . | minify | fingerprint -}} {{ end -}} {{ $script := resources.Get "js/script.js" | minify | fingerprint -}} - - - - -