Spaces:
Runtime error
Runtime error
| 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"; | |
| } | |