if (document.location.search.includes('dark-theme=true')) { document.body.classList.add('dark-theme'); } let cursor = 0; const RANGE = 5; const LIMIT = 16_000; const textToImage = async (text) => { const inferenceResponse = await fetch(`infer_biggan?input=${text}`); const inferenceBlob = await inferenceResponse.blob(); const content = URL.createObjectURL(inferenceBlob); return content; }; const translateText = async (text) => { const inferResponse = await fetch(`infer_t5?input=${text}`); const inferJson = await inferResponse.json(); return inferJson.output; }; const queryDataset = async (start, end) => { const queryResponse = await fetch(`query_emotion?start=${start}&end=${end}`); const queryJson = await queryResponse.json(); return queryJson.output; }; const updateTable = async (cursor, range = RANGE) => { const table = document.querySelector('.dataset-output'); const fragment = new DocumentFragment(); const observations = await queryDataset(cursor, cursor + range); for (const observation of observations) { let row = document.createElement('tr'); let text = document.createElement('td'); let emotion = document.createElement('td'); text.textContent = observation.text; emotion.textContent = observation.emotion; row.appendChild(text); row.appendChild(emotion); fragment.appendChild(row); } table.innerHTML = ''; table.appendChild(fragment); table.insertAdjacentHTML( 'afterbegin', ` text emotion ` ); }; const imageGenSelect = document.getElementById('image-gen-input'); const imageGenImage = document.querySelector('.image-gen-output'); const textGenForm = document.querySelector('.text-gen-form'); const tableButtonPrev = document.querySelector('.table-previous'); const tableButtonNext = document.querySelector('.table-next'); imageGenSelect.addEventListener('change', async (event) => { const value = event.target.value; try { imageGenImage.src = await textToImage(value); imageGenImage.alt = value + ' generated from BigGAN AI model'; } catch (err) { console.error(err); } }); textGenForm.addEventListener('submit', async (event) => { event.preventDefault(); const textGenInput = document.getElementById('text-gen-input'); const textGenParagraph = document.querySelector('.text-gen-output'); try { textGenParagraph.textContent = await translateText(textGenInput.value); } catch (err) { console.error(err); } }); tableButtonPrev.addEventListener('click', () => { cursor = cursor > RANGE ? cursor - RANGE : 0; if (cursor < RANGE) { tableButtonPrev.classList.add('hidden'); } if (cursor < LIMIT - RANGE) { tableButtonNext.classList.remove('hidden'); } updateTable(cursor); }); tableButtonNext.addEventListener('click', () => { cursor = cursor < LIMIT - RANGE ? cursor + RANGE : cursor; if (cursor >= RANGE) { tableButtonPrev.classList.remove('hidden'); } if (cursor >= LIMIT - RANGE) { tableButtonNext.classList.add('hidden'); } updateTable(cursor); }); textToImage(imageGenSelect.value) .then((image) => (imageGenImage.src = image)) .catch(console.error); updateTable(cursor) .catch(console.error);