706 lines
65 KiB
JavaScript
706 lines
65 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
|
import { ComfyApp } from "../../scripts/app.js";
|
|
|
|
const images = {
|
|
cute_comfy_logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAACACAYAAAAiVXSaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFyGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIzLTEwLTE2VDIxOjAxOjI1LTA1OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTEwLTE2VDIxOjAxOjI1LTA1OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMy0xMC0xNlQyMTowMToyNS0wNTowMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0YWFjOWIxYi05OGU4LTcxNDctYTgwOS04MWU3ZjM2MmEyYTgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyMmQ2OTJlNi1lNTQ5LTYwNDYtYjE3ZC0z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'
|
|
}
|
|
|
|
const cuteCustomStyles = `
|
|
@import url('https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;500;600;700&family=Noto+Color+Emoji&display=swap');
|
|
|
|
:root
|
|
{
|
|
--cute-comfy-text: #E1D5E8;
|
|
--cute-comfy-bar-height: 50px;
|
|
--cute-comfy-sidebar-width: 200px;
|
|
--cute-comfy-sidebar-bg: #49355a;
|
|
}
|
|
|
|
#cute-comfy,
|
|
#cute-comfy *
|
|
{
|
|
font-family: 'Comfortaa', sans-serif !important;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
#cute-comfy
|
|
{
|
|
color: var(--cute-comfy-text);
|
|
}
|
|
|
|
#cute-comfy #batchCountInputNumber
|
|
{
|
|
width: 50px;
|
|
height: 26px;
|
|
text-align: center;
|
|
background-color: #d4c4e3;
|
|
border: none;
|
|
color: #241a2d;
|
|
}
|
|
|
|
.emoji
|
|
{
|
|
font-family: 'Noto Color Emoji', sans-serif !important;
|
|
}
|
|
|
|
.cute-comfy-top-bar
|
|
{
|
|
display: flex;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: var(--cute-comfy-bar-height);
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
background: rgb(119, 86, 148);
|
|
background: linear-gradient(135deg, rgba(119, 86, 148, 1) 20%, rgba(36, 26, 45, 1) 100%);
|
|
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.cute-comfy-top-bar-left
|
|
{
|
|
display: flex;
|
|
align-items: center;
|
|
height: 100%;
|
|
padding-left: 10px;
|
|
}
|
|
|
|
.cute-comfy-top-bar-right
|
|
{
|
|
display: flex;
|
|
align-items: center;
|
|
height: 100%;
|
|
padding-right: 10px;
|
|
}
|
|
|
|
.cute-comfy-top-bar-right > *,
|
|
.cute-comfy-top-bar-left > *,
|
|
.cute-comfy-top-bar-right button.comfy-queue-btn
|
|
{
|
|
margin-left: 1rem !important;
|
|
}
|
|
|
|
.cute-comfy-top-bar-right > *:last-child
|
|
{
|
|
margin-left: 0;
|
|
}
|
|
|
|
.cute-comfy-top-bar-left > *:first-child
|
|
{
|
|
margin-left: 0;
|
|
}
|
|
|
|
.cute-comfy-logo
|
|
{
|
|
position: relative;
|
|
height: 85%;
|
|
}
|
|
|
|
.cute-comfy-logo img
|
|
{
|
|
height: 100%;
|
|
}
|
|
|
|
.cute-comfy-button
|
|
{
|
|
background-color: #b382e0;
|
|
border: none;
|
|
color: #241a2d;
|
|
font-weight: bold;
|
|
padding: 5px 10px;
|
|
text-align: center;
|
|
text-decoration: none;
|
|
display: inline-block;
|
|
width: auto;
|
|
height: 28px;
|
|
line-height: 1.25rem;
|
|
cursor: pointer;
|
|
|
|
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.cute-comfy-button:hover
|
|
{
|
|
background-color: #a66ed8;
|
|
color: #241a2d;
|
|
}
|
|
|
|
button.cute-comfy-button > svg
|
|
{
|
|
margin: 0 0.2rem;
|
|
}
|
|
|
|
.cute-comfy-menu-button:hover
|
|
{
|
|
color: #999;
|
|
}
|
|
|
|
.cute-comfy-menu-button:active
|
|
{
|
|
color: #666;
|
|
}
|
|
|
|
div.cute-comfy-menu
|
|
{
|
|
position: absolute;
|
|
top: var(--cute-comfy-bar-height);
|
|
right: 0;
|
|
bottom: 0;
|
|
|
|
background-color: var(--cute-comfy-sidebar-bg);
|
|
border: none;
|
|
box-shadow: none;
|
|
border-radius: 0;
|
|
width: var(--cute-comfy-sidebar-width);
|
|
|
|
padding: 0 !important;
|
|
}
|
|
|
|
div.cute-comfy-menu button,
|
|
div.cute-comfy-menu .cute-queue-button
|
|
{
|
|
border: 0;
|
|
border-radius: 0;
|
|
|
|
display: inline-flex;
|
|
flex-flow: row nowrap;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
min-height: 33px;
|
|
|
|
background-color: #251b2e;
|
|
color: #eed7eb !important
|
|
}
|
|
|
|
div.cute-comfy-menu hr
|
|
{
|
|
height: 1px !important;
|
|
background-color: #ed8def;
|
|
border: 0;
|
|
}
|
|
|
|
div.cute-comfy-menu .cute-queue-button
|
|
{
|
|
padding: 0.25rem 1rem;
|
|
font-size: 1.25rem;
|
|
}
|
|
|
|
div.cute-comfy-list
|
|
{
|
|
margin: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
background-color: initial;
|
|
display: flex;
|
|
flex-flow: column nowrap;
|
|
align-items: center;
|
|
justify-content: stretch;
|
|
}
|
|
|
|
div.cute-comfy-list h4
|
|
{
|
|
font-family: 'Comfortaa', sans-serif !important;
|
|
color: #eed7eb !important;
|
|
font-size: 1.3rem;
|
|
margin: 0.5rem 0;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items:first-of-type:empty:before
|
|
{
|
|
font-size: 0.7rem;
|
|
content: 'Nothing!';
|
|
color: #eed7eb !important;
|
|
opacity: 0.6;
|
|
font-style: italic;
|
|
}
|
|
|
|
div.cute-comfy-menu .cute-comfy-spacer
|
|
{
|
|
flex-grow: 1;
|
|
}
|
|
|
|
div.cute-comfy-list
|
|
{
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
flex-grow: 10;
|
|
}
|
|
|
|
|
|
div.cute-comfy-list .comfy-list-items
|
|
{
|
|
overflow: auto;
|
|
min-height: 0;
|
|
width: 100%;
|
|
background: initial;
|
|
max-height: unset;
|
|
max-height: unset;
|
|
flex-basis: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items:not(:first-of-type)
|
|
{
|
|
flex-grow: 1;
|
|
height: 100%;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items:first-of-type
|
|
{
|
|
flex-grow: 0;
|
|
min-height: 32px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
div.cute-comfy-list ~ div.cute-comfy-list .comfy-list-items
|
|
{
|
|
flex-grow: 1;
|
|
overflow: auto;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div
|
|
{
|
|
width: 100%;
|
|
|
|
position: relative;
|
|
display: flex;
|
|
flex-flow: row nowrap;
|
|
|
|
justify-content: flex-start;
|
|
align-items: center;
|
|
|
|
background-color: #382747;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div > span
|
|
{
|
|
display: inline-block;
|
|
font-size: 1rem;
|
|
color: #eed7eb !important;
|
|
flex-grow: 1;
|
|
text-align: left;
|
|
padding: 0 0.75rem;
|
|
order: -2;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div > svg
|
|
{
|
|
order: -1;
|
|
color: #ff30c5;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div > span:before
|
|
{
|
|
content: '#';
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div > button
|
|
{
|
|
flex-grow: 0;
|
|
justify-self: flex-end;
|
|
background: none;
|
|
min-height: unset;
|
|
min-width: unset;
|
|
height: 100%;
|
|
}
|
|
|
|
div.cute-comfy-list .comfy-list-items > div .cute-queue-button
|
|
{
|
|
padding: 0.25rem 0.6rem !important;
|
|
}
|
|
|
|
/* Hover effects */
|
|
button:hover > .cute-hover-red
|
|
{
|
|
color: #e5586a;
|
|
}
|
|
|
|
button:hover > .cute-hover-blue
|
|
{
|
|
color: #5890e5;
|
|
}
|
|
|
|
button:hover > .cute-hover-green
|
|
{
|
|
color: #58e57a;
|
|
}
|
|
|
|
.cute-comfy-pop-menu
|
|
{
|
|
position: absolute;
|
|
right: -7.5em;
|
|
top: 50px;
|
|
|
|
display: flex;
|
|
flex-flow: column nowrap;
|
|
}
|
|
|
|
.cute-comfy-pop-menu > *
|
|
{
|
|
height: unset;
|
|
text-align: left;
|
|
padding: 0.75rem 1rem;
|
|
}
|
|
|
|
.cute-comfy-top-bar-left
|
|
{
|
|
position: relative;
|
|
}
|
|
|
|
/* Overrides the built-in media query for small screens, argh...! */
|
|
@media only screen and (max-height: 850px)
|
|
{
|
|
.comfy-menu.cute-comfy-menu
|
|
{
|
|
top: var(--cute-comfy-bar-height) !important;
|
|
}
|
|
}
|
|
`;
|
|
|
|
function moveElement(elementSelector, destinationParentSelector, newClass, append = false)
|
|
{
|
|
let element = document.querySelector(elementSelector);
|
|
if (newClass)
|
|
{
|
|
element.classList.add(newClass);
|
|
}
|
|
// Clear inline styles from the element
|
|
element.removeAttribute("style");
|
|
let elementParent = element.parentNode;
|
|
elementParent.removeChild(element);
|
|
let destinationParent = document.querySelector(destinationParentSelector);
|
|
if (append) {
|
|
destinationParent.appendChild(element);
|
|
} else {
|
|
destinationParent.insertBefore(element, destinationParent.firstChild);
|
|
}
|
|
|
|
return element;
|
|
}
|
|
|
|
function surroundElement(elementSelector, surroundElementName)
|
|
{
|
|
let element = document.querySelector(elementSelector);
|
|
let surroundElement = document.createElement(surroundElementName);
|
|
let elementParent = element.parentNode;
|
|
elementParent.removeChild(element);
|
|
surroundElement.appendChild(element);
|
|
elementParent.appendChild(surroundElement);
|
|
|
|
return surroundElement;
|
|
}
|
|
|
|
// Blocks until the element is visible
|
|
function waitForElementVisibility(selector, timeout = 5000)
|
|
{
|
|
let start = Date.now();
|
|
let element = document.querySelector(selector);
|
|
while (element == null || element.offsetParent === null)
|
|
{
|
|
if (Date.now() - start > timeout)
|
|
{
|
|
throw new Error(`Timed out waiting for element ${selector} to appear.`);
|
|
}
|
|
element = document.querySelector(selector);
|
|
}
|
|
}
|
|
|
|
async function initCuteness() {
|
|
console.group('💜 Cute Comfy 💜 ');
|
|
console.log("🟣 I'm going to make things CUTE! ^_^");
|
|
|
|
// Add a link tag to the header to add Font Awesome
|
|
var link = document.createElement("link");
|
|
link.rel = "stylesheet";
|
|
link.href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css";
|
|
document.head.appendChild(link);
|
|
|
|
// Add a script tag for Font Awesome
|
|
var script = document.createElement("script");
|
|
script.src = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/js/all.min.js";
|
|
document.head.appendChild(script);
|
|
|
|
// Inject custom style tag into the header
|
|
var style = document.createElement("style");
|
|
style.innerHTML = cuteCustomStyles;
|
|
document.head.appendChild(style);
|
|
|
|
//import { app } from "../../scripts/app.js";
|
|
|
|
// Find the drag-handle div inside the comfy-menu div, and hide it.
|
|
document.querySelector(".comfy-menu .drag-handle").style.display = "none";
|
|
|
|
// Inject a "cute comfy" top bar
|
|
var template = `
|
|
<div class="cute-comfy-top-bar">
|
|
<div class="cute-comfy-top-bar-left">
|
|
<div class="cute-comfy-logo">
|
|
<img src="${images.cute_comfy_logo}" alt="cute comfy logo" />
|
|
</div>
|
|
</div>
|
|
<div class="cute-comfy-top-bar-right">
|
|
</div>
|
|
</div>
|
|
`
|
|
|
|
// Init menu
|
|
var topBar = document.createElement("div");
|
|
topBar.id = "cute-comfy";
|
|
topBar.innerHTML = template;
|
|
|
|
var menu = document.querySelector(".comfy-menu");
|
|
menu.style.top = "var(--cute-comfy-bar-height)";
|
|
menu.classList.add("cute-comfy-menu");
|
|
menu.parentNode.insertBefore(topBar, menu);
|
|
|
|
// Hide useless "Extra Options" / "View Queue" / "View History"
|
|
document.querySelector(".comfy-menu label").parentNode.style.display = "none";
|
|
document.querySelector(".comfy-menu-btns").style.display = "none";
|
|
|
|
// Settings cog button
|
|
|
|
// Right Side
|
|
var infiniteCheck = moveElement('#autoQueueCheckbox', ".cute-comfy-top-bar-right", null, true);
|
|
surroundElement('#autoQueueCheckbox', "div");
|
|
infiniteCheck.title = "Infinite Queue";
|
|
var infLabel = document.createElement("label");
|
|
infLabel.htmlFor = "autoQueueCheckbox";
|
|
infLabel.innerHTML = "Infinite Gen";
|
|
infiniteCheck.after(infLabel);
|
|
|
|
var bcount = moveElement('#batchCountInputNumber', ".cute-comfy-top-bar-right", null, true);
|
|
var bcountLabeal = document.createElement("label");
|
|
bcountLabeal.htmlFor = "batchCountInputNumber";
|
|
bcountLabeal.innerHTML = '<i class="fas fa-layer-group"></i> Batch Count:';
|
|
bcount.before(bcountLabeal);
|
|
surroundElement('#batchCountInputNumber', "div");
|
|
|
|
var queue = moveElement("#queue-button", ".cute-comfy-top-bar-right", "cute-comfy-button", true);
|
|
queue.innerHTML = `<i class="fas fa-play"></i> Queue`;
|
|
queue.title = "Queue Workflow";
|
|
|
|
var queueTop = moveElement("#queue-front-button", ".cute-comfy-top-bar-right", "cute-comfy-button", true);
|
|
queueTop.innerHTML = `<i class="fas fa-arrow-up-wide-short"></i>`;
|
|
queueTop.title = "Queue Next";
|
|
|
|
var cogBtn = moveElement('.comfy-settings-btn', ".cute-comfy-top-bar-right", "cute-comfy-button", true);
|
|
cogBtn.classList.remove('comfy-settings-btn');
|
|
cogBtn.innerHTML = `<i class="fas fa-cog"></i>`;
|
|
cogBtn.title = "ComfyUI Settings";
|
|
|
|
// Popup menu
|
|
var menu = document.createElement("div");
|
|
menu.classList.add("cute-comfy-pop-menu");
|
|
menu.style.display = "none";
|
|
|
|
// Left Side
|
|
let btn = moveElement('#comfy-save-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-save"></i> Save`;
|
|
btn.title = "Download the current workflow as JSON.";
|
|
btn = moveElement('#comfy-load-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-folder-open"></i> Load`;
|
|
btn.title = "Upload a workflow JSON file. Will replace the current workflow.";
|
|
btn = moveElement('#comfy-clear-button', ".cute-comfy-top-bar-left", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-trash"></i> Clear`;
|
|
btn.title = "Clears the canvas. Be sure to save your workflow first!";
|
|
|
|
// Append the menu
|
|
document.querySelector(".cute-comfy-top-bar-left").appendChild(menu);
|
|
|
|
// Menu items
|
|
btn = moveElement('#comfy-dev-save-api-button', ".cute-comfy-pop-menu", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-code"></i> Save (API)`;
|
|
btn.title = "Download the current workflow in API (JSON) format.";
|
|
btn = moveElement('#comfy-refresh-button', ".cute-comfy-pop-menu", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-sync"></i> Refresh`;
|
|
btn.title = "Refreshes metadatata (selection lists, etc) inside nodes.";
|
|
btn = moveElement('#comfy-clipspace-button', ".cute-comfy-pop-menu", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-vector-square"></i> Clip Space`;
|
|
btn.title = "Inspect any images currently in clip space.";
|
|
btn = moveElement('#comfy-load-default-button', ".cute-comfy-pop-menu", "cute-comfy-button", true);
|
|
btn.innerHTML = `<i class="fas fa-undo"></i> Load Default`;
|
|
btn.title = "Loads the default workflow.";
|
|
|
|
// Append the menu button
|
|
btn = document.createElement("button");
|
|
btn.classList.add("cute-comfy-button");
|
|
btn.innerHTML = `<i class="fas fa-bars"></i>`;
|
|
document.querySelector(".cute-comfy-top-bar-left").appendChild(btn);
|
|
|
|
// When the button is clicked, toggle the visibility of the .cute-comfy-pop-menu
|
|
btn.addEventListener("click", (e) => {
|
|
let menu = document.querySelector(".cute-comfy-pop-menu");
|
|
if (menu.style.display == "none") {
|
|
menu.style.display = "flex";
|
|
} else {
|
|
menu.style.display = "none";
|
|
}
|
|
});
|
|
|
|
// When any buttons inside .cute-comfy-pop-menu are clicked, hide the menu
|
|
document.querySelectorAll(".cute-comfy-pop-menu button").forEach((btn) => {
|
|
btn.addEventListener("click", (e) => {
|
|
document.querySelector(".cute-comfy-pop-menu").style.display = "none";
|
|
});
|
|
});
|
|
|
|
var list = document.querySelectorAll(".comfy-list");
|
|
for (let i = 0; i < list.length; i++) {
|
|
list[i].removeAttribute("style");
|
|
list[i].classList.add("cute-comfy-list");
|
|
}
|
|
|
|
var spacer = document.createElement('div');
|
|
spacer.classList.add('cute-comfy-spacer');
|
|
document.querySelectorAll('.cute-comfy-list')[1].after(spacer);
|
|
|
|
function applyMutableChanges(mutations, observer, selector)
|
|
{
|
|
observer.disconnect();
|
|
observer.takeRecords();
|
|
|
|
// Stop adding inline styling to the menu
|
|
let menu = document.querySelector(".cute-comfy-menu");
|
|
if (menu.hasAttribute("style"))
|
|
{
|
|
menu.removeAttribute("style");
|
|
}
|
|
|
|
// Handle "refreshes" of the running/pending queues
|
|
var headers = document.querySelectorAll(".cute-comfy-list h4");
|
|
for (let i = 0; i < headers.length; i++) {
|
|
if (headers[i].innerHTML.includes("Running")) {
|
|
headers[i].innerHTML = "Queue";
|
|
}
|
|
else if (headers[i].innerHTML.includes("Pending")) {
|
|
headers[i].style.display = "none";
|
|
}
|
|
}
|
|
|
|
var buttonGroups = document.querySelectorAll(".cute-comfy-list .comfy-list-actions button");
|
|
for (let i = 0; i < buttonGroups.length; i++) {
|
|
if (buttonGroups[i].innerHTML.includes("Clear Queue")) {
|
|
buttonGroups[i].innerHTML = '<i class="fas fa-trash cute-hover-red"></i>';
|
|
buttonGroups[i].title = "Clear the queue";
|
|
buttonGroups[i].classList.add("cute-queue-button");
|
|
}
|
|
if (buttonGroups[i].innerHTML.includes("Clear History")) {
|
|
buttonGroups[i].innerHTML = '<i class="fas fa-trash cute-hover-red"></i>';
|
|
buttonGroups[i].title = "Clear your history";
|
|
buttonGroups[i].classList.add("cute-queue-button");
|
|
}
|
|
else if (buttonGroups[i].innerHTML.includes("Refresh")) {
|
|
buttonGroups[i].innerHTML = '<i class="fas fa-sync cute-hover-green"></i>';
|
|
buttonGroups[i].title = "Refresh this list";
|
|
buttonGroups[i].classList.add("cute-queue-button");
|
|
}
|
|
}
|
|
|
|
// If we have some list items, then hook up an observer to watch for changes
|
|
if (document.querySelectorAll(".cute-comfy-list .comfy-list-items > div").length)
|
|
{
|
|
var firstItem = document.querySelector(".cute-comfy-list .comfy-list-items:first-of-type > div:first-child");
|
|
|
|
// Append the spinner if it's not already there
|
|
if (firstItem.querySelectorAll("svg").length == 0 && firstItem.querySelectorAll("i").length == 0)
|
|
{
|
|
var ic = document.createElement("i");
|
|
|
|
ic.classList.add("fas");
|
|
ic.classList.add("fa-lg");
|
|
ic.classList.add("fa-spinner");
|
|
ic.classList.add("fa-spin-pulse");
|
|
|
|
firstItem.appendChild(ic);
|
|
}
|
|
|
|
var listItems = document.querySelectorAll(".cute-comfy-list .comfy-list-items > div");
|
|
for (let i = 0; i < listItems.length; i++) {
|
|
var el = listItems[i];
|
|
|
|
// If this element does not contain any span children
|
|
if (el.querySelectorAll("span").length == 0)
|
|
{
|
|
setInnerText(el, getInnerText(el).replace(":", ""));
|
|
|
|
// Wrap the inner text of the element in a span without affecting its children
|
|
var span = document.createElement("span");
|
|
span.innerHTML = getInnerText(el);
|
|
setInnerText(el, "");
|
|
el.appendChild(span);
|
|
}
|
|
var btns = el.querySelectorAll("button");
|
|
for (let j = 0; j < btns.length; j++) {
|
|
btns[j].classList.add("cute-queue-button");
|
|
if (btns[j].innerText.includes("Load"))
|
|
{
|
|
// Set the inner HTML to an icon of an undo button
|
|
btns[j].innerHTML = `<i class="fas fa-file-import cute-hover-blue"></i>`;
|
|
btns[j].title = "Load the workflow state from this run";
|
|
}
|
|
if (btns[j].innerText.includes("Cancel"))
|
|
{
|
|
// Set the inner HTML to an icon of a stop button
|
|
btns[j].innerHTML = `<i class="fas fa-delete-left cute-hover-red"></i>`;
|
|
btns[j].title = "Stop this run";
|
|
}
|
|
if (btns[j].innerText.includes("Delete"))
|
|
{
|
|
// Set the inner HTML to an icon of a trash can
|
|
btns[j].innerHTML = `<i class="fas fa-circle-minus cute-hover-red"></i>`;
|
|
btns[j].title = "Cancel this queued item";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Start observing again
|
|
observer.observe(document.querySelector(selector), {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
}
|
|
|
|
var observer1 = new MutationObserver((m, o) => applyMutableChanges(m, o, "#cute-comfy"));
|
|
var observer2 = new MutationObserver((m, o) => applyMutableChanges(m, o, ".cute-comfy-menu"));
|
|
|
|
observer1.observe(document.getElementById('cute-comfy'), {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
observer2.observe(document.querySelector('.cute-comfy-menu'), {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
|
|
console.log("🟣 ALL DONE! ^_^");
|
|
console.groupEnd();
|
|
}
|
|
|
|
// Function to get the inner text of an element without the text from its children
|
|
// https://stackoverflow.com/a/5002619
|
|
function getInnerText(element) {
|
|
return element.childNodes[0].nodeValue;
|
|
}
|
|
|
|
// Function to update the inner text of an element without affecting its children
|
|
// https://stackoverflow.com/a/5002619
|
|
function setInnerText(element, text) {
|
|
element.childNodes[0].nodeValue = text;
|
|
}
|
|
|
|
app.registerExtension({
|
|
name: "cute.comfy",
|
|
|
|
async setup(app) {
|
|
await initCuteness();
|
|
},
|
|
|
|
|
|
});
|