const idx = lunr(function () { this.field('id') this.field('link') this.field('title') this.field('body') {{ range $index, $page := .Site.Pages }} this.add({ "id": "{{ $index }}", "link": "{{ .Permalink }}", "title": "{{ .Title }}", "body": "{{ .PlainWords }}".toLowerCase(), }); {{ end }} }); const simpleIndex = [ {{ range $index, $page := .Site.Pages }} { id: {{ $index }}, link: "{{ .Permalink }}", title: "{{ .Title }}", }, {{ end }} ]; function searchResults(results=[], order =[],query="") { let resultsFragment = new DocumentFragment(); let showResults = elem('.search_results'); emptyEl(showResults); let index = 0 if(results.length) { let resultsTitle = createEl('h3'); resultsTitle.className = 'search_title'; resultsTitle.innerText = 'Quick Links'; resultsFragment.appendChild(resultsTitle); results.slice(0,6).forEach(function(result){ let item = createEl('a'); item.href = `${result.link}?query=${query}`; item.className = 'search_result'; item.textContent = result.title; item.style.order = order[index]; resultsFragment.appendChild(item); index += 1 }); } else { showResults.innerHTML = ""; } showResults.appendChild(resultsFragment); } function search(){ const searchField = elem('.search_field'); if (searchField) { searchField.addEventListener('input', function(event) { const searchTerm = this.value.trim().replaceAll(" ", " +").toLowerCase(); if(searchTerm.length >= 3) { let rawResults = idx.search(`+${searchTerm}`); console.log(rawResults, searchTerm); if(rawResults.length) { let refs = rawResults.map(function(ref){ // return id and score in a single string return `${ref.ref}:${ref.score}`; }); let ids = refs.map(function(id){ let positionOfSeparator = id.indexOf(":"); id = id.substring(0,positionOfSeparator) return Number(id); }); let scores = refs.map(function(score){ let positionOfSeparator = score.indexOf(":"); score = score.substring((positionOfSeparator + 1), (score.length - 1)); return (parseFloat(score) * 50).toFixed(0); }); console.log(scores, 'scores is'); let matchedDocuments = simpleIndex.filter(function(doc){ return ids.includes(doc.id); }); console.log('matches are', matchedDocuments); matchedDocuments.length >= 1 ? searchResults(matchedDocuments, scores,searchTerm) : false; } else { searchResults(); } } else { searchResults(); } }); } } let alltext = doc.innerHTML; console.log(typeof alltext); // doc.innerHTML = alltext.replaceAll('is', 'is'); window.addEventListener('load', () => search());