fix: text gate supports prompt weighting (Ctrl/Cmd+↑/↓) in the editor
ComfyUI's "edit attention" (wrap selection in (token:weight)) is a global window keydown listener that acts when a <textarea> is focused. The text gate editor is a textarea, but its keydown handler called stopPropagation on EVERY key, so the event never bubbled to window and weighting never fired — notably when using the node as a prompt text node in protected mode. Now stopPropagation is skipped for the weighting shortcut (Ctrl/Cmd + ↑/↓) so it reaches the global handler; all other keys are still stopped so typing/space can't trigger litegraph canvas shortcuts. The weighting edit goes through execCommand, which fires our oninput -> stored_text stays synced. Verified against the verbatim editAttention from the shipped frontend: whole-word weighting, existing-weight decrement, and no-selection word expansion all round-trip; plain keys stay stopped. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+11
-2
@@ -170,8 +170,17 @@ function setupTextGateNode(node) {
|
|||||||
const area = document.createElement("textarea");
|
const area = document.createElement("textarea");
|
||||||
area.className = "tgate-area";
|
area.className = "tgate-area";
|
||||||
area.placeholder = "waiting for a run…";
|
area.placeholder = "waiting for a run…";
|
||||||
// don't let typing/space toggle node selection or graph shortcuts
|
// Stop keys from reaching litegraph (so typing/space can't toggle node
|
||||||
area.onkeydown = (e) => e.stopPropagation();
|
// selection or fire canvas shortcuts) — EXCEPT ComfyUI's prompt-weighting
|
||||||
|
// shortcut (Ctrl/Cmd+↑/↓). That handler is a global `window` keydown listener
|
||||||
|
// that wraps the selection in (token:weight); a blanket stopPropagation here
|
||||||
|
// kept it from ever bubbling up, so weighting didn't work in this editor.
|
||||||
|
// Its execCommand edit fires our oninput, so the weighted text still syncs.
|
||||||
|
area.onkeydown = (e) => {
|
||||||
|
const isWeight = (e.ctrlKey || e.metaKey) &&
|
||||||
|
(e.key === "ArrowUp" || e.key === "ArrowDown");
|
||||||
|
if (!isWeight) e.stopPropagation();
|
||||||
|
};
|
||||||
// keep the hidden stored_text widget mirrored so edits persist + reach run()
|
// keep the hidden stored_text widget mirrored so edits persist + reach run()
|
||||||
area.oninput = () => syncStored(node);
|
area.oninput = () => syncStored(node);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user