|
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 || !images.length) 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}`,].join('&'); |
|
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); |
|
|