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