| 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); |
|
|