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