| |
| |
| |
| |
| |
| |
| |
| function waitQuerySelector(selector, timeout = 5000, $rootElement = gradioApp()) { |
| return new Promise((resolve, reject) => { |
| const element = $rootElement.querySelector(selector) |
| if (document.querySelector(element)) { |
| return resolve(element) |
| } |
|
|
| let timeoutId |
|
|
| const observer = new MutationObserver(() => { |
| const element = $rootElement.querySelector(selector) |
| if (!element) { |
| return |
| } |
|
|
| if (timeoutId) { |
| clearInterval(timeoutId) |
| } |
|
|
| observer.disconnect() |
| resolve(element) |
| }) |
|
|
| timeoutId = setTimeout(() => { |
| observer.disconnect() |
| reject(new Error(`timeout, cannot find element by '${selector}'`)) |
| }, timeout) |
|
|
| observer.observe($rootElement, { |
| childList: true, |
| subtree: true |
| }) |
| }) |
| } |
|
|
| document.addEventListener('DOMContentLoaded', () => { |
| Promise.all([ |
| |
| waitQuerySelector('#additioanl-tags'), |
| waitQuerySelector('#exclude-tags'), |
|
|
| |
| waitQuerySelector('#rating-confidents'), |
| waitQuerySelector('#tag-confidents') |
| ]).then(elements => { |
|
|
| const $additionalTags = elements[0].querySelector('textarea') |
| const $excludeTags = elements[1].querySelector('textarea') |
| const $ratingConfidents = elements[2] |
| const $tagConfidents = elements[3] |
|
|
| let $selectedTextarea = $additionalTags |
|
|
| |
| |
| |
| |
| |
| function onClickTextarea(e) { |
| $selectedTextarea = this |
| } |
|
|
| $additionalTags.addEventListener('click', onClickTextarea) |
| $excludeTags.addEventListener('click', onClickTextarea) |
|
|
| |
| |
| |
| |
| |
| function onClickLabels(e) { |
| |
| const $tag = e.target.closest('.output-label > div:not(:first-child)') |
| if (!$tag) { |
| return |
| } |
|
|
| |
| const tag = $tag.querySelector('.leading-snug').textContent |
|
|
| |
| const escapedTag = tag.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') |
| const pattern = new RegExp(`(^|,)\\s{0,}${escapedTag}\\s{0,}($|,)`) |
| if (pattern.test($selectedTextarea.value)) { |
| return |
| } |
|
|
| if ($selectedTextarea.value !== '') { |
| $selectedTextarea.value += ', ' |
| } |
|
|
| $selectedTextarea.value += tag |
| } |
|
|
| $ratingConfidents.addEventListener('click', onClickLabels) |
| $tagConfidents.addEventListener('click', onClickLabels) |
|
|
| }).catch(err => { |
| console.error(err) |
| }) |
| }) |