diff --git a/r/static/js/search.js b/r/static/js/search.js new file mode 100644 index 0000000..82323a8 --- /dev/null +++ b/r/static/js/search.js @@ -0,0 +1,61 @@ +let idxs = new XMLHttpRequest(); +idxs.open('GET', '/static/js/search/search-idx-list.json', false); +idxs.send(); +let idx_list =JSON.parse(idxs.responseText); + +let lnrjs = new XMLHttpRequest(); +lnrjs.open('GET', '/static/js/lunr.js', false); +lnrjs.send(); +eval(lnrjs.responseText); + + +let meta = new XMLHttpRequest(); +meta.open('GET', '/static/js/search/metadata.json', false); +meta.send(); +var metadata = JSON.parse(meta.responseText) + + +async function getData(element) { + const url = `/${element}`; + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Response status: ${response.status}`); + } + + const json = await response.json(); + return json + } catch (error) { + console.error(error.message); + } + } + +onmessage = (e) => { + let query = e.data + let results = [] + idx_list.forEach(element => { + p = getData(element) + p.then(function (json) { + let idx = lunr.Index.load(json) + res = idx.search(query).slice(0,100) + res.forEach(r => { + r.meta = metadata[r.ref] + }) + results = results.concat(res) + results = results.sort(({score:a}, {score:b}) => b-a); + results = results.slice(0,100) + postMessage(results) + }) + // let request = new XMLHttpRequest(); + // request.open('GET', `/${element}`, false); + // request.send(); + // console.log(JSON.parse(request.responseText)) + // let idx = lunr.Index.load(JSON.parse(request.responseText)) + // res = idx.search(query).slice(0,100) + // results = results.concat(res) + // results = results.sort(({score:a}, {score:b}) => b-a); + // results = results.slice(0,100) + // postMessage(results) + + }) +}