let results; var index = new FlexSearch.Document({ encode: function(str){ const cjkItems = str.replace(/[\x00-\x7F]/g, "").split(""); const asciiItems = str.toLowerCase().split(/\W+/); return cjkItems.concat(asciiItems); }, document: { id: "id_str", index: ["full_text"], store: true } }); const searchInput = document.getElementById('search-input'); function processData(data) { for (doc of data) { index.add({ id_str: doc.id_str, created_at: doc.created_at, full_text: doc.full_text, favorite_count: doc.favorite_count, retweet_count: doc.retweet_count }) }; document.getElementById('loading').hidden = true; document.getElementById('search').hidden = false; } processData(searchDocuments); let browseDocuments = searchDocuments.sort(function(a,b){ return new Date(b.created_at) - new Date(a.created_at); }); function sortResults(criterion) { if (criterion === 'newest-first') { results = results.sort(function(a,b){ return new Date(b.created_at) - new Date(a.created_at); }); renderResults(); } if (criterion === 'oldest-first') { results = results.sort(function(a,b){ return new Date(a.created_at) - new Date(b.created_at); }); renderResults(); } if (criterion === 'most-relevant') { results = results.sort(function(a,b){ return a.index - b.index; }); renderResults(); } if (criterion === 'most-popular') { results = results.sort(function(a,b){ return (+b.favorite_count + +b.retweet_count) - (+a.favorite_count + +a.retweet_count); }); renderResults(); } if (criterion === 'newest-first-browse') { browseDocuments = browseDocuments.sort(function(a,b){ return new Date(b.created_at) - new Date(a.created_at); }); renderBrowse(); } if (criterion === 'oldest-first-browse') { browseDocuments = browseDocuments.sort(function(a,b){ return new Date(a.created_at) - new Date(b.created_at); }); renderBrowse(); } if (criterion === 'most-popular-browse') { browseDocuments = browseDocuments.sort(function(a,b){ return (+b.favorite_count + +b.retweet_count) - (+a.favorite_count + +a.retweet_count); }); renderBrowse(); } } function renderResults() { const output = results.map(item => `

${item.full_text}
${new Date(item.created_at).toLocaleString()}

`.replace(/\.\.\/\.\.\/tweets_media\//g,'shannonkay/tweets_media/')); document.getElementById('output').innerHTML = output.join(''); if (results.length > 0) { document.getElementById('output').innerHTML += 'top ↑'; } } function onSearchChange(e) { results = index.search(e.target.value, { enrich: true }); if (results.length > 0) { // limit search results to the top 100 by relevance results = results.slice(0,100); // preserve original search result order in the 'index' variable since that is ordered by relevance results = results[0].result.map((item, index) => { let result = item.doc; result.index = index; return result;}); } renderResults(); } searchInput.addEventListener('input', onSearchChange); function searchTab() { const clickedTab = document.getElementById('search-tab'); clickedTab.classList.add('active'); const otherTab = document.getElementById('browse-tab'); otherTab.classList.remove('active'); document.getElementById('browse').hidden = true; document.getElementById('search').hidden = false; } function browseTab() { const clickedTab = document.getElementById('browse-tab'); clickedTab.classList.add('active'); const otherTab = document.getElementById('search-tab'); otherTab.classList.remove('active'); const searchContent = document.getElementById('search'); document.getElementById('search').hidden = true; document.getElementById('browse').hidden = false; } const pageSize = 50; const pageMax = Math.floor(browseDocuments.length/pageSize) + 1; let page = 1; let browseIndex = (page - 1) * pageSize; function onPageNumChange(e) { page = e.target.value; browseIndex = (page - 1) * pageSize; renderBrowse(); } document.getElementById('page-total').innerText = pageMax; document.getElementById('page-num').addEventListener('input', onPageNumChange); document.getElementById('page-num').value = +page; document.getElementById('page-num').max = pageMax; document.getElementById('page-num').min = 1; function renderBrowse() { const output = browseDocuments.slice(browseIndex, browseIndex + pageSize).map(item => `

${item.full_text}
${new Date(item.created_at).toLocaleString()}

`.replace(/\.\.\/\.\.\/tweets_media\//g,'shannonkay/tweets_media/')); document.getElementById('browse-output').innerHTML = output.join(''); document.getElementById('browse-output').innerHTML += 'top ↑'; } renderBrowse();