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