Fix keyboard shortcuts + trigger filter + sx-on event mapping
1. parse-trigger-spec: strip [condition] from event names, store as "filter" modifier 2. bind-event: native SX filter for key=='X' patterns (extracts key char and checks event.key + not-input guard) 3. bind-event from: modifier: resolve "body"/"document"/"window" to direct DOM references instead of dom-query 4. sx-platform-2.js: global keyboard dispatch — WASM host-callbacks on document/body don't fire, so keyboard triggers with from:body are handled from JS, calling execute-request via K.eval 5. bind-inline-handlers: map afterSwap/beforeRequest to sx: prefix, eval JS bodies via Function constructor Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -398,6 +398,22 @@
|
||||
"children:", islands[j].children.length);
|
||||
}
|
||||
console.log("[sx] boot done");
|
||||
|
||||
// Global keyboard shortcut dispatch — WASM host-callbacks on
|
||||
// document/body don't fire, so handle from:body keyboard
|
||||
// triggers in JS and call execute-request via the SX engine.
|
||||
document.addEventListener("keyup", function(e) {
|
||||
if (e.target && e.target.matches && e.target.matches("input,textarea,select")) return;
|
||||
var sel = '[sx-trigger*="key==\'' + e.key + '\'"]';
|
||||
var els = document.querySelectorAll(sel);
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
var el = els[i];
|
||||
if (!el.id) el.id = "_sx_kbd_" + Math.random().toString(36).slice(2);
|
||||
try {
|
||||
K.eval('(execute-request (dom-query-by-id "' + el.id + '") nil nil)');
|
||||
} catch(err) { console.warn("[sx] keyboard dispatch error:", err); }
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user