| |
| |
| |
| |
|
|
| |
| const core = [ |
| "#txt2img_prompt > label > textarea", |
| "#img2img_prompt > label > textarea", |
| "#txt2img_neg_prompt > label > textarea", |
| "#img2img_neg_prompt > label > textarea" |
| ]; |
|
|
| |
| const thirdParty = { |
| "dataset-tag-editor": { |
| "base": "#tab_dataset_tag_editor_interface", |
| "hasIds": false, |
| "selectors": [ |
| "Caption of Selected Image", |
| "Interrogate Result", |
| "Edit Caption", |
| "Edit Tags" |
| ] |
| }, |
| "image browser": { |
| "base": "#tab_image_browser", |
| "hasIds": false, |
| "selectors": [ |
| "Filename keyword search", |
| "EXIF keyword search" |
| ] |
| }, |
| "tab_tagger": { |
| "base": "#tab_tagger", |
| "hasIds": false, |
| "selectors": [ |
| "Additional tags (split by comma)", |
| "Exclude tags (split by comma)" |
| ] |
| }, |
| "tiled-diffusion-t2i": { |
| "base": "#txt2img_script_container", |
| "hasIds": true, |
| "onDemand": true, |
| "selectors": [ |
| "[id^=MD-t2i][id$=prompt] textarea", |
| "[id^=MD-t2i][id$=prompt] input[type='text']" |
| ] |
| }, |
| "tiled-diffusion-i2i": { |
| "base": "#img2img_script_container", |
| "hasIds": true, |
| "onDemand": true, |
| "selectors": [ |
| "[id^=MD-i2i][id$=prompt] textarea", |
| "[id^=MD-i2i][id$=prompt] input[type='text']" |
| ] |
| } |
| } |
|
|
| function getTextAreas() { |
| |
| let textAreas = [...gradioApp().querySelectorAll(core.join(", "))]; |
|
|
| for (const [key, entry] of Object.entries(thirdParty)) { |
| if (entry.hasIds) { |
| textAreas = textAreas.concat([...gradioApp().querySelectorAll(entry.selectors.join(", "))]); |
| } else { |
| let base = gradioApp().querySelector(entry.base); |
|
|
| |
| if (!base) continue; |
|
|
| let allTextAreas = [...base.querySelectorAll("textarea, input[type='text']")]; |
|
|
| |
| let matchingTextAreas = allTextAreas.filter(ta => [...ta.parentElement.childNodes].some(x => entry.selectors.includes(x.innerText))); |
| textAreas = textAreas.concat(matchingTextAreas); |
| } |
| }; |
|
|
| return textAreas; |
| } |
|
|
| function addOnDemandObservers(setupFunction) { |
| for (const [key, entry] of Object.entries(thirdParty)) { |
| if (!entry.onDemand) continue; |
|
|
| let base = gradioApp().querySelector(entry.base); |
| if (!base) continue; |
| |
| let accordions = [...base?.querySelectorAll(".gradio-accordion")]; |
| if (!accordions) continue; |
|
|
| accordions.forEach(acc => { |
| let accObserver = new MutationObserver((mutationList, observer) => { |
| for (const mutation of mutationList) { |
| if (mutation.type === "childList") { |
| let newChildren = mutation.addedNodes; |
| if (!newChildren) { |
| accObserver.disconnect(); |
| continue; |
| } |
|
|
| newChildren.forEach(child => { |
| if (child.classList.contains("gradio-accordion") || child.querySelector(".gradio-accordion")) { |
| let newAccordions = [...child.querySelectorAll(".gradio-accordion")]; |
| newAccordions.forEach(nAcc => accObserver.observe(nAcc, { childList: true })); |
| } |
| }); |
|
|
| if (entry.hasIds) { |
| [...gradioApp().querySelectorAll(entry.selectors.join(", "))].forEach(x => setupFunction(x)); |
| } else { |
| let base = gradioApp().querySelector(entry.base); |
| |
| |
| if (!base) continue; |
| |
| let allTextAreas = [...base.querySelectorAll("textarea, input[type='text']")]; |
| |
| |
| let matchingTextAreas = allTextAreas.filter(ta => [...ta.parentElement.childNodes].some(x => entry.selectors.includes(x.innerText))); |
| matchingTextAreas.forEach(x => setupFunction(x)); |
| } |
| } |
| } |
| }); |
| accObserver.observe(acc, { childList: true }); |
| }); |
| }; |
| } |
|
|
| const thirdPartyIdSet = new Set(); |
| |
| function getTextAreaIdentifier(textArea) { |
| let txt2img_p = gradioApp().querySelector('#txt2img_prompt > label > textarea'); |
| let txt2img_n = gradioApp().querySelector('#txt2img_neg_prompt > label > textarea'); |
| let img2img_p = gradioApp().querySelector('#img2img_prompt > label > textarea'); |
| let img2img_n = gradioApp().querySelector('#img2img_neg_prompt > label > textarea'); |
|
|
| let modifier = ""; |
| switch (textArea) { |
| case txt2img_p: |
| modifier = ".txt2img.p"; |
| break; |
| case txt2img_n: |
| modifier = ".txt2img.n"; |
| break; |
| case img2img_p: |
| modifier = ".img2img.p"; |
| break; |
| case img2img_n: |
| modifier = ".img2img.n"; |
| break; |
| default: |
| |
| |
| if (!thirdPartyIdSet.has(textArea)) |
| thirdPartyIdSet.add(textArea); |
|
|
| modifier = `.thirdParty.ta${[...thirdPartyIdSet].indexOf(textArea)}`; |
| break; |
| } |
| return modifier; |
| } |