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