Spaces:
Running
on
L40S
Running
on
L40S
import { app } from "../../scripts/app.js"; | |
import { RgthreeBaseVirtualNode } from "./base_node.js"; | |
import { SERVICE as KEY_EVENT_SERVICE } from "./services/key_events_services.js"; | |
import { NodeTypesString } from "./constants.js"; | |
import { getClosestOrSelf, queryOne } from "../../rgthree/common/utils_dom.js"; | |
export class Bookmark extends RgthreeBaseVirtualNode { | |
get _collapsed_width() { | |
return this.___collapsed_width; | |
} | |
set _collapsed_width(width) { | |
const canvas = app.canvas; | |
const ctx = canvas.canvas.getContext("2d"); | |
const oldFont = ctx.font; | |
ctx.font = canvas.title_text_font; | |
this.___collapsed_width = 40 + ctx.measureText(this.title).width; | |
ctx.font = oldFont; | |
} | |
constructor(title = Bookmark.title) { | |
super(title); | |
this.comfyClass = NodeTypesString.BOOKMARK; | |
this.___collapsed_width = 0; | |
this.isVirtualNode = true; | |
this.serialize_widgets = true; | |
const nextShortcutChar = getNextShortcut(); | |
this.addWidget("text", "shortcut_key", nextShortcutChar, (value, ...args) => { | |
value = value.trim()[0] || "1"; | |
}, { | |
y: 8, | |
}); | |
this.addWidget("number", "zoom", 1, (value) => { }, { | |
y: 8 + LiteGraph.NODE_WIDGET_HEIGHT + 4, | |
max: 2, | |
min: 0.5, | |
precision: 2, | |
}); | |
this.keypressBound = this.onKeypress.bind(this); | |
this.title = "🔖"; | |
this.onConstructed(); | |
} | |
get shortcutKey() { | |
var _a, _b, _c; | |
return (_c = (_b = (_a = this.widgets[0]) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.toLocaleLowerCase()) !== null && _c !== void 0 ? _c : ""; | |
} | |
onAdded(graph) { | |
KEY_EVENT_SERVICE.addEventListener("keydown", this.keypressBound); | |
} | |
onRemoved() { | |
KEY_EVENT_SERVICE.removeEventListener("keydown", this.keypressBound); | |
} | |
onKeypress(event) { | |
const originalEvent = event.detail.originalEvent; | |
const target = originalEvent.target; | |
if (getClosestOrSelf(target, 'input,textarea,[contenteditable="true"]')) { | |
return; | |
} | |
if (KEY_EVENT_SERVICE.areOnlyKeysDown(this.widgets[0].value, true)) { | |
this.canvasToBookmark(); | |
originalEvent.preventDefault(); | |
originalEvent.stopPropagation(); | |
} | |
} | |
onMouseDown(event, pos, graphCanvas) { | |
var _a; | |
const input = queryOne(".graphdialog > input.value"); | |
if (input && input.value === ((_a = this.widgets[0]) === null || _a === void 0 ? void 0 : _a.value)) { | |
input.addEventListener("keydown", (e) => { | |
KEY_EVENT_SERVICE.handleKeyDownOrUp(e); | |
e.preventDefault(); | |
e.stopPropagation(); | |
input.value = Object.keys(KEY_EVENT_SERVICE.downKeys).join(" + "); | |
}); | |
} | |
} | |
canvasToBookmark() { | |
var _a, _b; | |
const canvas = app.canvas; | |
if ((_a = canvas === null || canvas === void 0 ? void 0 : canvas.ds) === null || _a === void 0 ? void 0 : _a.offset) { | |
canvas.ds.offset[0] = -this.pos[0] + 16; | |
canvas.ds.offset[1] = -this.pos[1] + 40; | |
} | |
if (((_b = canvas === null || canvas === void 0 ? void 0 : canvas.ds) === null || _b === void 0 ? void 0 : _b.scale) != null) { | |
canvas.ds.scale = Number(this.widgets[1].value || 1); | |
} | |
canvas.setDirty(true, true); | |
} | |
} | |
Bookmark.type = NodeTypesString.BOOKMARK; | |
Bookmark.title = NodeTypesString.BOOKMARK; | |
Bookmark.slot_start_y = -20; | |
app.registerExtension({ | |
name: "rgthree.Bookmark", | |
registerCustomNodes() { | |
Bookmark.setUp(); | |
}, | |
}); | |
function isBookmark(node) { | |
return node.type === NodeTypesString.BOOKMARK; | |
} | |
function getExistingShortcuts() { | |
const graph = app.graph; | |
const bookmarkNodes = graph._nodes.filter(isBookmark); | |
const usedShortcuts = new Set(bookmarkNodes.map((n) => n.shortcutKey)); | |
return usedShortcuts; | |
} | |
const SHORTCUT_DEFAULTS = "1234567890abcdefghijklmnopqrstuvwxyz".split(""); | |
function getNextShortcut() { | |
var _a; | |
const existingShortcuts = getExistingShortcuts(); | |
return (_a = SHORTCUT_DEFAULTS.find((char) => !existingShortcuts.has(char))) !== null && _a !== void 0 ? _a : "1"; | |
} | |