| 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(); |
|
|
| return URL.createObjectURL(inferenceBlob); |
| }; |
|
|
| 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', |
| `<thead> |
| <tr> |
| <td>text</td> |
| <td>emotion</td> |
| </tr> |
| </thead>` |
| ); |
| }; |
|
|
| 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); |
|
|