// in page results when press enter or click search icon from search box function closeSearchNow() { const main = document.querySelector("main"); main.innerHTML = window.main } function goSearchNow() { const main = document.querySelector("main"); if (!window.main) { window.main = main.innerHTML }; var results = document.getElementById("suggestions");// suggestions div generated by search box var ResultsClone = results.cloneNode(true);// make a clone of the results, so that we can alter it ResultsClone.id = "results";// alter the id of our clone, so that we can apply different css style var headerDiv = document.createElement("div");// create a div element var headerContent = '

'.concat(document.getElementById("searchinput").value, "

");// header to use at top of results page headerDiv.innerHTML = headerContent;// document element div (headerDiv), set the inner contents to our header html (headerContent) ResultsClone.insertBefore(headerDiv, ResultsClone.firstChild);//insert our header div at the top of the page main.innerHTML = ResultsClone.outerHTML;//display ResultsClone.outerHTML as the page results.innerHTML = "";// clear the suggestions div popup document.getElementById("searchinput").value = "";// clear the search input box document.body.contains(document.closeSearch) && (document.closeSearch.onsubmit = function() { closeSearchNow() }) return false } var loaded = false; window.onload = function() { document.body.contains(document.goSearch) && (document.goSearch.onsubmit = function() { return goSearchNow() }) document.getElementById('searchinput').onfocus = function() { if (!loaded) { lazyLoad(); loaded = true; document.body.contains(document.goSearch) && (document.goSearch.onsubmit = function() { return goSearchNow() }) } document.getElementById('searchinput').onfocus = ''; } }; async function lazyLoad() { var baseUrl = document.querySelector("meta[name='base']").getAttribute("content"); if (baseUrl.slice(-1) == "/") { baseUrl = baseUrl.slice(0, -1); } await init(baseUrl + "/tinysearch_engine_bg.wasm"); } /* Close search suggestion popup list */ function closeAllLists(elmnt) { var suggestions = document.getElementById("suggestions"); while (suggestions.firstChild) { suggestions.removeChild(suggestions.firstChild); } } function markTerm(input, term) { return input.replace(new RegExp('(^|)(' + term + ')(|$)','ig'), '$1$2$3'); } function autocomplete(inp) { inp.addEventListener("input", function (e) { var suggestions, entry, i, val = this.value; /*close any already open lists of autocompleted values*/ closeAllLists(); if (!val) { return false; } suggestions = document.getElementById("suggestions");// suggestions div, generated by search box let arr = search(val, 99);//limit results for (i = 0; i < arr.length; i++) { let elem = arr[i]; entry = document.createElement("DIV"); entry.innerHTML = ''; var a, t, d; a = entry.querySelector('a'), t = entry.querySelector('span:first-child'), d = entry.querySelector('span:nth-child(2)'); a.href = `${elem[1]}?q=${encodeURIComponent(val)}`;//a link t.innerHTML = markTerm(elem[0], val);//title d.innerHTML = markTerm(elem[2], val);//description suggestions.appendChild(entry); } }) } var searchinput = document.getElementById("searchinput"); function suggestionFocus(e) { if (e.keyCode === 191//forward slash && document.activeElement.tagName !== "INPUT" && document.activeElement.tagName !== "TEXTAREA") { e.preventDefault(); searchinput.focus(); suggestions.classList.remove('d-none'); } if (e.keyCode === 27 ) {//escape searchinput.blur(); suggestions.classList.add('d-none'); closeAllLists(); } const focusableSuggestions= suggestions.querySelectorAll('a'); if (suggestions.classList.contains('d-none') || focusableSuggestions.length === 0) { return; } const focusable= [...focusableSuggestions]; const index = focusable.indexOf(document.activeElement); let nextIndex = 0; if (e.keyCode === 38) {//up arrow e.preventDefault(); nextIndex= index > 0 ? index-1 : 0; focusableSuggestions[nextIndex].focus(); } else if (e.keyCode === 40) {//down arrow e.preventDefault(); nextIndex= index+1 < focusable.length ? index+1 : index; focusableSuggestions[nextIndex].focus(); } } document.addEventListener("keydown", suggestionFocus); let wasm, cachedTextDecoder = (autocomplete(document.getElementById("searchinput")), new TextDecoder("utf-8", { ignoreBOM: !0, fatal: !0 })), cachegetUint8Memory0 = (cachedTextDecoder.decode(), null); function getUint8Memory0() { return cachegetUint8Memory0 = null !== cachegetUint8Memory0 && cachegetUint8Memory0.buffer === wasm.memory.buffer ? cachegetUint8Memory0 : new Uint8Array(wasm.memory.buffer) } function getStringFromWasm0(e, t) { return cachedTextDecoder.decode(getUint8Memory0().subarray(e, e + t)) } const heap = new Array(32).fill(void 0); heap.push(void 0, null, !0, !1); let heap_next = heap.length; function addHeapObject(e) { heap_next === heap.length && heap.push(heap.length + 1); var t = heap_next; return heap_next = heap[t], heap[t] = e, t } let WASM_VECTOR_LEN = 0, cachedTextEncoder = new TextEncoder("utf-8"); const encodeString = "function" == typeof cachedTextEncoder.encodeInto ? function(e, t) { return cachedTextEncoder.encodeInto(e, t) } : function(e, t) { var n = cachedTextEncoder.encode(e); return t.set(n), { read: e.length, written: n.length } }; function passStringToWasm0(e, t, n) { if (void 0 === n) { const n = cachedTextEncoder.encode(e), a = t(n.length); return getUint8Memory0().subarray(a, a + n.length).set(n), WASM_VECTOR_LEN = n.length, a } let a = e.length, o = t(a); const i = getUint8Memory0(); let r = 0; for (; r < a; r++) { const t = e.charCodeAt(r); if (127 < t) break; i[o + r] = t } if (r !== a) { 0 !== r && (e = e.slice(r)), o = n(o, a, a = r + 3 * e.length); const t = getUint8Memory0().subarray(o + r, o + a); r += encodeString(e, t).written } return WASM_VECTOR_LEN = r, o } function getObject(e) { return heap[e] } function dropObject(e) { e < 36 || (heap[e] = heap_next, heap_next = e) } function takeObject(e) { var t = getObject(e); return dropObject(e), t } function search(e, t) { var e = passStringToWasm0(e, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc), n = WASM_VECTOR_LEN; return takeObject(wasm.search(e, n, t)) } async function load(e, t) { if ("function" == typeof Response && e instanceof Response) { if ("function" == typeof WebAssembly.instantiateStreaming) try { return await WebAssembly.instantiateStreaming(e, t) } catch (t) { if ("application/wasm" == e.headers.get("Content-Type")) throw t; console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", t) } var n = await e.arrayBuffer(); return WebAssembly.instantiate(n, t) } n = await WebAssembly.instantiate(e, t); return n instanceof WebAssembly.Instance ? { instance: n, module: e } : n } async function init(e) { var baseUrl = document.querySelector("meta[name='base']").getAttribute("content"); if (baseUrl.slice(-1) == "/") { baseUrl = baseUrl.slice(0, -1); } void 0 === e && (e = new URL(baseUrl + "/tinysearch_engine_bg.wasm")); const t = { wbg: {} }; t.wbg.__wbindgen_json_parse = function(e, t) { return addHeapObject(JSON.parse(getStringFromWasm0(e, t))) }; var { instance: e, module: n } = await load(await (e = "string" == typeof e || "function" == typeof Request && e instanceof Request || "function" == typeof URL && e instanceof URL ? fetch(e) : e), t); return wasm = e.exports, init.__wbindgen_wasm_module = n, wasm }