Skip to content

Commit

Permalink
put script in iife
Browse files Browse the repository at this point in the history
  • Loading branch information
PladsElsker committed Nov 2, 2023
1 parent dfc7fb9 commit 5862833
Showing 1 changed file with 146 additions and 143 deletions.
289 changes: 146 additions & 143 deletions javascript/compute-height.js
Original file line number Diff line number Diff line change
@@ -1,158 +1,161 @@
const POLLING_TIMEOUT = 500;
(() => {
const POLLING_TIMEOUT = 500;

function uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
}

const WEBUI_CLIENT_ID = uuidv4();
function uuidv4() {
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
}

const WEBUI_CLIENT_ID = uuidv4();

function changeDisplayedWorkflowType(targetWorkflowType) {
const targetIFrameElement = getWorkflowTypeIFrame(targetWorkflowType);
const currentIFrameElement = targetIFrameElement.parentElement.querySelector(".comfyui-workflow-type-visible");
currentIFrameElement.classList.remove("comfyui-workflow-type-visible");
targetIFrameElement.classList.add("comfyui-workflow-type-visible");
}

document.addEventListener("DOMContentLoaded", () => {
onComfyuiTabLoaded(clearEnabledDisplayNames);
onComfyuiTabLoaded(setupComfyuiTabEvents);
});

function changeDisplayedWorkflowType(targetWorkflowType) {
const targetIFrameElement = getWorkflowTypeIFrame(targetWorkflowType);
const currentIFrameElement = targetIFrameElement.parentElement.querySelector(".comfyui-workflow-type-visible");
currentIFrameElement.classList.remove("comfyui-workflow-type-visible");
targetIFrameElement.classList.add("comfyui-workflow-type-visible");
}
function onComfyuiTabLoaded(callback) {
if (getClearEnabledDisplayNamesButtons().some(e => e === null) ||
getWorkflowTypeIds() === null ||
getComfyuiContainer() === null ||
getTabNav() === null ||
getWebuiClientIdTextArea() === null
) {
// webui not yet ready, try again in a bit
setTimeout(() => { onComfyuiTabLoaded(callback); }, POLLING_TIMEOUT);
return;
}

document.addEventListener("DOMContentLoaded", () => {
onComfyuiTabLoaded(clearEnabledDisplayNames);
onComfyuiTabLoaded(setupComfyuiTabEvents);
});
callback();
}

function onComfyuiTabLoaded(callback) {
if (getClearEnabledDisplayNamesButtons().some(e => e === null) ||
getWorkflowTypeIds() === null ||
getComfyuiContainer() === null ||
getTabNav() === null ||
getWebuiClientIdTextArea() === null
) {
// webui not yet ready, try again in a bit
setTimeout(() => { onComfyuiTabLoaded(callback); }, POLLING_TIMEOUT);
return;
function clearEnabledDisplayNames() {
for (const clearButton of getClearEnabledDisplayNamesButtons()) {
clearButton.click();
}
}

callback();
}
function setupComfyuiTabEvents() {
setupWebuiClientId();
setupResizeTabEvent();
setupToggleFooterEvent();

function clearEnabledDisplayNames() {
for (const clearButton of getClearEnabledDisplayNamesButtons()) {
clearButton.click();
updateComfyuiTabHeight();

getWorkflowTypeIds().forEach(id => setupIFrame(id));
}
}

function setupComfyuiTabEvents() {
setupWebuiClientId();
setupResizeTabEvent();
setupToggleFooterEvent();
function reloadComfyuiIFrames() {
getWorkflowTypeIds().forEach(id => {
const comfyuiFrame = getWorkflowTypeIFrame(id);
reloadFrameElement(comfyuiFrame);
});
}

updateComfyuiTabHeight();
function setupWebuiClientId() {
const textArea = getWebuiClientIdTextArea();
textArea.value = WEBUI_CLIENT_ID;
textArea.dispatchEvent(new Event('input'));
}

getWorkflowTypeIds().forEach(id => setupIFrame(id));
}
function setupResizeTabEvent() {
window.addEventListener("resize", updateComfyuiTabHeight);
}

function reloadComfyuiIFrames() {
getWorkflowTypeIds().forEach(id => {
const comfyuiFrame = getWorkflowTypeIFrame(id);
reloadFrameElement(comfyuiFrame);
});
}

function setupWebuiClientId() {
const textArea = getWebuiClientIdTextArea();
textArea.value = WEBUI_CLIENT_ID;
textArea.dispatchEvent(new Event('input'));
}

function setupResizeTabEvent() {
window.addEventListener("resize", updateComfyuiTabHeight);
}

function setupToggleFooterEvent() {
new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
updateFooterStyle();
function setupToggleFooterEvent() {
new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
updateFooterStyle();
}
}
})
.observe(getComfyuiTab(), { attributes: true });
}

function updateComfyuiTabHeight() {
const container = getComfyuiContainer();
const tabNavBottom = getTabNav().getBoundingClientRect().bottom;
container.style.height = `calc(100% - ${tabNavBottom}px)`;
}

function updateFooterStyle() {
const tabDisplay = getComfyuiTab().style.display;
const footer = getFooter();

if(footer === null) return;
if(tabDisplay === 'block') {
footer.classList.add('comfyui-remove-display');
}
else {
footer.classList.remove('comfyui-remove-display');
}
})
.observe(getComfyuiTab(), { attributes: true });
}

function updateComfyuiTabHeight() {
const container = getComfyuiContainer();
const tabNavBottom = getTabNav().getBoundingClientRect().bottom;
container.style.height = `calc(100% - ${tabNavBottom}px)`;
}

function updateFooterStyle() {
const tabDisplay = getComfyuiTab().style.display;
const footer = getFooter();

if(footer === null) return;
if(tabDisplay === 'block') {
footer.classList.add('comfyui-remove-display');
}
else {
footer.classList.remove('comfyui-remove-display');
}
}

function getClearEnabledDisplayNamesButtons() {
return [
document.getElementById("script_txt2img_comfyui_clear_enabled_display_names") ?? document.getElementById("script_txt2txt_comfyui_clear_enabled_display_names") ?? null,
document.getElementById("script_img2img_comfyui_clear_enabled_display_names") ?? null,
];
}

function getTabNav() {
const tabs = document.getElementById("tabs") ?? null;
return tabs ? tabs.querySelector(".tab-nav") : null;
}

function getComfyuiTab() {
return document.getElementById("tab_comfyui_webui_root") ?? null;
}

function getComfyuiContainer() {
return document.getElementById("comfyui_webui_container") ?? null;
}

function getWebuiClientIdTextArea() {
return document.querySelector("#comfyui_webui_client_id textarea") ?? null;
}

function getFooter() {
return document.querySelector('#footer') ?? null;
}

function getWorkflowTypeIFrame(workflowTypeId) {
return document.querySelector(`[workflow_type_id="${workflowTypeId}"]`);
}

function getWorkflowTypeIds() {
return getExtensionDynamicProperty('workflow_type_ids');
}

function getExtensionDynamicProperty(key) {
return JSON.parse(document.querySelector(`[sd_webui_comfyui_key="${key}"]`)?.innerText ?? "null");
}

function reloadFrameElement(iframeElement) {
iframeElement.src += "";
}

function setupIFrame(workflowTypeId) {
let messageToReceive = workflowTypeId;

const iframeSearchParams = new URLSearchParams();
iframeSearchParams.set("workflowTypeId", workflowTypeId);
iframeSearchParams.set("webuiClientId", WEBUI_CLIENT_ID);
const iframe = getWorkflowTypeIFrame(workflowTypeId);
const base_src = iframe.getAttribute("base_src");
const iframe_src = base_src + "?" + iframeSearchParams.toString();
if (iframe.src !== iframe_src) {
iframe.src = iframe_src;
}
else {
reloadFrameElement(iframe);
}
}
}

function getClearEnabledDisplayNamesButtons() {
return [
document.getElementById("script_txt2img_comfyui_clear_enabled_display_names") ?? document.getElementById("script_txt2txt_comfyui_clear_enabled_display_names") ?? null,
document.getElementById("script_img2img_comfyui_clear_enabled_display_names") ?? null,
];
}

function getTabNav() {
const tabs = document.getElementById("tabs") ?? null;
return tabs ? tabs.querySelector(".tab-nav") : null;
}

function getComfyuiTab() {
return document.getElementById("tab_comfyui_webui_root") ?? null;
}

function getComfyuiContainer() {
return document.getElementById("comfyui_webui_container") ?? null;
}

function getWebuiClientIdTextArea() {
return document.querySelector("#comfyui_webui_client_id textarea") ?? null;
}

function getFooter() {
return document.querySelector('#footer') ?? null;
}

function getWorkflowTypeIFrame(workflowTypeId) {
return document.querySelector(`[workflow_type_id="${workflowTypeId}"]`);
}

function getWorkflowTypeIds() {
return getExtensionDynamicProperty('workflow_type_ids');
}

function getExtensionDynamicProperty(key) {
return JSON.parse(document.querySelector(`[sd_webui_comfyui_key="${key}"]`)?.innerText ?? "null");
}

function reloadFrameElement(iframeElement) {
iframeElement.src += "";
}

function setupIFrame(workflowTypeId) {
let messageToReceive = workflowTypeId;

const iframeSearchParams = new URLSearchParams();
iframeSearchParams.set("workflowTypeId", workflowTypeId);
iframeSearchParams.set("webuiClientId", WEBUI_CLIENT_ID);
const iframe = getWorkflowTypeIFrame(workflowTypeId);
const base_src = iframe.getAttribute("base_src");
const iframe_src = base_src + "?" + iframeSearchParams.toString();
if (iframe.src !== iframe_src) {
iframe.src =iframe_src;
}
else {
reloadFrameElement(iframe);
}
}
})();

0 comments on commit 5862833

Please sign in to comment.