| let image_browser_state = "free" |
| let image_browser_webui_ready = false |
| let image_browser_started = false |
| let image_browser_console_log = "" |
| let image_browser_debug = false |
| let image_browser_img_show_in_progress = false |
|
|
| function image_browser_delay(ms){return new Promise(resolve => setTimeout(resolve, ms))} |
|
|
| onUiLoaded(image_browser_start_it_up) |
|
|
| async function image_browser_wait_for_webui() { |
| if (image_browser_debug) console.log("image_browser_wait_for_webui:start") |
| await image_browser_delay(500) |
| sd_model = gradioApp().getElementById("setting_sd_model_checkpoint") |
| if (!sd_model.querySelector(".eta-bar")) { |
| image_browser_webui_ready = true |
| image_browser_start() |
| } else { |
| |
| const startTime = Date.now() |
| |
| const timeout = 40000 |
| const webuiObserver = new MutationObserver(function(mutationsList) { |
| if (image_browser_debug) console.log("webuiObserver:start") |
| let found = false |
| outerLoop: for (let i = 0; i < mutationsList.length; i++) { |
| let mutation = mutationsList[i]; |
| if (mutation.type === "childList") { |
| for (let j = 0; j < mutation.removedNodes.length; j++) { |
| let node = mutation.removedNodes[j]; |
| if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains("eta-bar")) { |
| found = true |
| break outerLoop; |
| } |
| } |
| } |
| } |
| if (found || (Date.now() - startTime > timeout)) { |
| image_browser_webui_ready = true |
| webuiObserver.disconnect() |
| if (image_browser_debug) console.log("webuiObserver:end") |
| image_browser_start() |
| } |
| }) |
| webuiObserver.observe(gradioApp(), { childList:true, subtree:true }) |
| } |
| if (image_browser_debug) console.log("image_browser_wait_for_webui:end") |
| } |
|
|
| async function image_browser_start_it_up() { |
| if (image_browser_debug) console.log("image_browser_start_it_up:start") |
| container = gradioApp().getElementById("image_browser_tabs_container") |
| let controls = container.querySelectorAll('[id*="_control_"]') |
| controls.forEach(function(control) { |
| control.style.pointerEvents = "none" |
| control.style.cursor = "not-allowed" |
| control.style.opacity = "0.65" |
| }) |
| let warnings = container.querySelectorAll('[id*="_warning_box"]') |
| warnings.forEach(function(warning) { |
| warning.innerHTML = '<p style="font-weight: bold;">Waiting for webui...' |
| }) |
|
|
| image_browser_wait_for_webui() |
| if (image_browser_debug) console.log("image_browser_start_it_up:end") |
| } |
|
|
| async function image_browser_lock(reason) { |
| if (image_browser_debug) console.log("image_browser_lock:start") |
| |
| let i = 0 |
| while (image_browser_state != "free") { |
| await image_browser_delay(200) |
| i = i + 1 |
| if (i === 150) { |
| throw new Error("Still locked after 30 seconds. Please Reload UI.") |
| } |
| } |
| |
| image_browser_state = reason |
| if (image_browser_debug) console.log("image_browser_lock:end") |
| } |
|
|
| async function image_browser_unlock() { |
| if (image_browser_debug) console.log("image_browser_unlock:start") |
| image_browser_state = "free" |
| if (image_browser_debug) console.log("image_browser_unlock:end") |
| } |
|
|
| const image_browser_click_image = async function() { |
| if (image_browser_debug) console.log("image_browser_click_image:start") |
| await image_browser_lock("image_browser_click_image") |
| const tab_base_tag = image_browser_current_tab() |
| const container = gradioApp().getElementById(tab_base_tag + "_image_browser_container") |
| let child = this |
| let index = 0 |
| while((child = child.previousSibling) != null) { |
| index = index + 1 |
| } |
| const set_btn = container.querySelector(".image_browser_set_index") |
| let curr_idx |
| try { |
| curr_idx = set_btn.getAttribute("img_index") |
| } catch (e) { |
| curr_idx = -1 |
| } |
| if (curr_idx != index) { |
| set_btn.setAttribute("img_index", index) |
| } |
| await image_browser_unlock() |
| set_btn.click() |
| if (image_browser_debug) console.log("image_browser_click_image:end") |
| } |
|
|
| async function image_browser_get_current_img(tab_base_tag, img_index, page_index, filenames, turn_page_switch, image_gallery) { |
| if (image_browser_debug) console.log("image_browser_get_current_img:start") |
| await image_browser_lock("image_browser_get_current_img") |
| img_index = gradioApp().getElementById(tab_base_tag + '_image_browser_set_index').getAttribute("img_index") |
| gradioApp().dispatchEvent(new Event("image_browser_get_current_img")) |
| await image_browser_unlock() |
| if (image_browser_debug) console.log("image_browser_get_current_img:end") |
| return [ |
| tab_base_tag, |
| img_index, |
| page_index, |
| filenames, |
| turn_page_switch, |
| image_gallery |
| ] |
| } |
|
|
| async function image_browser_refresh_current_page_preview() { |
| if (image_browser_debug) console.log("image_browser_refresh_current_page_preview:start") |
| await image_browser_delay(200) |
| const preview_div = gradioApp().querySelector('.preview') |
| if (preview_div === null) { |
| if (image_browser_debug) console.log("image_browser_refresh_current_page_preview:end") |
| return |
| } |
| const tab_base_tag = image_browser_current_tab() |
| const gallery = gradioApp().querySelector(`#${tab_base_tag}_image_browser`) |
| const set_btn = gallery.querySelector(".image_browser_set_index") |
| const curr_idx = parseInt(set_btn.getAttribute("img_index")) |
| |
| const gallery_items = gallery.querySelectorAll(".thumbnail-item") |
| const curr_image = gallery_items[curr_idx] |
| curr_image.click() |
| if (image_browser_debug) console.log("image_browser_refresh_current_page_preview:end") |
| } |
|
|
| async function image_browser_turnpage(tab_base_tag) { |
| if (image_browser_debug) console.log("image_browser_turnpage:start") |
| while (!image_browser_started) { |
| await image_browser_delay(200) |
| } |
| const gallery = gradioApp().querySelector(`#${tab_base_tag}_image_browser`) |
| let clear |
| try { |
| clear = gallery.querySelector("button[aria-label='Clear']") |
| if (clear) { |
| clear.click() |
| } |
| } catch (e) { |
| console.error(e) |
| } |
| if (image_browser_debug) console.log("image_browser_turnpage:end") |
| } |
|
|
| const image_browser_get_current_img_handler = (del_img_btn) => { |
| if (image_browser_debug) console.log("image_browser_get_current_img_handler:start") |
| |
| del_img_btn.style.pointerEvents = "auto" |
| del_img_btn.style.cursor = "default" |
| del_img_btn.style.opacity = "1" |
| if (image_browser_debug) console.log("image_browser_get_current_img_handler:end") |
| } |
|
|
| async function image_browser_select_image(tab_base_tag, img_index, select_image) { |
| if (image_browser_debug) console.log("image_browser_select_image:start") |
| if (select_image) { |
| await image_browser_lock("image_browser_select_image") |
| const del_img_btn = gradioApp().getElementById(tab_base_tag + "_image_browser_del_img_btn") |
| |
| del_img_btn.style.pointerEvents = "none" |
| del_img_btn.style.cursor = "not-allowed" |
| del_img_btn.style.opacity = "0.65" |
|
|
| const gallery = gradioApp().getElementById(tab_base_tag + "_image_browser_gallery") |
| const gallery_items = gallery.querySelectorAll(".thumbnail-item") |
| if (img_index >= gallery_items.length || gallery_items.length == 0) { |
| const refreshBtn = gradioApp().getElementById(tab_base_tag + "_image_browser_renew_page") |
| refreshBtn.dispatchEvent(new Event("click")) |
| } else { |
| const curr_image = gallery_items[img_index] |
| curr_image.click() |
| } |
| await image_browser_unlock() |
|
|
| |
| gradioApp().removeEventListener("image_browser_get_current_img", () => image_browser_get_current_img_handler(del_img_btn)) |
| gradioApp().addEventListener("image_browser_get_current_img", () => image_browser_get_current_img_handler(del_img_btn)) |
| } |
| if (image_browser_debug) console.log("image_browser_select_image:end") |
| } |
|
|
| async function image_browser_gototab(tabname) { |
| if (image_browser_debug) console.log("image_browser_gototab:start") |
| await image_browser_lock("image_browser_gototab") |
|
|
| tabNav = gradioApp().querySelector(".tab-nav") |
| const tabNavChildren = tabNav.children |
| let tabNavButtonNum |
| if (typeof tabname === "number") { |
| let buttonCnt = 0 |
| for (let i = 0; i < tabNavChildren.length; i++) { |
| if (tabNavChildren[i].tagName === "BUTTON") { |
| if (buttonCnt === tabname) { |
| tabNavButtonNum = i |
| break |
| } |
| buttonCnt++ |
| } |
| } |
| } else { |
| for (let i = 0; i < tabNavChildren.length; i++) { |
| if (tabNavChildren[i].tagName === "BUTTON" && tabNavChildren[i].textContent.trim() === tabname) { |
| tabNavButtonNum = i |
| break |
| } |
| } |
| } |
| let tabNavButton = tabNavChildren[tabNavButtonNum] |
| tabNavButton.click() |
|
|
| |
| const startTime = Date.now() |
| |
| const timeout = 60000 |
| |
| await image_browser_delay(100) |
| while (!tabNavButton.classList.contains("selected")) { |
| tabNavButton = tabNavChildren[tabNavButtonNum] |
| if (Date.now() - startTime > timeout) { |
| throw new Error("image_browser_gototab: 60 seconds have passed") |
| } |
| await image_browser_delay(200) |
| } |
|
|
| await image_browser_unlock() |
| if (image_browser_debug) console.log("image_browser_gototab:end") |
| } |
|
|
| async function image_browser_get_image_for_ext(tab_base_tag, image_index) { |
| if (image_browser_debug) console.log("image_browser_get_image_for_ext:start") |
| const image_browser_image = gradioApp().querySelectorAll(`#${tab_base_tag}_image_browser_gallery .thumbnail-item`)[image_index] |
|
|
| const canvas = document.createElement("canvas") |
| const image = document.createElement("img") |
| image.src = image_browser_image.querySelector("img").src |
|
|
| await image.decode() |
|
|
| canvas.width = image.width |
| canvas.height = image.height |
|
|
| canvas.getContext("2d").drawImage(image, 0, 0) |
|
|
| if (image_browser_debug) console.log("image_browser_get_image_for_ext:end") |
| return canvas.toDataURL() |
| } |
|
|
| function image_browser_openoutpaint_send(tab_base_tag, image_index, image_browser_prompt, image_browser_neg_prompt, name = "WebUI Resource") { |
| if (image_browser_debug) console.log("image_browser_openoutpaint_send:start") |
| image_browser_get_image_for_ext(tab_base_tag, image_index) |
| .then((dataURL) => { |
| |
| openoutpaint_send_image(dataURL, name) |
|
|
| |
| const tab = get_uiCurrentTabContent().id |
|
|
| const prompt = image_browser_prompt |
| const negPrompt = image_browser_neg_prompt |
| openoutpaint.frame.contentWindow.postMessage({ |
| key: openoutpaint.key, |
| type: "openoutpaint/set-prompt", |
| prompt, |
| negPrompt, |
| }) |
|
|
| |
| image_browser_gototab("openOutpaint") |
| }) |
| if (image_browser_debug) console.log("image_browser_openoutpaint_send:end") |
| } |
|
|
| async function image_browser_controlnet_send(toTabNum, tab_base_tag, image_index, controlnetNum, controlnetType) { |
| if (image_browser_debug) console.log("image_browser_controlnet_send:start") |
| |
| const dataURL = await image_browser_get_image_for_ext(tab_base_tag, image_index) |
| const blob = await (await fetch(dataURL)).blob() |
| const dt = new DataTransfer() |
| dt.items.add(new File([blob], "ImageBrowser.png", { type: blob.type })) |
| const list = dt.files |
|
|
| await image_browser_gototab(toTabNum) |
| const current_tabid = image_browser_webui_current_tab() |
| const current_tab = current_tabid.replace("tab_", "") |
| const tab_controlnet = gradioApp().getElementById(current_tab + "_controlnet") |
| let accordion = tab_controlnet.querySelector("#controlnet > .label-wrap > .icon") |
| if (accordion.style.transform.includes("rotate(90deg)")) { |
| accordion.click() |
| |
| const startTime = Date.now() |
| |
| const timeout = 60000 |
| |
| await image_browser_delay(100) |
| while (accordion.style.transform.includes("rotate(90deg)")) { |
| accordion = tab_controlnet.querySelector("#controlnet > .label-wrap > .icon") |
| if (Date.now() - startTime > timeout) { |
| throw new Error("image_browser_controlnet_send/accordion: 60 seconds have passed") |
| } |
| await image_browser_delay(200) |
| } |
| } |
|
|
| let inputImage |
| let inputContainer |
| if (controlnetType == "single") { |
| inputImage = gradioApp().getElementById(current_tab + "_controlnet_ControlNet_input_image") |
| } else { |
| const tabs = gradioApp().getElementById(current_tab + "_controlnet_tabs") |
| const tab_num = (parseInt(controlnetNum) + 1).toString() |
| tab_button = tabs.querySelector(".tab-nav > button:nth-child(" + tab_num + ")") |
| tab_button.click() |
| |
| const startTime = Date.now() |
| |
| const timeout = 60000 |
| |
| await image_browser_delay(100) |
| while (!tab_button.classList.contains("selected")) { |
| tab_button = tabs.querySelector(".tab-nav > button:nth-child(" + tab_num + ")") |
| if (Date.now() - startTime > timeout) { |
| throw new Error("image_browser_controlnet_send/tabs: 60 seconds have passed") |
| } |
| await image_browser_delay(200) |
| } |
| inputImage = gradioApp().getElementById(current_tab + "_controlnet_ControlNet-" + controlnetNum.toString() + "_input_image") |
| } |
| try { |
| inputContainer = inputImage.querySelector('div[data-testid="image"]') |
| } catch (e) {} |
|
|
| const input = inputContainer.querySelector("input[type='file']") |
|
|
| let clear |
| try { |
| clear = inputContainer.querySelector("button[aria-label='Clear']") |
| if (clear) { |
| clear.click() |
| } |
| } catch (e) { |
| console.error(e) |
| } |
|
|
| try { |
| |
| const startTime = Date.now() |
| |
| const timeout = 60000 |
| while (clear) { |
| clear = inputContainer.querySelector("button[aria-label='Clear']") |
| if (Date.now() - startTime > timeout) { |
| throw new Error("image_browser_controlnet_send/clear: 60 seconds have passed") |
| } |
| await image_browser_delay(200) |
| } |
| } catch (e) { |
| console.error(e) |
| } |
|
|
| input.value = "" |
| input.files = list |
| const event = new Event("change", { "bubbles": true, "composed": true }) |
| input.dispatchEvent(event) |
| if (image_browser_debug) console.log("image_browser_controlnet_send:end") |
| } |
|
|
| function image_browser_controlnet_send_txt2img(tab_base_tag, image_index, controlnetNum, controlnetType) { |
| image_browser_controlnet_send(0, tab_base_tag, image_index, controlnetNum, controlnetType) |
| } |
| |
| function image_browser_controlnet_send_img2img(tab_base_tag, image_index, controlnetNum, controlnetType) { |
| image_browser_controlnet_send(1, tab_base_tag, image_index, controlnetNum, controlnetType) |
| } |
|
|
| function image_browser_class_add(tab_base_tag) { |
| gradioApp().getElementById(tab_base_tag + '_image_browser').classList.add("image_browser_container") |
| gradioApp().getElementById(tab_base_tag + '_image_browser_set_index').classList.add("image_browser_set_index") |
| gradioApp().getElementById(tab_base_tag + '_image_browser_del_img_btn').classList.add("image_browser_del_img_btn") |
| gradioApp().getElementById(tab_base_tag + '_image_browser_gallery').classList.add("image_browser_gallery") |
| } |
|
|
| function btnClickHandler(tab_base_tag, btn) { |
| if (image_browser_debug) console.log("btnClickHandler:start") |
| const tabs_box = gradioApp().getElementById("image_browser_tabs_container") |
| if (!tabs_box.classList.contains(tab_base_tag)) { |
| gradioApp().getElementById(tab_base_tag + "_image_browser_renew_page").click() |
| tabs_box.classList.add(tab_base_tag) |
| } |
| if (image_browser_debug) console.log("btnClickHandler:end") |
| } |
|
|
| function image_browser_init() { |
| if (image_browser_debug) console.log("image_browser_init:start") |
| const tab_base_tags = gradioApp().getElementById("image_browser_tab_base_tags_list") |
| if (tab_base_tags) { |
| const image_browser_tab_base_tags_list = tab_base_tags.querySelector("textarea").value.split(",") |
| image_browser_tab_base_tags_list.forEach(function(tab_base_tag) { |
| image_browser_class_add(tab_base_tag) |
| }) |
| |
| const tab_btns = gradioApp().getElementById("image_browser_tabs_container").querySelector("div").querySelectorAll("button") |
| tab_btns.forEach(function(btn, i) { |
| const tab_base_tag = image_browser_tab_base_tags_list[i] |
| btn.setAttribute("tab_base_tag", tab_base_tag) |
| btn.removeEventListener('click', () => btnClickHandler(tab_base_tag, btn)) |
| btn.addEventListener('click', () => btnClickHandler(tab_base_tag, btn)) |
| }) |
| |
| if (gradioApp().getElementById("image_browser_preload").querySelector("input").checked) { |
| setTimeout(function(){tab_btns[0].click()}, 100) |
| } |
| } |
| image_browser_keydown() |
|
|
| const image_browser_swipe = gradioApp().getElementById("image_browser_swipe").getElementsByTagName("input")[0] |
| if (image_browser_swipe.checked) { |
| image_browser_touch() |
| } |
| if (image_browser_debug) console.log("image_browser_init:end") |
| } |
|
|
| async function image_browser_wait_for_gallery_btn(tab_base_tag){ |
| if (image_browser_debug) console.log("image_browser_wait_for_gallery_btn:start") |
| await image_browser_delay(100) |
| while (!gradioApp().getElementById(image_browser_current_tab() + "_image_browser_gallery").getElementsByClassName("thumbnail-item")) { |
| await image_browser_delay(200) |
| } |
| if (image_browser_debug) console.log("image_browser_wait_for_gallery_btn:end") |
| } |
|
|
| function image_browser_hijack_console_log() { |
| (function () { |
| const oldLog = console.log |
| console.log = function (message) { |
| const formattedTime = new Date().toISOString().slice(0, -5).replace(/[TZ]/g, ' ').trim().replace(/\s+/g, '-').replace(/:/g, '-') |
| image_browser_console_log = image_browser_console_log + formattedTime + " " + "image_browser.js: " + message + "\n" |
| oldLog.apply(console, arguments) |
| } |
| })() |
| image_browser_debug = true |
| } |
|
|
| function get_js_logs() { |
| log_to_py = image_browser_console_log |
| image_browser_console_log = "" |
| return log_to_py |
| } |
|
|
| function isNumeric(str) { |
| if (typeof str != "string") return false |
| return !isNaN(str) && !isNaN(parseFloat(str)) |
| } |
|
|
| function image_browser_start() { |
| if (image_browser_debug) console.log("image_browser_start:start") |
| image_browser_init() |
| const mutationObserver = new MutationObserver(function(mutationsList) { |
| const tab_base_tags = gradioApp().getElementById("image_browser_tab_base_tags_list") |
| if (tab_base_tags) { |
| const image_browser_tab_base_tags_list = tab_base_tags.querySelector("textarea").value.split(",") |
| image_browser_tab_base_tags_list.forEach(function(tab_base_tag) { |
| image_browser_class_add(tab_base_tag) |
| const tab_gallery_items = gradioApp().querySelectorAll('#' + tab_base_tag + '_image_browser .thumbnail-item') |
|
|
| const image_browser_img_info_json = gradioApp().getElementById(tab_base_tag + "_image_browser_img_info").querySelector('[data-testid="textbox"]').value |
| const image_browser_img_info = JSON.parse(image_browser_img_info_json) |
| const filenames = Object.keys(image_browser_img_info) |
|
|
| tab_gallery_items.forEach(function(gallery_item, i) { |
| gallery_item.removeEventListener('click', image_browser_click_image, true) |
| gallery_item.addEventListener('click', image_browser_click_image, true) |
|
|
| const filename = filenames[i] |
| try { |
| let x = image_browser_img_info[filename].x |
| let y = image_browser_img_info[filename].y |
| if (isNumeric(x) && isNumeric(y)) { |
| gallery_item.title = x + "x" + y |
| } |
| } catch (e) {} |
|
|
| document.onkeyup = async function(e) { |
| if (!image_browser_active()) { |
| if (image_browser_debug) console.log("image_browser_start:end") |
| return |
| } |
| const current_tab = image_browser_current_tab() |
| image_browser_wait_for_gallery_btn(current_tab).then(() => { |
| let gallery_btn |
| gallery_btn = gradioApp().getElementById(current_tab + "_image_browser_gallery").querySelector(".thumbnail-item .selected") |
| gallery_btn = gallery_btn && gallery_btn.length > 0 ? gallery_btn[0] : null |
| if (gallery_btn) { |
| image_browser_click_image.call(gallery_btn) |
| } |
| }) |
| } |
| }) |
|
|
| const cls_btn = gradioApp().getElementById(tab_base_tag + '_image_browser_gallery').querySelector("svg") |
| if (cls_btn) { |
| cls_btn.removeEventListener('click', () => image_browser_renew_page(tab_base_tag), false) |
| cls_btn.addEventListener('click', () => image_browser_renew_page(tab_base_tag), false) |
| } |
| }) |
| const debug_level_option = gradioApp().getElementById("image_browser_debug_level_option").querySelector("textarea").value |
| if ((debug_level_option == 'javascript' || debug_level_option == 'capture') && !image_browser_debug) { |
| image_browser_hijack_console_log() |
| } |
| } |
| }) |
| mutationObserver.observe(gradioApp(), { childList:true, subtree:true }) |
| image_browser_started = true |
| image_browser_activate_controls() |
| if (image_browser_debug) console.log("image_browser_start:end") |
| } |
|
|
| async function image_browser_activate_controls() { |
| if (image_browser_debug) console.log("image_browser_activate_controls:start") |
| await image_browser_delay(500) |
| container = gradioApp().getElementById("image_browser_tabs_container") |
| let controls = container.querySelectorAll('[id*="_control_"]') |
| controls.forEach(function(control) { |
| control.style.pointerEvents = "auto" |
| control.style.cursor = "default" |
| control.style.opacity = "1" |
| }) |
| let warnings = container.querySelectorAll('[id*="_warning_box"]') |
| warnings.forEach(function(warning) { |
| warning.innerHTML = "<p> " |
| }) |
| if (image_browser_debug) console.log("image_browser_activate_controls:end") |
| } |
|
|
| function image_browser_img_show_progress_update() { |
| image_browser_img_show_in_progress = false |
| } |
|
|
| function image_browser_renew_page(tab_base_tag) { |
| if (image_browser_debug) console.log("image_browser_renew_page:start") |
| gradioApp().getElementById(tab_base_tag + '_image_browser_renew_page').click() |
| if (image_browser_debug) console.log("image_browser_renew_page:end") |
| } |
|
|
| function image_browser_current_tab() { |
| if (image_browser_debug) console.log("image_browser_current_tab:start") |
| const tabs = gradioApp().getElementById("image_browser_tabs_container").querySelectorAll('[id$="_image_browser_container"]') |
| const tab_base_tags = gradioApp().getElementById("image_browser_tab_base_tags_list") |
| const image_browser_tab_base_tags_list = tab_base_tags.querySelector("textarea").value.split(",").sort((a, b) => b.length - a.length) |
| for (const element of tabs) { |
| if (element.style.display === "block") { |
| const id = element.id |
| const tab_base_tag = image_browser_tab_base_tags_list.find(element => id.startsWith(element)) || null |
| if (image_browser_debug) console.log("image_browser_current_tab:end") |
| return tab_base_tag |
| } |
| } |
| if (image_browser_debug) console.log("image_browser_current_tab:end") |
| } |
|
|
| function image_browser_webui_current_tab() { |
| if (image_browser_debug) console.log("image_browser_webui_current_tab:start") |
| const tabs = gradioApp().getElementById("tabs").querySelectorAll('[id^="tab_"]') |
| let id |
| for (const element of tabs) { |
| if (element.style.display === "block") { |
| id = element.id |
| break |
| } |
| } |
| if (image_browser_debug) console.log("image_browser_webui_current_tab:end") |
| return id |
| } |
|
|
| function image_browser_active() { |
| if (image_browser_debug) console.log("image_browser_active:start") |
| const ext_active = gradioApp().getElementById("tab_image_browser") |
| if (image_browser_debug) console.log("image_browser_active:end") |
| return ext_active && ext_active.style.display !== "none" |
| } |
|
|
| async function image_browser_delete_key(tab_base_tag) { |
| |
| const startTime = Date.now() |
| |
| const timeout = 60000 |
| |
| await image_browser_delay(100) |
| while (image_browser_img_show_in_progress) { |
| if (Date.now() - startTime > timeout) { |
| throw new Error("image_browser_delete_key: 60 seconds have passed") |
| } |
| await image_browser_delay(200) |
| } |
|
|
| const deleteBtn = gradioApp().getElementById(tab_base_tag + "_image_browser_del_img_btn") |
| deleteBtn.dispatchEvent(new Event("click")) |
| } |
|
|
| function image_browser_keydown() { |
| if (image_browser_debug) console.log("image_browser_keydown:start") |
| gradioApp().addEventListener("keydown", function(event) { |
| |
| if (!image_browser_active()) { |
| if (image_browser_debug) console.log("image_browser_keydown:end") |
| return |
| } |
|
|
| |
| let target |
| if (!event.composed) { |
| target = event.target |
| } else { |
| target = event.composedPath()[0] |
| } |
| if (!target || target.nodeName === "INPUT" || target.nodeName === "TEXTAREA") { |
| if (image_browser_debug) console.log("image_browser_keydown:end") |
| return |
| } |
|
|
| const tab_base_tag = image_browser_current_tab() |
|
|
| |
| if (event.code >= "Digit0" && event.code <= "Digit5") { |
| const selectedValue = event.code.charAt(event.code.length - 1) |
| const radioInputs = gradioApp().getElementById(tab_base_tag + "_control_image_browser_ranking").getElementsByTagName("input") |
| for (const input of radioInputs) { |
| if (input.value === selectedValue || (selectedValue === '0' && input === radioInputs[radioInputs.length - 1])) { |
| input.checked = true |
| input.dispatchEvent(new Event("change")) |
| break |
| } |
| } |
| } |
|
|
| const mod_keys = gradioApp().querySelector(`#${tab_base_tag}_image_browser_mod_keys textarea`).value |
| let modifiers_pressed = false |
| if (mod_keys.indexOf("C") !== -1 && mod_keys.indexOf("S") !== -1) { |
| if (event.ctrlKey && event.shiftKey) { |
| modifiers_pressed = true |
| } |
| } else if (mod_keys.indexOf("S") !== -1) { |
| if (!event.ctrlKey && event.shiftKey) { |
| modifiers_pressed = true |
| } |
| } else { |
| if (event.ctrlKey && !event.shiftKey) { |
| modifiers_pressed = true |
| } |
| } |
|
|
| let modifiers_none = false |
| if (!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { |
| modifiers_none = true |
| } |
|
|
| if (event.code == "KeyF" && modifiers_none) { |
| if (tab_base_tag == "image_browser_tab_favorites") { |
| if (image_browser_debug) console.log("image_browser_keydown:end") |
| return |
| } |
| const favoriteBtn = gradioApp().getElementById(tab_base_tag + "_image_browser_favorites_btn") |
| favoriteBtn.dispatchEvent(new Event("click")) |
| } |
|
|
| if (event.code == "KeyR" && modifiers_none) { |
| const refreshBtn = gradioApp().getElementById(tab_base_tag + "_image_browser_renew_page") |
| refreshBtn.dispatchEvent(new Event("click")) |
| } |
|
|
| if (event.code == "Delete" && modifiers_none) { |
| image_browser_delete_key(tab_base_tag) |
| } |
|
|
| if (event.code == "ArrowLeft" && modifiers_pressed) { |
| const prevBtn = gradioApp().getElementById(tab_base_tag + "_control_image_browser_prev_page") |
| prevBtn.dispatchEvent(new Event("click")) |
| } |
|
|
| if (event.code == "ArrowLeft" && modifiers_none) { |
| image_browser_img_show_in_progress = true |
| const tab_base_tag = image_browser_current_tab() |
| const set_btn = gradioApp().querySelector(`#${tab_base_tag}_image_browser .image_browser_set_index`) |
| const curr_idx = parseInt(set_btn.getAttribute("img_index")) |
| set_btn.setAttribute("img_index", curr_idx - 1) |
| image_browser_refresh_current_page_preview() |
| } |
| |
| if (event.code == "ArrowRight" && modifiers_pressed) { |
| const nextBtn = gradioApp().getElementById(tab_base_tag + "_control_image_browser_next_page") |
| nextBtn.dispatchEvent(new Event("click")) |
| } |
|
|
| if (event.code == "ArrowRight" && modifiers_none) { |
| image_browser_img_show_in_progress = true |
| const tab_base_tag = image_browser_current_tab() |
| const set_btn = gradioApp().querySelector(`#${tab_base_tag}_image_browser .image_browser_set_index`) |
| const curr_idx = parseInt(set_btn.getAttribute("img_index")) |
| set_btn.setAttribute("img_index", curr_idx + 1) |
| image_browser_refresh_current_page_preview() |
| } |
| }) |
| if (image_browser_debug) console.log("image_browser_keydown:end") |
| } |
|
|
| function image_browser_touch() { |
| if (image_browser_debug) console.log("image_browser_touch:start") |
| let touchStartX = 0 |
| let touchEndX = 0 |
| gradioApp().addEventListener("touchstart", function(event) { |
| if (!image_browser_active()) { |
| if (image_browser_debug) console.log("image_browser_touch:end") |
| return |
| } |
| touchStartX = event.touches[0].clientX; |
| }) |
| gradioApp().addEventListener("touchend", function(event) { |
| if (!image_browser_active()) { |
| if (image_browser_debug) console.log("image_browser_touch:end") |
| return |
| } |
| touchEndX = event.changedTouches[0].clientX |
| const touchDiffX = touchStartX - touchEndX |
| if (touchDiffX > 50) { |
| const tab_base_tag = image_browser_current_tab() |
| const set_btn = gradioApp().querySelector(`#${tab_base_tag}_image_browser .image_browser_set_index`) |
| const curr_idx = parseInt(set_btn.getAttribute("img_index")) |
| if (curr_idx >= 1) { |
| set_btn.setAttribute("img_index", curr_idx - 1) |
| image_browser_refresh_current_page_preview() |
| } |
| } else if (touchDiffX < -50) { |
| const tab_base_tag = image_browser_current_tab() |
| const gallery = gradioApp().querySelector(`#${tab_base_tag}_image_browser`) |
| const gallery_items = gallery.querySelectorAll(".thumbnail-item") |
| const thumbnails = gallery_items.length / 2 |
| const set_btn = gradioApp().querySelector(`#${tab_base_tag}_image_browser .image_browser_set_index`) |
| const curr_idx = parseInt(set_btn.getAttribute("img_index")) |
| if (curr_idx + 1 < thumbnails) { |
| set_btn.setAttribute("img_index", curr_idx + 1) |
| image_browser_refresh_current_page_preview() |
| } |
| } |
| }) |
| if (image_browser_debug) console.log("image_browser_touch:end") |
| } |
|
|