keybinds.js 1.77 KB
Newer Older
reaper47's avatar
reaper47 committed
1
import {app} from "/scripts/app.js";
2
3

app.registerExtension({
reaper47's avatar
reaper47 committed
4
	name: "Comfy.Keybinds",
5
	init() {
reaper47's avatar
reaper47 committed
6
		const keybindListener = function (event) {
7
8
9
			const modifierPressed = event.ctrlKey || event.metaKey;

			// Queue prompt using ctrl or command + enter
reaper47's avatar
reaper47 committed
10
11
			if (modifierPressed && event.key === "Enter") {
				app.queuePrompt(event.shiftKey ? -1 : 0).then();
12
13
14
				return;
			}

15
			const target = event.composedPath()[0];
reaper47's avatar
reaper47 committed
16
			if (["INPUT", "TEXTAREA"].includes(target.tagName)) {
17
18
19
				return;
			}

20
			const modifierKeyIdMap = {
reaper47's avatar
reaper47 committed
21
22
23
24
25
				s: "#comfy-save-button",
				o: "#comfy-file-input",
				Backspace: "#comfy-clear-button",
				Delete: "#comfy-clear-button",
				d: "#comfy-load-default-button",
26
27
			};

reaper47's avatar
reaper47 committed
28
			const modifierKeybindId = modifierKeyIdMap[event.key];
29
30
31
32
33
34
35
36
37
38
39
40
41
42
			if (modifierPressed && modifierKeybindId) {
				event.preventDefault();

				const elem = document.querySelector(modifierKeybindId);
				elem.click();
				return;
			}

			// Finished Handling all modifier keybinds, now handle the rest
			if (event.ctrlKey || event.altKey || event.metaKey) {
				return;
			}

			// Close out of modals using escape
reaper47's avatar
reaper47 committed
43
			if (event.key === "Escape") {
44
45
46
47
48
				const modals = document.querySelectorAll(".comfy-modal");
				const modal = Array.from(modals).find(modal => window.getComputedStyle(modal).getPropertyValue("display") !== "none");
				if (modal) {
					modal.style.display = "none";
				}
reaper47's avatar
reaper47 committed
49
50
51
52

				[...document.querySelectorAll("dialog")].forEach(d => {
					d.close();
				});
53
54
55
			}

			const keyIdMap = {
reaper47's avatar
reaper47 committed
56
57
58
				q: "#comfy-view-queue-button",
				h: "#comfy-view-history-button",
				r: "#comfy-refresh-button",
59
60
			};

reaper47's avatar
reaper47 committed
61
			const buttonId = keyIdMap[event.key];
62
63
64
65
66
67
68
69
70
			if (buttonId) {
				const button = document.querySelector(buttonId);
				button.click();
			}
		}

		window.addEventListener("keydown", keybindListener, true);
	}
});