| | import { app } from "../../../scripts/app.js"; |
| | import { api } from "../../../scripts/api.js"; |
| | import { $el } from "../../../scripts/ui.js"; |
| |
|
| | const id = "pysssss.ShowImageOnMenu"; |
| | const ext = { |
| | name: id, |
| | async setup(app) { |
| | let enabled = true; |
| | let nodeId = null; |
| | const img = $el("img", { |
| | style: { |
| | width: "100%", |
| | height: "150px", |
| | objectFit: "contain", |
| | }, |
| | }); |
| | const link = $el( |
| | "a", |
| | { |
| | style: { |
| | width: "100%", |
| | height: "150px", |
| | marginTop: "10px", |
| | order: 100, |
| | display: "none", |
| | }, |
| | href: "#", |
| | onclick: (e) => { |
| | e.stopPropagation(); |
| | e.preventDefault(); |
| | const node = app.graph.getNodeById(nodeId); |
| | if (!node) return; |
| | app.canvas.centerOnNode(node); |
| | app.canvas.setZoom(1); |
| | }, |
| | }, |
| | [img] |
| | ); |
| |
|
| | app.ui.menuContainer.append(link); |
| |
|
| | const show = (src, node) => { |
| | img.src = src; |
| | nodeId = Number(node); |
| | link.style.display = "unset"; |
| | }; |
| |
|
| | api.addEventListener("executed", ({ detail }) => { |
| | if (!enabled) return; |
| | const images = detail?.output?.images; |
| | if (!images) return; |
| | const format = app.getPreviewFormatParam(); |
| | const src = `/view?filename=${encodeURIComponent(images[0].filename)}&type=${ |
| | images[0].type |
| | }&subfolder=${encodeURIComponent(images[0].subfolder)}&t=${+new Date()}${format}`; |
| | show(src, detail.node); |
| | }); |
| |
|
| | api.addEventListener("b_preview", ({ detail }) => { |
| | if (!enabled) return; |
| | show(URL.createObjectURL(detail), app.runningNodeId); |
| | }); |
| |
|
| | app.ui.settings.addSetting({ |
| | id, |
| | name: "🐍 Show Image On Menu", |
| | defaultValue: true, |
| | type: "boolean", |
| | onChange(value) { |
| | enabled = value; |
| |
|
| | if (!enabled) link.style.display = "none"; |
| | }, |
| | }); |
| | }, |
| | }; |
| |
|
| | app.registerExtension(ext); |
| |
|