| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | 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) |
| | }) |
| | }) |