|
function set_theme(theme) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
var selectedTabItemId = "tab_txt2img"; |
|
|
|
function all_gallery_buttons() { |
|
var allGalleryButtons = gradioApp().querySelectorAll('[style="display: block;"].tabitem div[id$=_gallery].gradio-gallery .thumbnails > .thumbnail-item.thumbnail-small'); |
|
var visibleGalleryButtons = []; |
|
allGalleryButtons.forEach(function(elem) { |
|
if (elem.parentElement.offsetParent) { |
|
visibleGalleryButtons.push(elem); |
|
} |
|
}); |
|
return visibleGalleryButtons; |
|
} |
|
|
|
function selected_gallery_button() { |
|
var allCurrentButtons = gradioApp().querySelectorAll('[style="display: block;"].tabitem div[id$=_gallery].gradio-gallery .thumbnail-item.thumbnail-small.selected'); |
|
var visibleCurrentButton = null; |
|
allCurrentButtons.forEach(function(elem) { |
|
if (elem.parentElement.offsetParent) { |
|
visibleCurrentButton = elem; |
|
} |
|
}); |
|
return visibleCurrentButton; |
|
} |
|
|
|
function selected_gallery_index() { |
|
var buttons = all_gallery_buttons(); |
|
var button = selected_gallery_button(); |
|
|
|
var result = -1; |
|
buttons.forEach(function(v, i) { |
|
if (v == button) { |
|
result = i; |
|
} |
|
}); |
|
|
|
return result; |
|
} |
|
|
|
function extract_image_from_gallery(gallery) { |
|
if (gallery.length == 0) { |
|
return [null]; |
|
} |
|
if (gallery.length == 1) { |
|
return [gallery[0]]; |
|
} |
|
|
|
var index = selected_gallery_index(); |
|
|
|
if (index < 0 || index >= gallery.length) { |
|
|
|
index = 0; |
|
} |
|
|
|
return [gallery[index]]; |
|
} |
|
|
|
window.args_to_array = Array.from; |
|
|
|
function switch_to_txt2img() { |
|
gradioApp().querySelector('#tabs').querySelectorAll('button')[0].click(); |
|
|
|
return Array.from(arguments); |
|
} |
|
|
|
function switch_to_img2img_tab(no) { |
|
gradioApp().querySelector('#tabs').querySelectorAll('button')[1].click(); |
|
gradioApp().getElementById('mode_img2img').querySelectorAll('button')[no].click(); |
|
} |
|
function switch_to_img2img() { |
|
switch_to_img2img_tab(0); |
|
return Array.from(arguments); |
|
} |
|
|
|
function switch_to_sketch() { |
|
switch_to_img2img_tab(1); |
|
return Array.from(arguments); |
|
} |
|
|
|
function switch_to_inpaint() { |
|
switch_to_img2img_tab(2); |
|
return Array.from(arguments); |
|
} |
|
|
|
function switch_to_inpaint_sketch() { |
|
switch_to_img2img_tab(3); |
|
return Array.from(arguments); |
|
} |
|
|
|
function switch_to_extras() { |
|
gradioApp().querySelector('#tabs').querySelectorAll('button')[2].click(); |
|
|
|
return Array.from(arguments); |
|
} |
|
|
|
function get_tab_index(tabId) { |
|
let buttons = gradioApp().getElementById(tabId).querySelector('div').querySelectorAll('button'); |
|
for (let i = 0; i < buttons.length; i++) { |
|
if (buttons[i].classList.contains('selected')) { |
|
return i; |
|
} |
|
} |
|
return 0; |
|
} |
|
|
|
function create_tab_index_args(tabId, args) { |
|
var res = Array.from(args); |
|
res[0] = get_tab_index(tabId); |
|
return res; |
|
} |
|
|
|
function get_img2img_tab_index() { |
|
let res = Array.from(arguments); |
|
res.splice(-2); |
|
res[0] = get_tab_index('mode_img2img'); |
|
return res; |
|
} |
|
|
|
function create_submit_args(args) { |
|
var res = Array.from(args); |
|
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(res[res.length - 3])) { |
|
res[res.length - 3] = null; |
|
} |
|
|
|
return res; |
|
} |
|
|
|
function showSubmitButtons(tabname, show) { |
|
gradioApp().getElementById(tabname + "_interrupt").style.display = show ? "none" : "flex"; |
|
gradioApp().getElementById(tabname + "_skip").style.display = show ? "none" : "flex"; |
|
gradioApp().getElementById(tabname + "_generate").style.display = !show ? "none" : "flex"; |
|
} |
|
|
|
function showRestoreProgressButton(tabname, show) { |
|
var button = gradioApp().getElementById(tabname + "_restore_progress"); |
|
if (!button) return; |
|
|
|
button.style.display = show ? "flex" : "none"; |
|
} |
|
|
|
|
|
function submit() { |
|
showSubmitButtons('txt2img', false); |
|
|
|
var id = randomId(); |
|
localStorage.setItem("txt2img_task_id", id); |
|
|
|
requestProgress(id, gradioApp().getElementById('txt2img_gallery_container'), gradioApp().getElementById('txt2img_gallery'), function() { |
|
showSubmitButtons('txt2img', true); |
|
localStorage.removeItem("txt2img_task_id"); |
|
showRestoreProgressButton('txt2img', false); |
|
}); |
|
|
|
var res = create_submit_args(arguments); |
|
|
|
res[0] = id; |
|
|
|
return res; |
|
} |
|
|
|
function submit_img2img() { |
|
showSubmitButtons('img2img', false); |
|
|
|
var id = randomId(); |
|
localStorage.setItem("img2img_task_id", id); |
|
|
|
requestProgress(id, gradioApp().getElementById('img2img_gallery_container'), gradioApp().getElementById('img2img_gallery'), function() { |
|
showSubmitButtons('img2img', true); |
|
localStorage.removeItem("img2img_task_id"); |
|
showRestoreProgressButton('img2img', false); |
|
}); |
|
|
|
var res = create_submit_args(arguments); |
|
|
|
res[0] = id; |
|
res[1] = get_tab_index('mode_img2img'); |
|
|
|
return res; |
|
} |
|
|
|
function restoreProgressTxt2img() { |
|
showRestoreProgressButton("txt2img", false); |
|
var id = localStorage.getItem("txt2img_task_id"); |
|
|
|
id = localStorage.getItem("txt2img_task_id"); |
|
|
|
if (id) { |
|
requestProgress(id, gradioApp().getElementById('txt2img_gallery_container'), gradioApp().getElementById('txt2img_gallery'), function() { |
|
showSubmitButtons('txt2img', true); |
|
}, null, 0); |
|
} |
|
|
|
return id; |
|
} |
|
|
|
function restoreProgressImg2img() { |
|
showRestoreProgressButton("img2img", false); |
|
|
|
var id = localStorage.getItem("img2img_task_id"); |
|
|
|
if (id) { |
|
requestProgress(id, gradioApp().getElementById('img2img_gallery_container'), gradioApp().getElementById('img2img_gallery'), function() { |
|
showSubmitButtons('img2img', true); |
|
}, null, 0); |
|
} |
|
|
|
return id; |
|
} |
|
|
|
onUiLoaded(function() { |
|
showRestoreProgressButton('txt2img', localStorage.getItem("txt2img_task_id")); |
|
showRestoreProgressButton('img2img', localStorage.getItem("img2img_task_id")); |
|
}); |
|
|
|
|
|
function modelmerger() { |
|
var id = randomId(); |
|
requestProgress(id, gradioApp().getElementById('modelmerger_results_panel'), null, function() {}); |
|
|
|
var res = create_submit_args(arguments); |
|
res[0] = id; |
|
return res; |
|
} |
|
|
|
|
|
function ask_for_style_name(_, prompt_text, negative_prompt_text) { |
|
var name_ = prompt('Style name:'); |
|
return [name_, prompt_text, negative_prompt_text]; |
|
} |
|
|
|
function confirm_clear_prompt(prompt, negative_prompt) { |
|
if (confirm("Delete prompt?")) { |
|
prompt = ""; |
|
negative_prompt = ""; |
|
} |
|
|
|
return [prompt, negative_prompt]; |
|
} |
|
|
|
|
|
var promptTokecountUpdateFuncs = {}; |
|
|
|
function recalculatePromptTokens(name) { |
|
if (promptTokecountUpdateFuncs[name]) { |
|
promptTokecountUpdateFuncs[name](); |
|
} |
|
} |
|
|
|
function recalculate_prompts_txt2img() { |
|
recalculatePromptTokens('txt2img_prompt'); |
|
recalculatePromptTokens('txt2img_neg_prompt'); |
|
return Array.from(arguments); |
|
} |
|
|
|
function recalculate_prompts_img2img() { |
|
recalculatePromptTokens('img2img_prompt'); |
|
recalculatePromptTokens('img2img_neg_prompt'); |
|
return Array.from(arguments); |
|
} |
|
|
|
|
|
var opts = {}; |
|
onUiUpdate(function() { |
|
|
|
if (Object.keys(opts).length != 0) return; |
|
|
|
var json_elem = gradioApp().getElementById("settings_json"); |
|
if (json_elem == null) return; |
|
|
|
var textarea = json_elem.querySelector("textarea"); |
|
var jsdata = textarea.value; |
|
opts = JSON.parse(jsdata); |
|
executeCallbacks(optionsChangedCallbacks); |
|
|
|
Object.defineProperty(textarea, "value", { |
|
set: function (newValue) { |
|
var valueProp = Object.getOwnPropertyDescriptor( |
|
HTMLTextAreaElement.prototype, |
|
"value" |
|
); |
|
var oldValue = valueProp.get.call(textarea); |
|
valueProp.set.call(textarea, newValue); |
|
|
|
if (oldValue != newValue) { |
|
opts = JSON.parse(textarea.value); |
|
} |
|
|
|
executeCallbacks(optionsChangedCallbacks); |
|
}, |
|
get: function () { |
|
var valueProp = Object.getOwnPropertyDescriptor( |
|
HTMLTextAreaElement.prototype, |
|
"value" |
|
); |
|
return valueProp.get.call(textarea); |
|
}, |
|
}); |
|
|
|
|
|
|
|
json_elem.parentElement.style.display = "none"; |
|
|
|
function registerTextarea(id, id_counter, id_button) { |
|
var prompt = gradioApp().getElementById(id); |
|
var counter = gradioApp().getElementById(id_counter); |
|
var textarea = gradioApp().querySelector("#" + id + " > label > textarea"); |
|
|
|
if (counter.parentElement == prompt.parentElement) { |
|
return; |
|
} |
|
|
|
prompt.parentElement.insertBefore(counter, prompt); |
|
counter.classList.add("token-counter"); |
|
prompt.parentElement.style.position = "relative"; |
|
|
|
promptTokecountUpdateFuncs[id] = function () { |
|
update_token_counter(id_button); |
|
}; |
|
textarea.addEventListener("input", promptTokecountUpdateFuncs[id]); |
|
} |
|
|
|
registerTextarea( |
|
"txt2img_prompt", |
|
"txt2img_token_counter", |
|
"txt2img_token_button" |
|
); |
|
registerTextarea( |
|
"txt2img_neg_prompt", |
|
"txt2img_negative_token_counter", |
|
"txt2img_negative_token_button" |
|
); |
|
registerTextarea( |
|
"img2img_prompt", |
|
"img2img_token_counter", |
|
"img2img_token_button" |
|
); |
|
registerTextarea( |
|
"img2img_neg_prompt", |
|
"img2img_negative_token_counter", |
|
"img2img_negative_token_button" |
|
); |
|
|
|
var show_all_pages = gradioApp().getElementById("settings_show_all_pages"); |
|
var settings_tabs = gradioApp().querySelector("#settings div"); |
|
if (show_all_pages && settings_tabs) { |
|
settings_tabs.appendChild(show_all_pages); |
|
show_all_pages.onclick = function () { |
|
gradioApp() |
|
.querySelectorAll("#settings > div") |
|
.forEach(function (elem) { |
|
elem.style.display = "block"; |
|
}); |
|
gradioApp() |
|
.querySelectorAll("#settings > div > div > div") |
|
.forEach(function (elem) { |
|
elem.style.maxHeight = "none"; |
|
}); |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function autoGrowPromptTextarea() { |
|
gradioApp() |
|
.querySelectorAll('[id$="_prompt"] textarea') |
|
.forEach(function (elem) { |
|
elem.parentElement.click(); |
|
}); |
|
} |
|
|
|
gradioApp() |
|
.querySelectorAll( |
|
'[id$="_prompt"] textarea, [id^="setting_"] textarea, textarea' |
|
) |
|
.forEach(function (elem) { |
|
elem.style.boxSizing = "border-box"; |
|
var offset = elem.offsetHeight - elem.clientHeight; |
|
elem.addEventListener("input", function (e) { |
|
e.target.style.minHeight = "auto"; |
|
e.target.style.minHeight = e.target.scrollHeight + offset + 2 + "px"; |
|
}); |
|
|
|
elem.parentElement.addEventListener("click", function (e) { |
|
let textarea = e.currentTarget.querySelector("textarea"); |
|
textarea.style.minHeight = "auto"; |
|
textarea.style.minHeight = textarea.scrollHeight + offset + 2 + "px"; |
|
}); |
|
}); |
|
|
|
|
|
const resizeEvent = window.document.createEvent("UIEvents"); |
|
resizeEvent.initUIEvent("resize", true, false, window, 0); |
|
|
|
gradioApp() |
|
.querySelectorAll('[id $="2img_splitter"]') |
|
.forEach((elem) => { |
|
elem.addEventListener("mousedown", function (e) { |
|
e.preventDefault(); |
|
|
|
let resizer = e.currentTarget; |
|
let container = resizer.parentElement; |
|
|
|
let flexDir = window |
|
.getComputedStyle(container) |
|
.getPropertyValue("flex-direction"); |
|
|
|
let leftSide = resizer.previousElementSibling; |
|
let rightSide = resizer.nextElementSibling; |
|
|
|
let dir = flexDir == "row-reverse" ? -1.0 : 1.0; |
|
|
|
let x = e.clientX; |
|
let y = e.clientY; |
|
let leftWidth = leftSide.getBoundingClientRect().width; |
|
|
|
function mouseMoveHandler(e) { |
|
resizer.style.cursor = "col-resize"; |
|
container.style.cursor = "col-resize"; |
|
|
|
const dx = (e.clientX - x) * dir; |
|
const dy = (e.clientY - y) * dir; |
|
|
|
const newLeftWidth = |
|
((leftWidth + dx) * 100) / container.getBoundingClientRect().width; |
|
leftSide.style.flexBasis = `${newLeftWidth}%`; |
|
leftSide.style.userSelect = "none"; |
|
leftSide.style.pointerEvents = "none"; |
|
rightSide.style.userSelect = "none"; |
|
rightSide.style.pointerEvents = "none"; |
|
|
|
} |
|
|
|
function mouseUpHandler() { |
|
resizer.style.removeProperty("cursor"); |
|
container.style.removeProperty("cursor"); |
|
leftSide.style.removeProperty("user-select"); |
|
leftSide.style.removeProperty("pointer-events"); |
|
rightSide.style.removeProperty("user-select"); |
|
rightSide.style.removeProperty("pointer-events"); |
|
container.removeEventListener("mousemove", mouseMoveHandler); |
|
container.removeEventListener("mouseup", mouseUpHandler); |
|
|
|
} |
|
|
|
container.addEventListener("mousemove", mouseMoveHandler); |
|
container.addEventListener("mouseup", mouseUpHandler); |
|
}); |
|
|
|
let flex_reverse = false; |
|
elem.addEventListener("dblclick", function (e) { |
|
flex_reverse = !flex_reverse; |
|
e.preventDefault(); |
|
|
|
let resizer = e.currentTarget; |
|
let container = resizer.parentElement; |
|
|
|
|
|
if (flex_reverse) { |
|
container.style.flexDirection = "row-reverse"; |
|
} else { |
|
container.style.flexDirection = "row"; |
|
} |
|
}); |
|
}); |
|
|
|
|
|
|
|
|
|
const Observe = (sel, opt, cb) => { |
|
const Obs = new MutationObserver((m) => [...m].forEach(cb)); |
|
gradioApp() |
|
.querySelectorAll(sel) |
|
.forEach((el) => Obs.observe(el, opt)); |
|
}; |
|
Observe( |
|
"#tabs > div.tabitem", |
|
{ |
|
attributesList: ["style"], |
|
attributeOldValue: true, |
|
}, |
|
(m) => { |
|
if (m.target.style.display === "block") { |
|
let idx = parseInt(m.target.getAttribute("tab-item")); |
|
selectedTabItemId = m.target.id; |
|
tabItemChanged(idx); |
|
} |
|
} |
|
); |
|
|
|
function tabItemChanged(idx) { |
|
gradioApp() |
|
.querySelectorAll( |
|
"#tabs > div > button.selected, #nav_menu_header_tabs > button.selected" |
|
) |
|
.forEach(function (tab) { |
|
tab.classList.remove("selected"); |
|
}); |
|
|
|
gradioApp() |
|
.querySelectorAll( |
|
"#tabs > div > button:nth-child(" + |
|
(idx + 1) + |
|
"), #nav_menu_header_tabs > button:nth-child(" + |
|
(idx + 1) + |
|
")" |
|
) |
|
.forEach(function (tab) { |
|
tab.classList.add("selected"); |
|
}); |
|
|
|
gradioApp() |
|
.querySelectorAll("#tabs > div > button") |
|
.forEach(function (tab, index) { |
|
tab.setAttribute("tab-id", index); |
|
tab.removeEventListener("mouseup", navTabClicked); |
|
tab.addEventListener("mouseup", navTabClicked); |
|
if (tab.innerHTML.indexOf("Theme") != -1) tab.style.display = "none"; |
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
netMenuVisibility(); |
|
} |
|
|
|
|
|
function disableScroll() { |
|
scrollTop = window.pageYOffset || document.documentElement.scrollTop; |
|
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; |
|
window.scrollTo(scrollLeft, scrollTop); |
|
|
|
window.onscroll = function () { |
|
window.scrollTo(scrollLeft, scrollTop); |
|
}; |
|
} |
|
|
|
function enableScroll() { |
|
window.onscroll = function () {}; |
|
} |
|
|
|
function getPos(el) { |
|
let rect = el.getBoundingClientRect(); |
|
return { x: rect.left, y: rect.top }; |
|
} |
|
|
|
function toggleMenu(isopen, icon, panel, func) { |
|
if (isopen) { |
|
panel.classList.add("open"); |
|
icon.classList.add("fixed"); |
|
gradioApp().addEventListener("click", func); |
|
disableScroll(); |
|
} else { |
|
panel.classList.remove("open"); |
|
icon.classList.remove("fixed"); |
|
gradioApp().removeEventListener("click", func); |
|
enableScroll(); |
|
} |
|
} |
|
|
|
|
|
function closeAsideViews(menu) { |
|
if (quick_menu != menu && quick_menu_open) quick_menu.click(); |
|
if (net_menu != menu && net_menu_open) net_menu.click(); |
|
if (theme_menu != menu && theme_menu_open) theme_menu.click(); |
|
} |
|
|
|
|
|
let net_container = gradioApp().querySelector("#txt2img_extra_networks_row"); |
|
let net_menu_open = false; |
|
const net_menu = gradioApp().querySelector("#extra_networks_menu"); |
|
function netMenuVisibility() { |
|
if (selectedTabItemId.indexOf("2img") != -1) { |
|
net_menu.style.display = "block"; |
|
let nid = selectedTabItemId.split("_")[1]; |
|
net_container = gradioApp().querySelector( |
|
"#" + nid + "_extra_networks_row" |
|
); |
|
if (net_container.classList.contains("aside")) { |
|
net_menu.style.display = "block"; |
|
toggleMenu(net_menu_open, net_menu, net_container, null); |
|
} else { |
|
net_menu.style.display = "none"; |
|
} |
|
} else { |
|
net_menu.style.display = "none"; |
|
} |
|
} |
|
|
|
|
|
const tabs_menu = gradioApp().querySelector("#tabs > div:first-child"); |
|
const nav_menu = gradioApp().querySelector("#nav_menu"); |
|
const header = gradioApp().querySelector("#header-top"); |
|
let menu_open = false; |
|
const z_menu = nav_menu.cloneNode(true); |
|
z_menu.id = "clone_nav_menu"; |
|
header.parentElement.append(z_menu); |
|
function toggleNavMenu(e) { |
|
e.stopPropagation(); |
|
menu_open = !menu_open; |
|
toggleMenu(menu_open, nav_menu, tabs_menu, toggleNavMenu); |
|
} |
|
z_menu.addEventListener("click", toggleNavMenu); |
|
|
|
|
|
let quick_menu_open = false; |
|
const quicksettings_overflow = gradioApp().querySelector( |
|
"#quicksettings_overflow" |
|
); |
|
const quick_menu = gradioApp().querySelector("#quick_menu"); |
|
function toggleQuickMenu(e) { |
|
closeAsideViews(quick_menu); |
|
quick_menu_open = !quick_menu_open; |
|
const withinBoundaries = e.composedPath().includes(quicksettings_overflow); |
|
if (!quick_menu_open && withinBoundaries) { |
|
quick_menu_open = true; |
|
} else { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
toggleMenu( |
|
quick_menu_open, |
|
quick_menu, |
|
quicksettings_overflow, |
|
toggleQuickMenu |
|
); |
|
} |
|
} |
|
quick_menu.addEventListener("click", toggleQuickMenu); |
|
|
|
|
|
function clickedOutside(e) { |
|
|
|
if ( |
|
e.target.getAttribute("data-testid") != "textbox" && |
|
e.target.getAttribute("data-testid") |
|
) { |
|
if (net_menu_open && e.target.closest('[id$="2img_settings_scroll"]')) |
|
net_menu.click(); |
|
} |
|
} |
|
function toggleNetMenu(e) { |
|
closeAsideViews(net_menu); |
|
net_menu_open = !net_menu_open; |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
toggleMenu(net_menu_open, net_menu, net_container, clickedOutside); |
|
} |
|
net_menu.addEventListener("click", toggleNetMenu); |
|
gradioApp() |
|
.querySelectorAll('button[id*="2img_extra_networks"]') |
|
.forEach((elem) => { |
|
elem.addEventListener("click", toggleNetMenu); |
|
}); |
|
|
|
|
|
let theme_container = gradioApp().querySelector("#tab_ui_theme"); |
|
let theme_menu_open = false; |
|
const theme_menu = gradioApp().querySelector("#theme_menu"); |
|
function toggleThemeMenu(e) { |
|
closeAsideViews(theme_menu); |
|
theme_menu_open = !theme_menu_open; |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
toggleMenu(theme_menu_open, theme_menu, theme_container, null); |
|
} |
|
theme_menu.addEventListener("click", toggleThemeMenu); |
|
|
|
const theme_tab = gradioApp().querySelector("#tab_ui_theme"); |
|
function theme_aside(value) { |
|
if (value) { |
|
theme_tab.classList.add("aside"); |
|
} else { |
|
theme_tab.classList.remove("aside"); |
|
} |
|
} |
|
if (theme_tab) theme_aside(true); |
|
|
|
function generateOnRepeat(elem, isforever) { |
|
if (elem.generateOnRepeatInterval != null) |
|
clearInterval(elem.generateOnRepeatInterval); |
|
if (isforever) { |
|
const generate_button = elem.previousElementSibling; |
|
elem.generateOnRepeatInterval = setInterval(function () { |
|
if (window.getComputedStyle(generate_button).display !== "none") { |
|
generate_button.click(); |
|
} |
|
}, 500); |
|
} |
|
} |
|
|
|
function toggleGenerateForever(e) { |
|
e.target.classList.toggle("active"); |
|
if (e.target.className.indexOf("active") != -1) { |
|
generateOnRepeat(e.target, true); |
|
} else { |
|
generateOnRepeat(e.target, false); |
|
} |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
} |
|
|
|
gradioApp() |
|
.querySelectorAll('button[id*="2img_generate_forever"]') |
|
.forEach((elem) => { |
|
elem.addEventListener("click", toggleGenerateForever); |
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let styleobj = {}; |
|
const r = gradioApp(); |
|
const style = document.createElement("style"); |
|
style.id = "ui-styles"; |
|
r.appendChild(style); |
|
|
|
function updateOpStyles() { |
|
let ops_styles = ""; |
|
for (const key in styleobj) { |
|
ops_styles += styleobj[key]; |
|
} |
|
const ui_styles = gradioApp().getElementById("ui-styles"); |
|
ui_styles.innerHTML = ops_styles; |
|
|
|
} |
|
|
|
|
|
function imageGeneratedFitMethod(value) { |
|
styleobj.ui_view_fit = |
|
"[id$='2img_gallery'] div>img {object-fit:" + value + "!important;}"; |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ui_output_image_fit") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='radio']")) { |
|
imageGeneratedFitMethod(e.target.value.toLowerCase()); |
|
updateOpStyles(); |
|
} |
|
}); |
|
imageGeneratedFitMethod(opts.ui_output_image_fit.toLowerCase()); |
|
|
|
|
|
function imagePreviewFitMethod(value) { |
|
styleobj.ui_fit = ".livePreview img {object-fit:" + value + "!important;}"; |
|
} |
|
gradioApp() |
|
.querySelector("#setting_live_preview_image_fit") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='radio']")) { |
|
imagePreviewFitMethod(e.target.value.toLowerCase()); |
|
updateOpStyles(); |
|
} |
|
}); |
|
imagePreviewFitMethod(opts.live_preview_image_fit.toLowerCase()); |
|
|
|
|
|
function viewportOrder(value) { |
|
styleobj.ui_views_order = |
|
"[id$=_prompt_image] + div {flex-direction:" + value + ";}"; |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ui_views_order") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='radio']")) { |
|
viewportOrder(e.target.value.toLowerCase()); |
|
updateOpStyles(); |
|
} |
|
}); |
|
viewportOrder(opts.ui_views_order.toLowerCase()); |
|
|
|
|
|
function sdMaxOutputResolution(value) { |
|
gradioApp() |
|
.querySelectorAll('[id$="2img_width"] input,[id$="2img_height"] input') |
|
.forEach((elem) => { |
|
elem.max = value; |
|
}); |
|
} |
|
gradioApp() |
|
.querySelector("#setting_sd_max_resolution") |
|
.addEventListener("input", function (e) { |
|
let intvalue = parseInt(e.target.value); |
|
intvalue = Math.min(Math.max(intvalue, 512), 16384); |
|
sdMaxOutputResolution(intvalue); |
|
}); |
|
sdMaxOutputResolution(opts.sd_max_resolution); |
|
|
|
function extra_networks_visibility(value) { |
|
gradioApp() |
|
.querySelectorAll('[id$="2img_extra_networks_row"]') |
|
.forEach((elem) => { |
|
if (value) { |
|
elem.classList.remove("!hidden"); |
|
} else { |
|
elem.classList.add("!hidden"); |
|
} |
|
}); |
|
} |
|
gradioApp() |
|
.querySelector("#setting_extra_networks_default_visibility input") |
|
.addEventListener("click", function (e) { |
|
extra_networks_visibility(e.target.checked); |
|
}); |
|
extra_networks_visibility(opts.extra_networks_default_visibility); |
|
|
|
function extra_networks_card_size(value) { |
|
styleobj.extra_networks_card_size = |
|
":root{--ae-extra-networks-card-size:" + value + ";}"; |
|
} |
|
gradioApp() |
|
.querySelectorAll("#setting_extra_networks_cards_size input") |
|
.forEach(function (elem) { |
|
elem.addEventListener("input", function (e) { |
|
extra_networks_card_size(e.target.value); |
|
updateOpStyles(); |
|
}); |
|
}); |
|
extra_networks_card_size(opts.extra_networks_cards_size); |
|
|
|
function extra_networks_cards_visible_rows(value) { |
|
styleobj.extra_networks_cards_visible_rows = |
|
":root{--ae-extra-networks-visible-rows:" + value + ";}"; |
|
} |
|
gradioApp() |
|
.querySelectorAll("#setting_extra_networks_cards_visible_rows input") |
|
.forEach(function (elem) { |
|
elem.addEventListener("input", function (e) { |
|
extra_networks_cards_visible_rows(e.target.value); |
|
updateOpStyles(); |
|
}); |
|
}); |
|
extra_networks_cards_visible_rows(opts.extra_networks_cards_visible_rows); |
|
|
|
function extra_networks_aside(value) { |
|
gradioApp() |
|
.querySelectorAll('[id$="2img_extra_networks_row"]') |
|
.forEach((elem) => { |
|
if (value) { |
|
elem.classList.add("aside"); |
|
} else { |
|
elem.classList.remove("aside"); |
|
} |
|
netMenuVisibility(); |
|
}); |
|
} |
|
gradioApp() |
|
.querySelector("#setting_extra_networks_aside input") |
|
.addEventListener("click", function (e) { |
|
extra_networks_aside(e.target.checked); |
|
}); |
|
extra_networks_aside(opts.extra_networks_aside); |
|
|
|
|
|
let radio_hidden_html = ""; |
|
let radio_header_html = ""; |
|
let hiddentabs = {}; |
|
let headertabs = {}; |
|
const setting_ui_hidden_tabs = gradioApp().querySelector( |
|
"#setting_ui_hidden_tabs textarea" |
|
); |
|
const setting_ui_header_tabs = gradioApp().querySelector( |
|
"#setting_ui_header_tabs textarea" |
|
); |
|
const parent_header_tabs = gradioApp().querySelector("#nav_menu_header_tabs"); |
|
setting_ui_hidden_tabs.style.display = "none"; |
|
setting_ui_header_tabs.style.display = "none"; |
|
|
|
const maintabs = gradioApp().querySelectorAll( |
|
"#tabs > div:first-child > button" |
|
); |
|
const tabitems = gradioApp().querySelectorAll("#tabs > div.tabitem"); |
|
|
|
function tabOpsSave(setting) { |
|
updateInput(setting); |
|
|
|
} |
|
|
|
function tabsHiddenChange() { |
|
const keys = Object.keys(hiddentabs); |
|
setting_ui_hidden_tabs.value = ""; |
|
keys.forEach((key, index) => { |
|
|
|
if (hiddentabs[key] == true) { |
|
styleobj[key] = |
|
"#tabs > div:first-child > button:nth-child(" + |
|
(index + 1) + |
|
"){display:none;}"; |
|
setting_ui_hidden_tabs.value += key + ","; |
|
} else { |
|
styleobj[key] = |
|
"#tabs > div:first-child > button:nth-child(" + |
|
(index + 1) + |
|
"){display:block;}"; |
|
} |
|
}); |
|
|
|
tabOpsSave(setting_ui_hidden_tabs); |
|
tabsHeaderChange(); |
|
} |
|
function tabsHeaderChange() { |
|
const keys = Object.keys(headertabs); |
|
setting_ui_header_tabs.value = ""; |
|
keys.forEach((key, index) => { |
|
|
|
let nkey = key + "_hr"; |
|
if (headertabs[key] == true && hiddentabs[key] == false) { |
|
styleobj[nkey] = |
|
"#nav_menu_header_tabs > button:nth-child(" + |
|
(index + 1) + |
|
"){display:block;}"; |
|
setting_ui_header_tabs.value += key + ","; |
|
} else { |
|
styleobj[nkey] = |
|
"#nav_menu_header_tabs > button:nth-child(" + |
|
(index + 1) + |
|
"){display:none;}"; |
|
} |
|
}); |
|
|
|
tabOpsSave(setting_ui_header_tabs); |
|
} |
|
|
|
function navigate2TabItem(idx) { |
|
gradioApp() |
|
.querySelectorAll("#tabs > div.tabitem") |
|
.forEach(function (tabitem, index) { |
|
if (idx == index) { |
|
tabitem.style.display = "block"; |
|
} else { |
|
tabitem.style.display = "none"; |
|
} |
|
}); |
|
} |
|
|
|
function navTabClicked(e) { |
|
const idx = parseInt(e.currentTarget.getAttribute("tab-id")); |
|
navigate2TabItem(idx); |
|
} |
|
|
|
maintabs.forEach(function (elem, index) { |
|
let tabvalue = elem.innerText.replaceAll(" ", ""); |
|
hiddentabs[tabvalue] = false; |
|
headertabs[tabvalue] = false; |
|
let checked_hidden = ""; |
|
let checked_header = ""; |
|
if (setting_ui_hidden_tabs.value.indexOf(tabvalue) != -1) { |
|
hiddentabs[tabvalue] = true; |
|
checked_hidden = "checked"; |
|
} |
|
if (setting_ui_header_tabs.value.indexOf(tabvalue) != -1) { |
|
headertabs[tabvalue] = true; |
|
checked_header = "checked"; |
|
} |
|
radio_hidden_html += |
|
'<label class="' + |
|
tabvalue.toLowerCase() + |
|
' svelte-1qxcj04"><input type="checkbox" name="uiha" class="svelte-1qxcj04" ' + |
|
checked_hidden + |
|
' value="' + |
|
elem.innerText + |
|
'"><span class="ml-2 svelte-1qxcj04">' + |
|
elem.innerText + |
|
"</span></label>"; |
|
|
|
radio_header_html += |
|
'<label class="' + |
|
tabvalue.toLowerCase() + |
|
' svelte-1qxcj04"><input type="checkbox" name="uiha" class="svelte-1qxcj04" ' + |
|
checked_header + |
|
' value="' + |
|
elem.innerText + |
|
'"><span class="ml-2 svelte-1qxcj04">' + |
|
elem.innerText + |
|
"</span></label>"; |
|
|
|
tabitems[index].setAttribute("tab-item", index); |
|
elem.setAttribute("tab-id", index); |
|
|
|
let clonetab = elem.cloneNode(true); |
|
clonetab.id = tabvalue + "_clone"; |
|
parent_header_tabs.append(clonetab); |
|
clonetab.addEventListener("click", navTabClicked); |
|
}); |
|
|
|
let div = document.createElement("div"); |
|
div.id = "hidden_radio_tabs_container"; |
|
div.classList.add("flex", "flex-wrap", "gap-2", "wrap", "svelte-1qxcj04"); |
|
div.innerHTML = radio_hidden_html; |
|
setting_ui_hidden_tabs.parentElement.appendChild(div); |
|
|
|
div = document.createElement("div"); |
|
div.id = "header_radio_tabs_container"; |
|
div.classList.add("flex", "flex-wrap", "gap-2", "wrap", "svelte-1qxcj04"); |
|
div.innerHTML = radio_header_html; |
|
setting_ui_header_tabs.parentElement.appendChild(div); |
|
|
|
|
|
gradioApp() |
|
.querySelector("#hidden_radio_tabs_container") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='checkbox']")) { |
|
let tabvalue = e.target.value.replaceAll(" ", ""); |
|
hiddentabs[tabvalue] = e.target.checked; |
|
tabsHiddenChange(); |
|
updateOpStyles(); |
|
} |
|
}); |
|
|
|
gradioApp() |
|
.querySelector("#header_radio_tabs_container") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='checkbox']")) { |
|
let tabvalue = e.target.value.replaceAll(" ", ""); |
|
headertabs[tabvalue] = e.target.checked; |
|
tabsHeaderChange(); |
|
updateOpStyles(); |
|
} |
|
}); |
|
|
|
tabsHiddenChange(); |
|
|
|
gradioApp() |
|
.querySelectorAll('[id^="image_buttons_"] button, #png_2img_results button') |
|
.forEach(function (elem) { |
|
|
|
if (elem.id == "txt2img_tab") { |
|
elem.setAttribute("tab-id", 0); |
|
elem.addEventListener("click", navTabClicked); |
|
} else if (elem.id == "img2img_tab" || elem.id == "inpaint_tab") { |
|
elem.setAttribute("tab-id", 1); |
|
elem.addEventListener("click", navTabClicked); |
|
} |
|
if (elem.id == "extras_tab") { |
|
elem.setAttribute("tab-id", 2); |
|
elem.addEventListener("click", navTabClicked); |
|
} |
|
}); |
|
|
|
gradioApp() |
|
.querySelectorAll('[id$="2img_extra_tabs"] .search') |
|
.forEach(function (elem) { |
|
elem.addEventListener("keyup", function (e) { |
|
if (e.defaultPrevented) { |
|
return; |
|
} |
|
switch (e.code) { |
|
case "Escape": |
|
if (e.target.value == "") { |
|
net_menu.click(); |
|
} else { |
|
e.target.value = ""; |
|
updateInput(e.target); |
|
} |
|
break; |
|
} |
|
}); |
|
}); |
|
|
|
|
|
const settings_submit = gradioApp().querySelector("#settings_submit"); |
|
const quick_parent = gradioApp().querySelector( |
|
"#quicksettings_overflow_container" |
|
); |
|
const setting_quicksettings = gradioApp().querySelector( |
|
"#setting_quicksettings textarea" |
|
); |
|
function saveQuickSettings() { |
|
updateInput(setting_quicksettings); |
|
const cEvent = new Event("click"); |
|
Object.defineProperty(cEvent, "target", { value: settings_submit }); |
|
settings_submit.dispatchEvent(cEvent); |
|
console.log(setting_quicksettings.value); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function add2quickSettings(id, section, checked) { |
|
let field_settings = setting_quicksettings.value.replace(" ", ""); |
|
if (checked) { |
|
field_settings += "," + id; |
|
let setting_row = gradioApp().querySelector("#row_setting_" + id); |
|
quick_parent.append(setting_row); |
|
setting_row.classList.add("warning"); |
|
} else { |
|
field_settings = field_settings.replaceAll(id, ","); |
|
const setting_parent = gradioApp().querySelector( |
|
"#" + section + "_settings_2img_settings" |
|
); |
|
let quick_row = gradioApp().querySelector("#row_setting_" + id); |
|
setting_parent.append(quick_row); |
|
quick_row.classList.remove("warning"); |
|
} |
|
field_settings = field_settings.replace(/,{2,}/g, ","); |
|
setting_quicksettings.value = field_settings; |
|
|
|
saveQuickSettings(); |
|
|
|
} |
|
gradioApp() |
|
.querySelectorAll('[id*="add2quick_"]') |
|
.forEach(function (elem) { |
|
let trg = elem.id.split("_add2quick_setting_"); |
|
let sid = trg[0]; |
|
let tid = trg[1]; |
|
let elem_input = gradioApp().querySelector("#" + elem.id + " input"); |
|
if (elem_input) { |
|
elem_input.addEventListener("click", function (e) { |
|
add2quickSettings(tid, sid, e.target.checked); |
|
}); |
|
} |
|
}); |
|
|
|
|
|
|
|
let cached_clone_range; |
|
let cached_clone_num; |
|
let active_clone_input = []; |
|
let focus_input; |
|
|
|
function ui_input_release_component(elem) { |
|
|
|
if (active_clone_input.length > 0) return; |
|
|
|
|
|
let parent = elem.parentElement; |
|
let comp_parent = parent.parentElement.parentElement; |
|
|
|
if ( |
|
comp_parent.id == "img2img_width" || |
|
comp_parent.id == "img2img_height" || |
|
comp_parent.id == "img2img_scale" || |
|
comp_parent.id.indexOf("--ae-") != -1 || |
|
comp_parent.id.indexOf("theme") != -1 || |
|
comp_parent.className.indexOf("posex") != -1 |
|
) |
|
return; |
|
|
|
let clone_num = elem.cloneNode(); |
|
active_clone_input.push(clone_num); |
|
|
|
let label = parent.querySelector("label"); |
|
|
|
clone_num.id = "num_clone"; |
|
clone_num.value = elem.value; |
|
parent.append(clone_num); |
|
elem.classList.add("hidden"); |
|
|
|
clone_num.addEventListener("change", function (e) { |
|
elem.value = clone_num.value; |
|
updateInput(elem); |
|
}); |
|
|
|
clone_num.addEventListener("focus", function (e) { |
|
focus_input = clone_num; |
|
}); |
|
|
|
cached_clone_num = clone_num; |
|
cached_clone_range = false; |
|
|
|
if (label) { |
|
let comp_range = comp_parent.querySelector("input[type='range']"); |
|
let clone_range = comp_range.cloneNode(); |
|
active_clone_input.push(clone_range); |
|
|
|
clone_range.id = comp_range.id + "_clone"; |
|
clone_range.value = comp_range.value; |
|
comp_range.parentElement.append(clone_range); |
|
comp_range.classList.add("hidden"); |
|
|
|
clone_range.addEventListener("input", function (e) { |
|
clone_num.value = e.target.value; |
|
}); |
|
clone_range.addEventListener("change", function (e) { |
|
elem.value = clone_range.value; |
|
updateInput(elem); |
|
}); |
|
clone_num.addEventListener("input", function (e) { |
|
clone_range.value = e.target.value; |
|
}); |
|
|
|
cached_clone_range = clone_range; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ui_input_release_handler(e) { |
|
const len = active_clone_input.length; |
|
if (focus_input) { |
|
return; |
|
} |
|
if (len > 0) { |
|
if (e.target.id.indexOf("_clone") == -1) { |
|
for (var i = len - 1; i >= 0; i--) { |
|
let relem = active_clone_input[i]; |
|
relem.previousElementSibling.classList.remove("hidden"); |
|
relem.remove(); |
|
active_clone_input.pop(); |
|
} |
|
} |
|
} |
|
|
|
let elem_type = e.target.tagName; |
|
if (elem_type == "INPUT") { |
|
let elem = e.target; |
|
if (elem.type == "number") { |
|
ui_input_release_component(elem); |
|
} else if (elem.type == "range") { |
|
elem = e.target.parentElement.querySelector("input[type='number']"); |
|
if (elem) { |
|
ui_input_release_component(elem); |
|
} |
|
} |
|
} |
|
} |
|
let timeoutId; |
|
|
|
function ui_input_touchmove_handler(e) { |
|
if (cached_clone_range && cached_clone_num) { |
|
if (e.touches) { |
|
const rect = cached_clone_range.getBoundingClientRect(); |
|
const xoffset_min = rect.left + window.scrollX; |
|
|
|
|
|
|
|
|
|
e.preventDefault(); |
|
const percent = |
|
parseInt(((e.touches[0].pageX - xoffset_min) / rect.width) * 10000) / |
|
10000; |
|
cached_clone_range.value = |
|
percent * (cached_clone_range.max - cached_clone_range.min) + |
|
parseFloat(cached_clone_range.min); |
|
cached_clone_num.value = cached_clone_range.value; |
|
|
|
} |
|
} |
|
} |
|
function ui_input_touchend_handler(e) { |
|
if (cached_clone_range && cached_clone_num) { |
|
const elem = cached_clone_range.previousElementSibling; |
|
elem.value = cached_clone_range.value; |
|
updateInput(elem); |
|
} |
|
} |
|
|
|
function slider_contextmenu(e) { |
|
e.preventDefault(); |
|
} |
|
function slider_touchend(e) { |
|
if (timeoutId) clearTimeout(timeoutId); |
|
} |
|
function slider_touchmove(e) { |
|
if (timeoutId) clearTimeout(timeoutId); |
|
} |
|
function slider_touchstart(e) { |
|
const gcontainer = e.target; |
|
|
|
gcontainer.removeEventListener("touchend", slider_touchend); |
|
gcontainer.removeEventListener("touchmove", slider_touchmove); |
|
gcontainer.removeEventListener("touchend", ui_input_touchend_handler); |
|
gcontainer.removeEventListener("touchmove", ui_input_touchmove_handler); |
|
|
|
timeoutId = setTimeout(function () { |
|
timeoutId = null; |
|
focus_input = false; |
|
e.stopPropagation(); |
|
ui_input_release_handler(e); |
|
ui_input_touchmove_handler(e); |
|
gcontainer.addEventListener("touchmove", ui_input_touchmove_handler, { |
|
passive: false, |
|
}); |
|
gcontainer.addEventListener("touchend", ui_input_touchend_handler); |
|
}, 500); |
|
|
|
|
|
gcontainer.addEventListener("touchend", slider_touchend); |
|
gcontainer.addEventListener("touchmove", slider_touchmove, { |
|
passive: false, |
|
}); |
|
} |
|
|
|
function ui_dispatch_input_release(value) { |
|
const gcontainer = gradioApp().querySelector(".gradio-container"); |
|
if (value) { |
|
gcontainer.addEventListener("mouseover", ui_input_release_handler); |
|
gcontainer.addEventListener("touchstart", slider_touchstart, { |
|
passive: false, |
|
}); |
|
} else { |
|
gcontainer.removeEventListener("mouseover", ui_input_release_handler); |
|
gcontainer.removeEventListener("touchstart", slider_touchstart); |
|
|
|
gcontainer.removeEventListener("touchend", slider_touchend); |
|
gcontainer.removeEventListener("touchmove", slider_touchmove); |
|
gcontainer.removeEventListener("touchend", ui_input_touchend_handler); |
|
gcontainer.removeEventListener("touchmove", ui_input_touchmove_handler); |
|
} |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ui_dispatch_input_release input") |
|
.addEventListener("click", function (e) { |
|
ui_dispatch_input_release(e.target.checked); |
|
}); |
|
ui_dispatch_input_release(opts.ui_dispatch_input_release); |
|
|
|
|
|
function ui_show_range_ticks(value, interactive) { |
|
if (value) { |
|
const range_selectors = "input[type='range']"; |
|
|
|
gradioApp() |
|
.querySelectorAll(range_selectors) |
|
.forEach(function (elem) { |
|
let spacing = (elem.step / (elem.max - elem.min)) * 100.0; |
|
let tsp = "max(3px, calc(" + spacing + "% - 1px))"; |
|
let fsp = "max(4px, calc(" + spacing + "% + 0px))"; |
|
var style = elem.style; |
|
style.setProperty( |
|
"--ae-slider-bg-overlay", |
|
"repeating-linear-gradient( 90deg, transparent, transparent " + |
|
tsp + |
|
", var(--ae-input-border-color) " + |
|
tsp + |
|
", var(--ae-input-border-color) " + |
|
fsp + |
|
" )" |
|
); |
|
}); |
|
} else if (interactive) { |
|
gradioApp() |
|
.querySelectorAll("input[type='range']") |
|
.forEach(function (elem) { |
|
var style = elem.style; |
|
style.setProperty("--ae-slider-bg-overlay", "transparent"); |
|
}); |
|
} |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ui_show_range_ticks input") |
|
.addEventListener("click", function (e) { |
|
ui_show_range_ticks(e.target.checked, true); |
|
}); |
|
ui_show_range_ticks(opts.ui_show_range_ticks); |
|
|
|
const gradio_main = gradioApp().querySelector(".gradio-container > div.main"); |
|
function ui_no_slider_layout(value) { |
|
if (value) { |
|
gradio_main.classList.add("no-slider-layout"); |
|
} else { |
|
gradio_main.classList.remove("no-slider-layout"); |
|
} |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ui_no_slider_layout input") |
|
.addEventListener("click", function (e) { |
|
ui_no_slider_layout(e.target.checked, true); |
|
}); |
|
ui_no_slider_layout(opts.ui_no_slider_layout); |
|
|
|
|
|
const container = gradioApp().querySelector( |
|
"#quicksettings_overflow_container" |
|
); |
|
let draggables; |
|
let lastElemAfter; |
|
let islastChild; |
|
let timeout; |
|
|
|
function preventBehavior(e) { |
|
e.stopPropagation(); |
|
e.preventDefault(); |
|
return false; |
|
} |
|
let sdCheckpointModels = []; |
|
function getSdCheckpointModels() { |
|
gradioApp() |
|
.querySelectorAll("#txt2img_checkpoints_cards .card") |
|
.forEach(function (elem, i) { |
|
sdCheckpointModels[i] = elem.getAttribute("onclick").split('"')[1]; |
|
}); |
|
} |
|
getSdCheckpointModels(); |
|
|
|
function remove_overrides() { |
|
let checked_overrides = []; |
|
gradioApp() |
|
.querySelectorAll("#setting_ignore_overrides input") |
|
.forEach(function (elem, i) { |
|
if (elem.checked) { |
|
checked_overrides[i] = elem.nextElementSibling.innerHTML; |
|
} |
|
}); |
|
|
|
gradioApp() |
|
.querySelectorAll("[id$='2img_override_settings'] .token") |
|
.forEach(function (token) { |
|
let token_arr = token.querySelector("span").innerHTML.split(":"); |
|
let token_name = token_arr[0]; |
|
let token_value = token_arr[1]; |
|
token_value = token_value.replaceAll(" ", ""); |
|
|
|
if (token_name.indexOf("Model hash") != -1) { |
|
const info_label = gradioApp().querySelector( |
|
"[id$='2img_override_settings'] label span" |
|
); |
|
info_label.innerHTML = "Override settings MDL: unknown"; |
|
for (let m = 0; m < sdCheckpointModels.length; m++) { |
|
let m_str = sdCheckpointModels[m]; |
|
if (m_str.indexOf(token_value) != -1) { |
|
info_label.innerHTML = |
|
"Override settings <i>MDL: " + m_str.split("[")[0] + "</i>"; |
|
break; |
|
} |
|
} |
|
} |
|
if (checked_overrides.indexOf(token_name) != -1) { |
|
token.querySelector(".token-remove").click(); |
|
gradioApp() |
|
.querySelector( |
|
"#" + selectedTabItemId + " [id$='2img_override_settings']" |
|
) |
|
.parentElement.classList.add("show"); |
|
} else { |
|
|
|
} |
|
}); |
|
} |
|
gradioApp() |
|
.querySelector("#setting_ignore_overrides") |
|
.addEventListener("click", function (e) { |
|
setTimeout(function () { |
|
remove_overrides(); |
|
}, 100); |
|
}); |
|
|
|
function update_input_fields(tab) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remove_overrides(); |
|
autoGrowPromptTextarea(); |
|
} |
|
|
|
gradioApp() |
|
.querySelectorAll( |
|
"#tab_pnginfo #png_2img_results button, [id$='2img_actions_column'] #paste" |
|
) |
|
.forEach(function (elem) { |
|
elem.addEventListener("click", function (e) { |
|
let button_id; |
|
if (e.target.id == "paste") { |
|
button_id = e.target.nextElementSibling.id.split("_")[0]; |
|
} else { |
|
button_id = e.target.id.split("_")[0]; |
|
} |
|
setTimeout(function () { |
|
update_input_fields(button_id); |
|
}, 500); |
|
}); |
|
}); |
|
|
|
const pnginfo = gradioApp().querySelector("#tab_pnginfo"); |
|
function forwardFromPngInfo() { |
|
if (selectedTabItemId == "tab_txt2img") { |
|
pnginfo.querySelector("#txt2img_tab").click(); |
|
|
|
gradioApp() |
|
.querySelector( |
|
"#txt2img_results > div:last-child > div.gradio-accordion > div.hide" |
|
) |
|
?.click(); |
|
|
|
const img_src = pnginfo.querySelector("img"); |
|
const gallery_parent = gradioApp().querySelector( |
|
"#txt2img_gallery_container" |
|
); |
|
const live_preview = gallery_parent.querySelector(".livePreview"); |
|
if (live_preview) { |
|
live_preview.innerHTML = |
|
'<img width="' + |
|
img_src.width + |
|
'" height="' + |
|
img_src.height + |
|
'" src="' + |
|
img_src.src + |
|
'">'; |
|
} else { |
|
const div = document.createElement("div"); |
|
div.classList.add("livePreview", "dropPreview"); |
|
div.innerHTML = |
|
'<img width="' + |
|
img_src.width + |
|
'" height="' + |
|
img_src.height + |
|
'" src="' + |
|
img_src.src + |
|
'">'; |
|
gallery_parent.prepend(div); |
|
} |
|
} else if (selectedTabItemId == "tab_img2img") { |
|
pnginfo.querySelector("#img2img_tab").click(); |
|
|
|
gradioApp() |
|
.querySelector( |
|
"#img2img_results > div:last-child > div.gradio-accordion > div.hide" |
|
) |
|
?.click(); |
|
} |
|
} |
|
|
|
function fetchPngInfoData(files) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const fileInput = gradioApp().querySelector( |
|
'#pnginfo_image input[type="file"]' |
|
); |
|
if (fileInput.files != files) { |
|
fileInput.files = files; |
|
fileInput.dispatchEvent(new Event("change")); |
|
} |
|
|
|
setTimeout(function () { |
|
forwardFromPngInfo(); |
|
}, 500); |
|
} |
|
|
|
function drop2View(e) { |
|
e.stopPropagation(); |
|
e.preventDefault(); |
|
const files = e.dataTransfer.files; |
|
|
|
if (!isValidImageList(files)) { |
|
return; |
|
} |
|
const data_image = gradioApp().querySelector( |
|
'#pnginfo_image [data-testid="image"]' |
|
); |
|
data_image.querySelector('[aria-label="Clear"]')?.click(); |
|
setTimeout(function () { |
|
fetchPngInfoData(files); |
|
}, 1000); |
|
} |
|
|
|
gradioApp() |
|
.querySelectorAll('[id$="2img_results"]') |
|
.forEach((elem) => { |
|
elem.addEventListener("drop", drop2View); |
|
}); |
|
|
|
|
|
function getElementAfter(container, y) { |
|
return draggables.reduce( |
|
(closest, child) => { |
|
const box = child.getBoundingClientRect(); |
|
const offset = y - box.top - box.height / 2; |
|
if (offset < 0 && offset > closest.offset) { |
|
return { offset: offset, element: child }; |
|
} else { |
|
return closest; |
|
} |
|
}, |
|
{ offset: Number.NEGATIVE_INFINITY } |
|
).element; |
|
} |
|
|
|
function dragOrderChange(elementAfter, isComplete, delem) { |
|
if (lastElemAfter !== elementAfter || islastChild) { |
|
if (lastElemAfter != null) { |
|
lastElemAfter.classList.remove("marker-top", "marker-bottom"); |
|
} |
|
|
|
if (elementAfter == null) { |
|
islastChild = true; |
|
lastElemAfter.classList.add("marker-bottom"); |
|
} else { |
|
islastChild = false; |
|
elementAfter.classList.add("marker-top"); |
|
lastElemAfter = elementAfter; |
|
} |
|
} |
|
|
|
if (isComplete) { |
|
if (elementAfter == null) { |
|
container.append(delem); |
|
} else { |
|
container.insertBefore(delem, elementAfter); |
|
} |
|
|
|
let order_settings = ""; |
|
|
|
gradioApp() |
|
.querySelectorAll("#quicksettings_overflow_container > div") |
|
.forEach(function (el) { |
|
el.classList.remove("marker-top", "marker-bottom", "dragging"); |
|
order_settings += el.id.split("row_setting_")[1] + ","; |
|
}); |
|
|
|
const setting_quicksettings = gradioApp().querySelector( |
|
"#setting_quicksettings textarea" |
|
); |
|
setting_quicksettings.value = order_settings; |
|
updateInput(setting_quicksettings); |
|
|
|
const cEvent = new Event("click"); |
|
Object.defineProperty(cEvent, "target", { value: settings_submit }); |
|
settings_submit.dispatchEvent(cEvent); |
|
|
|
container.classList.remove("no-scroll"); |
|
} |
|
} |
|
|
|
function touchmove(e) { |
|
let y = e.touches[0].clientY; |
|
let elementAfter = getElementAfter(container, y); |
|
dragOrderChange(elementAfter); |
|
} |
|
function touchstart(e) { |
|
e.currentTarget.draggable = "false"; |
|
let target = e.currentTarget; |
|
|
|
timeout = setTimeout(function () { |
|
target.classList.add("dragging"); |
|
container.classList.add("no-scroll"); |
|
target.addEventListener("touchmove", touchmove); |
|
container.addEventListener("touchmove", preventBehavior, { |
|
passive: false, |
|
}); |
|
}, 1000); |
|
|
|
target.addEventListener("touchend", touchend); |
|
target.addEventListener("touchcancel", touchcancel); |
|
} |
|
function touchend(e) { |
|
e.currentTarget.draggable = "true"; |
|
clearTimeout(timeout); |
|
e.currentTarget.removeEventListener("touchmove", touchmove); |
|
container.removeEventListener("touchmove", preventBehavior); |
|
let y = e.changedTouches[0].clientY; |
|
let elementAfter = getElementAfter(container, y); |
|
dragOrderChange(elementAfter, true, e.currentTarget); |
|
} |
|
function touchcancel(e) { |
|
e.currentTarget.draggable = "true"; |
|
clearTimeout(timeout); |
|
e.currentTarget.classList.remove("dragging"); |
|
e.currentTarget.removeEventListener("touchmove", touchmove); |
|
container.removeEventListener("touchmove", preventBehavior); |
|
} |
|
|
|
function dragstart(e) { |
|
e.currentTarget.draggable = "false"; |
|
e.currentTarget.classList.add("dragging"); |
|
} |
|
function dragend(e) { |
|
e.stopPropagation(); |
|
e.preventDefault(); |
|
e.currentTarget.draggable = "true"; |
|
let y = e.clientY; |
|
let elementAfter = getElementAfter(container, y); |
|
dragOrderChange(elementAfter, true, e.currentTarget); |
|
} |
|
function dragOver(e) { |
|
e.preventDefault(); |
|
let y = e.clientY; |
|
let elementAfter = getElementAfter(container, y); |
|
dragOrderChange(elementAfter); |
|
} |
|
|
|
function actionQuickSettingsDraggable(checked) { |
|
if (checked) { |
|
draggables = Array.from( |
|
gradioApp().querySelectorAll( |
|
"#quicksettings_overflow_container > div:not(.dragging)" |
|
) |
|
); |
|
gradioApp().addEventListener("drop", preventBehavior); |
|
} else { |
|
gradioApp().removeEventListener("drop", preventBehavior); |
|
} |
|
|
|
gradioApp() |
|
.querySelectorAll("#quicksettings_overflow_container > div") |
|
.forEach(function (elem) { |
|
elem.draggable = checked; |
|
if (checked) { |
|
elem.addEventListener("touchstart", touchstart); |
|
elem.addEventListener("dragstart", dragstart); |
|
elem.addEventListener("dragend", dragend); |
|
elem.addEventListener("dragover", dragOver); |
|
} else { |
|
elem.removeEventListener("touchstart", touchstart, false); |
|
elem.removeEventListener("touchend", touchend, false); |
|
elem.removeEventListener("touchcancel", touchcancel, false); |
|
elem.removeEventListener("touchmove", touchmove, false); |
|
elem.removeEventListener("dragstart", dragstart, false); |
|
elem.removeEventListener("dragend", dragend, false); |
|
elem.removeEventListener("dragover", dragOver, false); |
|
} |
|
}); |
|
} |
|
|
|
gradioApp() |
|
.querySelector("#quicksettings_draggable") |
|
.addEventListener("click", function (e) { |
|
if (e.target && e.target.matches("input[type='checkbox']")) { |
|
actionQuickSettingsDraggable(e.target.checked); |
|
} |
|
}); |
|
|
|
updateOpStyles(); |
|
|
|
|
|
}); |
|
|
|
onOptionsChanged(function() { |
|
var elem = gradioApp().getElementById('sd_checkpoint_hash'); |
|
var sd_checkpoint_hash = opts.sd_checkpoint_hash || ""; |
|
var shorthash = sd_checkpoint_hash.substring(0, 10); |
|
|
|
if (elem && elem.textContent != shorthash) { |
|
elem.textContent = shorthash; |
|
elem.title = sd_checkpoint_hash; |
|
elem.href = "https://google.com/search?q=" + sd_checkpoint_hash; |
|
} |
|
}); |
|
|
|
let txt2img_textarea, img2img_textarea = undefined; |
|
let wait_time = 800; |
|
let token_timeouts = {}; |
|
|
|
function update_txt2img_tokens(...args) { |
|
update_token_counter("txt2img_token_button"); |
|
if (args.length == 2) { |
|
return args[0]; |
|
} |
|
return args; |
|
} |
|
|
|
function update_img2img_tokens(...args) { |
|
update_token_counter( |
|
"img2img_token_button" |
|
); |
|
if (args.length == 2) { |
|
return args[0]; |
|
} |
|
return args; |
|
} |
|
|
|
function update_token_counter(button_id) { |
|
if (token_timeouts[button_id]) { |
|
clearTimeout(token_timeouts[button_id]); |
|
} |
|
token_timeouts[button_id] = setTimeout(() => gradioApp().getElementById(button_id)?.click(), wait_time); |
|
} |
|
|
|
|
|
|
|
function restart_reload() { |
|
let bg_color = window |
|
.getComputedStyle(gradioApp().querySelector("#header-top")) |
|
.getPropertyValue("--ae-main-bg-color"); |
|
let primary_color = window |
|
.getComputedStyle(gradioApp().querySelector(".icon-info")) |
|
.getPropertyValue("--ae-primary-color"); |
|
let panel_color = window |
|
.getComputedStyle(gradioApp().querySelector(".gradio-box")) |
|
.getPropertyValue("--ae-panel-bg-color"); |
|
|
|
localStorage.setItem("bg_color", bg_color); |
|
localStorage.setItem("primary_color", primary_color); |
|
localStorage.setItem("panel_color", panel_color); |
|
|
|
if (localStorage.hasOwnProperty("bg_color")) { |
|
bg_color = localStorage.getItem("bg_color"); |
|
primary_color = localStorage.getItem("primary_color"); |
|
panel_color = localStorage.getItem("panel_color"); |
|
} |
|
|
|
document.body.style.backgroundColor = bg_color; |
|
|
|
let style = document.createElement("style"); |
|
style.type = "text/css"; |
|
style.innerHTML = |
|
".loader{position:absolute;top:50vh;left:50vw;height:60px;width:160px;margin:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} .circles{position:absolute;left:-5px;top:0;height:60px;width:180px} .circles span{position:absolute;top:25px;height:12px;width:12px;border-radius:12px;background-color:" + |
|
panel_color + |
|
"} .circles span.one{right:80px} .circles span.two{right:40px} .circles span.three{right:0px} .circles{-webkit-animation:animcircles 0.5s infinite linear;animation:animcircles 0.5s infinite linear} @-webkit-keyframes animcircles{0%{-webkit-transform:translate(0px,0px);transform:translate(0px,0px)}100%{-webkit-transform:translate(-40px,0px);transform:translate(-40px,0px)}} @keyframes animcircles{0%{-webkit-transform:translate(0px,0px);transform:translate(0px,0px)}100%{-webkit-transform:translate(-40px,0px);transform:translate(-40px,0px)}} .pacman{position:absolute;left:0;top:0;height:60px;width:60px} .pacman .eye{position:absolute;top:10px;left:30px;height:7px;width:7px;border-radius:7px;background-color:" + |
|
bg_color + |
|
'} .pacman span{position:absolute;top:0;left:0;height:60px;width:60px} .pacman span::before{content:"";position:absolute;left:0;height:30px;width:60px;background-color:' + |
|
primary_color + |
|
"} .pacman .top::before{top:0;border-radius:60px 60px 0px 0px} .pacman .bottom::before{bottom:0;border-radius:0px 0px 60px 60px} .pacman .left::before{bottom:0;height:60px;width:30px;border-radius:60px 0px 0px 60px} .pacman .top{-webkit-animation:animtop 0.5s infinite;animation:animtop 0.5s infinite} @-webkit-keyframes animtop{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}} @keyframes animtop{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}} .pacman .bottom{-webkit-animation:animbottom 0.5s infinite;animation:animbottom 0.5s infinite} @-webkit-keyframes animbottom{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(45deg);transform:rotate(45deg)}} @keyframes animbottom{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(45deg);transform:rotate(45deg)}}"; |
|
|
|
document.getElementsByTagName("head")[0].appendChild(style); |
|
document.body.innerHTML = |
|
'<div class="loader"><div class="circles"><span class="one"></span><span class="two"></span><span class="three"></span></div><div class="pacman"><span class="top"></span><span class="bottom"></span><span class="left"></span><div class="eye"></div></div></div>'; |
|
|
|
var requestPing = function () { |
|
requestGet( |
|
"./internal/ping", |
|
{}, |
|
function (data) { |
|
location.reload(); |
|
}, |
|
function () { |
|
setTimeout(requestPing, 500); |
|
} |
|
); |
|
}; |
|
|
|
setTimeout(requestPing, 2000); |
|
|
|
return []; |
|
} |
|
|
|
|
|
|
|
function updateInput(target) { |
|
const e = new Event("input", { bubbles: true }); |
|
Object.defineProperty(e, "target", { value: target }); |
|
target.dispatchEvent(e); |
|
const eb = new Event("blur"); |
|
Object.defineProperty(eb, "target", { value: target }); |
|
target.dispatchEvent(eb); |
|
} |
|
|
|
document.addEventListener("readystatechange", function (e) { |
|
document.body.style.display = "none"; |
|
if (localStorage.hasOwnProperty("bg_color")) { |
|
document.getElementsByTagName("html")[0].style.backgroundColor = |
|
localStorage.getItem("bg_color"); |
|
document.body.style.backgroundColor = localStorage.getItem("bg_color"); |
|
} |
|
}); |
|
|
|
window.onload = function () { |
|
document.getElementsByTagName("html")[0].style.backgroundColor = |
|
localStorage.getItem("bg_color"); |
|
document.body.style.backgroundColor = localStorage.getItem("bg_color"); |
|
document.body.style.display = "none"; |
|
document.body.classList.add("dark"); |
|
setTimeout(function () { |
|
document.body.style.display = "block"; |
|
}, 1000); |
|
}; |
|
|
|
var desiredCheckpointName = null; |
|
function selectCheckpoint(name) { |
|
desiredCheckpointName = name; |
|
gradioApp().getElementById('change_checkpoint').click(); |
|
} |
|
|
|
function currentImg2imgSourceResolution(w, h, scaleBy) { |
|
var img = gradioApp().querySelector('#mode_img2img > div[style="display: block;"] img'); |
|
return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy]; |
|
} |
|
|
|
function updateImg2imgResizeToTextAfterChangingImage() { |
|
|
|
|
|
|
|
setTimeout(function() { |
|
gradioApp().getElementById('img2img_update_resize_to').click(); |
|
}, 500); |
|
|
|
return []; |
|
|
|
} |
|
|
|
|
|
|
|
function setRandomSeed(elem_id) { |
|
var input = gradioApp().querySelector("#" + elem_id + " input"); |
|
if (!input) return []; |
|
|
|
input.value = "-1"; |
|
updateInput(input); |
|
return []; |
|
} |
|
|
|
function switchWidthHeight(tabname) { |
|
var width = gradioApp().querySelector("#" + tabname + "_width input[type=number]"); |
|
var height = gradioApp().querySelector("#" + tabname + "_height input[type=number]"); |
|
if (!width || !height) return []; |
|
|
|
var tmp = width.value; |
|
width.value = height.value; |
|
height.value = tmp; |
|
|
|
updateInput(width); |
|
updateInput(height); |
|
return []; |
|
} |