// All URLs listed here are from a custom NGINX config. let area = document.querySelector('#area-main'); let entries = []; let users = {}; let fetchData; let sum = 0; let doThings = false; let i = 0; let studios = {}; async function genTree(treeId) { let entry = treeId; while (true) { let entryDat = fetchData[entry]; entries.push(entry); if (!entryDat) break; let us = users[entryDat.username]; let s = 1 / ((new Date() - new Date(entryDat.datetime_created.$date)) + 1000 * 60 * 60); sum += s; users[entryDat.username] = (us ? us : 0) + s; entry = entryDat.parent_id; } return entry; } //todo: rewrite async function main(type) { let users = document.querySelector('#users').value.split('\n'); for (let user of users) { let typed = user[0]; user = user.slice(1); if (typed == '#') { studios[typed] = await (fetch(`https://hf.zenoverse.net/studio/${user}`) .then(x => x.json())); } } let url = new URL(window.location); url.search = '?users=' + users.join('&users='); history.pushState(null, '', url); entries = []; for (let user of users) { let typed = user[0]; user = user.slice(1); let extraFetch = []; if (typed == '#' && type == '#user') { extraFetch = await (fetch(`https://hf.zenoverse.net/studio_project/${user}`) .then(x => x.json())); extraFetch.forEach(x => { x.studio = studios[typed].title; x.studioID = user; }); } else if (typed == '#' && type == '#comment') { extraFetch = await (fetch(`https://hf.zenoverse.net/studio_comment/${user}`) .then(x => x.json())); extraFetch.forEach(x => x.studio = studios[typed].title); } else if (typed == '@' && type == '#user') { extraFetch = await (fetch(`https://hf.zenoverse.net/user/${user}`) .then(x => x.json())); extraFetch.forEach(x => x.username = user); } entries = [...entries, ...extraFetch]; } entries = entries.sort((a, b) => b.id - a.id); let params = new URL(window.location).searchParams; let start = params.get('start') * 1; let end = params.get('end') * 1; end = Math.min(end, entries.length - 2); if (start && end) { entries = entries.splice(entries.length - end - 2, end - start + 1); } doThings = true; setInterval(function () { if (!doThings || (window.innerHeight + window.scrollY) < document.body.scrollHeight - 25) return; if (type == '#user') scroller(); if (type == '#comment') commenter(); }, 500); } function sanitize(content) { const decoder = document.createElement('div'); decoder.textContent = content; return decoder.innerHTML; } function commenter() { let h = ''; area.className = 'nogrid'; for (let j = 0; j < 10; j++) { let entry = entries[i]; if (!entry) continue; // ugly tbf h += `