function delay(callback, ms) { var timer = 0; return function() { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { callback.apply(context, args); }, ms || 0); }; } function GetIndex() { let url = '/search_index.json'; var request = new XMLHttpRequest(); request.open('GET', url, false); request.send(null); return request; } var r = JSON.parse(GetIndex().responseText).posts; // builds lunr var index = lunr(function () { this.field('title', {boost: 5}) this.field('content', {boost: 1}) this.field('summary') this.field('date') this.pipeline.remove(lunr.stemmer) this.searchPipeline.remove(lunr.stemmer) this.ref('link') r.forEach(item => { this.add(item); }) }) // builds search document.addEventListener("DOMContentLoaded", function(event) { var search_input = document.getElementById('postsearch'); search_input.addEventListener('keyup', delay(function () { var resultdiv = document.getElementById('results'); // Get query var query = search_input.value; if ( query === '' ) { resultdiv.innerHTML = ""; } else { // Search for it var result = (index.search(query+'*')).filter( x => x.score >= 0.05); // Show results resultdiv.innerHTML = ""; // Add status resultdiv.innerHTML = '
Found '+result.length+' result(s)
'+resultdiv.innerHTML; // Loop through, match, and add results result.forEach(res => { var ref = res.ref var item = r.filter(x => x.link === ref)[0] var searchitem = ''+item.title+'
'+item.summary+' - '+item.date+'