You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
import {app} from "../../scripts/app.js"; |
|
|
|
app.registerExtension({ |
|
name: "Comfy.Keybinds", |
|
init() { |
|
const keybindListener = function (event) { |
|
const modifierPressed = event.ctrlKey || event.metaKey; |
|
|
|
// Queue prompt using ctrl or command + enter |
|
if (modifierPressed && event.key === "Enter") { |
|
app.queuePrompt(event.shiftKey ? -1 : 0).then(); |
|
return; |
|
} |
|
|
|
const target = event.composedPath()[0]; |
|
if (["INPUT", "TEXTAREA"].includes(target.tagName)) { |
|
return; |
|
} |
|
|
|
const modifierKeyIdMap = { |
|
s: "#comfy-save-button", |
|
o: "#comfy-file-input", |
|
Backspace: "#comfy-clear-button", |
|
Delete: "#comfy-clear-button", |
|
d: "#comfy-load-default-button", |
|
}; |
|
|
|
const modifierKeybindId = modifierKeyIdMap[event.key]; |
|
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 |
|
if (event.key === "Escape") { |
|
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"; |
|
} |
|
|
|
[...document.querySelectorAll("dialog")].forEach(d => { |
|
d.close(); |
|
}); |
|
} |
|
|
|
const keyIdMap = { |
|
q: "#comfy-view-queue-button", |
|
h: "#comfy-view-history-button", |
|
r: "#comfy-refresh-button", |
|
}; |
|
|
|
const buttonId = keyIdMap[event.key]; |
|
if (buttonId) { |
|
const button = document.querySelector(buttonId); |
|
button.click(); |
|
} |
|
} |
|
|
|
window.addEventListener("keydown", keybindListener, true); |
|
} |
|
});
|
|
|