Spaces:
Running
on
Zero
Running
on
Zero
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, // Place this item last (until someone else has a higher order) | |
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); | |