const SIZE = 40; let mimeMap = []; let tagMap = []; let mimeTree; let tagTree; let searchBar = document.getElementById("searchBar"); let pathBar = document.getElementById("pathBar"); let lastDoc = null; let reachedEnd = false; let docCount = 0; let coolingDown = false; let searchBusy = true; let selectedIndices = []; let indexMap = {}; let size_min = 0; let size_max = 10000000000000; let date_min = null; let date_max = null; SORT_MODES = { score: { text: "Relevance", mode: [ {_score: {order: "desc"}}, {_tie: {order: "asc"}} ], key: hit => hit["_score"] }, date_asc: { text: "Date (Ascending)", mode: [ {mtime: {order: "asc"}}, {_tie: {order: "asc"}} ], key: hit => hit["_source"]["mtime"] }, date_desc: { text: "Date (Descending)", mode: [ {mtime: {order: "desc"}}, {_tie: {order: "asc"}} ], key: hit => hit["_source"]["mtime"] }, size_asc: { text: "Size (Ascending)", mode: [ {size: {order: "asc"}}, {_tie: {order: "asc"}} ], key: hit => hit["_source"]["size"] }, size_desc: { text: "Size (Descending)", mode: [ {size: {order: "desc"}}, {_tie: {order: "asc"}} ], key: hit => hit["_source"]["size"] }, }; function showEsError() { $.toast({ heading: "Elasticsearch connection error", text: "sist2 web module encountered an error while connecting " + "to Elasticsearch. See server logs for more information.", stack: false, bgColor: "#a94442", textColor: "#f2dede", position: 'bottom-right', hideAfter: false }); } window.onload = () => { CONF.load(); new autoComplete({ selector: '#pathBar', minChars: 1, delay: 400, renderItem: function (item) { return '
' + item + '
'; }, source: async function (term, suggest) { if (!CONF.options.suggestPath) { return [] } term = term.toLowerCase(); const choices = await getPathChoices(); let matches = []; for (let i = 0; i < choices.length; i++) { if (~choices[i].toLowerCase().indexOf(term)) { matches.push(choices[i]); } } suggest(matches.sort()); }, onSelect: function () { searchDebounced(); } }); searchBar.addEventListener("keyup", searchDebounced); pathBar.addEventListener("keyup", e => { if (e.key === "Enter") { searchDebounced(); } }); }; function toggleFuzzy() { searchDebounced(); } $.jsonPost("i").then(resp => { const urlIndices = (new URLSearchParams(location.search)).get("i"); resp["indices"].forEach(idx => { indexMap[idx.id] = idx.name; const opt = $("