| | import { app } from "../../scripts/app.js"; |
| | import { ComfyDialog, $el } from "../../scripts/ui.js"; |
| | import { ComfyApp } from "../../scripts/app.js"; |
| |
|
| | export class ClipspaceDialog extends ComfyDialog { |
| | static items = []; |
| | static instance = null; |
| |
|
| | static registerButton(name, contextPredicate, callback) { |
| | const item = |
| | $el("button", { |
| | type: "button", |
| | textContent: name, |
| | contextPredicate: contextPredicate, |
| | onclick: callback |
| | }) |
| |
|
| | ClipspaceDialog.items.push(item); |
| | } |
| |
|
| | static invalidatePreview() { |
| | if(ComfyApp.clipspace && ComfyApp.clipspace.imgs && ComfyApp.clipspace.imgs.length > 0) { |
| | const img_preview = document.getElementById("clipspace_preview"); |
| | if(img_preview) { |
| | img_preview.src = ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src; |
| | img_preview.style.maxHeight = "100%"; |
| | img_preview.style.maxWidth = "100%"; |
| | } |
| | } |
| | } |
| |
|
| | static invalidate() { |
| | if(ClipspaceDialog.instance) { |
| | const self = ClipspaceDialog.instance; |
| | |
| | const children = $el("div.comfy-modal-content", [ self.createImgSettings(), ...self.createButtons() ]); |
| |
|
| | if(self.element) { |
| | |
| | self.element.removeChild(self.element.firstChild); |
| | self.element.appendChild(children); |
| | } |
| | else { |
| | |
| | self.element = $el("div.comfy-modal", { parent: document.body }, [children,]); |
| | } |
| |
|
| | if(self.element.children[0].children.length <= 1) { |
| | self.element.children[0].appendChild($el("p", {}, ["Unable to find the features to edit content of a format stored in the current Clipspace."])); |
| | } |
| |
|
| | ClipspaceDialog.invalidatePreview(); |
| | } |
| | } |
| |
|
| | constructor() { |
| | super(); |
| | } |
| |
|
| | createButtons(self) { |
| | const buttons = []; |
| |
|
| | for(let idx in ClipspaceDialog.items) { |
| | const item = ClipspaceDialog.items[idx]; |
| | if(!item.contextPredicate || item.contextPredicate()) |
| | buttons.push(ClipspaceDialog.items[idx]); |
| | } |
| |
|
| | buttons.push( |
| | $el("button", { |
| | type: "button", |
| | textContent: "Close", |
| | onclick: () => { this.close(); } |
| | }) |
| | ); |
| |
|
| | return buttons; |
| | } |
| |
|
| | createImgSettings() { |
| | if(ComfyApp.clipspace.imgs) { |
| | const combo_items = []; |
| | const imgs = ComfyApp.clipspace.imgs; |
| |
|
| | for(let i=0; i < imgs.length; i++) { |
| | combo_items.push($el("option", {value:i}, [`${i}`])); |
| | } |
| |
|
| | const combo1 = $el("select", |
| | {id:"clipspace_img_selector", onchange:(event) => { |
| | ComfyApp.clipspace['selectedIndex'] = event.target.selectedIndex; |
| | ClipspaceDialog.invalidatePreview(); |
| | } }, combo_items); |
| |
|
| | const row1 = |
| | $el("tr", {}, |
| | [ |
| | $el("td", {}, [$el("font", {color:"white"}, ["Select Image"])]), |
| | $el("td", {}, [combo1]) |
| | ]); |
| |
|
| |
|
| | const combo2 = $el("select", |
| | {id:"clipspace_img_paste_mode", onchange:(event) => { |
| | ComfyApp.clipspace['img_paste_mode'] = event.target.value; |
| | } }, |
| | [ |
| | $el("option", {value:'selected'}, 'selected'), |
| | $el("option", {value:'all'}, 'all') |
| | ]); |
| | combo2.value = ComfyApp.clipspace['img_paste_mode']; |
| |
|
| | const row2 = |
| | $el("tr", {}, |
| | [ |
| | $el("td", {}, [$el("font", {color:"white"}, ["Paste Mode"])]), |
| | $el("td", {}, [combo2]) |
| | ]); |
| |
|
| | const td = $el("td", {align:'center', width:'100px', height:'100px', colSpan:'2'}, |
| | [ $el("img",{id:"clipspace_preview", ondragstart:() => false},[]) ]); |
| |
|
| | const row3 = |
| | $el("tr", {}, [td]); |
| |
|
| | return $el("table", {}, [row1, row2, row3]); |
| | } |
| | else { |
| | return []; |
| | } |
| | } |
| |
|
| | createImgPreview() { |
| | if(ComfyApp.clipspace.imgs) { |
| | return $el("img",{id:"clipspace_preview", ondragstart:() => false}); |
| | } |
| | else |
| | return []; |
| | } |
| |
|
| | show() { |
| | const img_preview = document.getElementById("clipspace_preview"); |
| | ClipspaceDialog.invalidate(); |
| | |
| | this.element.style.display = "block"; |
| | } |
| | } |
| |
|
| | app.registerExtension({ |
| | name: "Comfy.Clipspace", |
| | init(app) { |
| | app.openClipspace = |
| | function () { |
| | if(!ClipspaceDialog.instance) { |
| | ClipspaceDialog.instance = new ClipspaceDialog(app); |
| | ComfyApp.clipspace_invalidate_handler = ClipspaceDialog.invalidate; |
| | } |
| |
|
| | if(ComfyApp.clipspace) { |
| | ClipspaceDialog.instance.show(); |
| | } |
| | else |
| | app.ui.dialog.show("Clipspace is Empty!"); |
| | }; |
| | } |
| | }); |