From ecd36f650d27b4de6f2cfcf93f683a96706ec3c9 Mon Sep 17 00:00:00 2001 From: Grisha Shipunov Date: Mon, 12 Jan 2026 21:38:16 +0100 Subject: update --- js/search.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 js/search.js (limited to 'js/search.js') diff --git a/js/search.js b/js/search.js new file mode 100644 index 0000000..90ef720 --- /dev/null +++ b/js/search.js @@ -0,0 +1,90 @@ +function makeTeaser(body, terms) { + if (!body) return ''; + var TEASER_MAX_CHARS = 200; + var lowerBody = body.toLowerCase(); + var firstTermIndex = -1; + + for (var i = 0; i < terms.length; i++) { + var idx = lowerBody.indexOf(terms[i].toLowerCase()); + if (idx !== -1 && (firstTermIndex === -1 || idx < firstTermIndex)) { + firstTermIndex = idx; + } + } + + var start = Math.max(0, firstTermIndex - 50); + var end = Math.min(body.length, start + TEASER_MAX_CHARS); + var teaser = (start > 0 ? '…' : '') + body.substring(start, end) + (end < body.length ? '…' : ''); + + terms.forEach(function(term) { + var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')', 'gi'); + teaser = teaser.replace(regex, '$1'); + }); + + return teaser; +} + +function formatSearchResultItem(item, terms, isLast) { + var doc = item.item; + return '
' + (isLast ? '' : 'No results
'; + return; + } + + var terms = term.split(" ").filter(function(t) { return t.length > 0; }); + var count = Math.min(results.length, MAX_ITEMS); + for (var i = 0; i < count; i++) { + $searchResultsItems.innerHTML += formatSearchResultItem(results[i], terms, i === count - 1); + } + } + + $searchInput.oninput = function() { + clearTimeout(debounceTimer); + debounceTimer = setTimeout(doSearch, 150); + }; +} + +if (document.readyState === "complete" || + (document.readyState !== "loading" && !document.documentElement.doScroll) +) { + initSearch(); +} else { + document.addEventListener("DOMContentLoaded", initSearch); +} -- cgit v1.3.1