| 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!"); |
| }; |
| } |
| }); |