Files
ladybird/Tests/LibWeb/Text/input/UIEvents/KeyEvent-keypress.html
sideshowbarker 738cb24691 LibWeb: Fire keypress event for Enter, Shift+Enter, and Ctrl+Enter keys
For web compat and interop with other engines, this change makes us fire
“keypress” events for the Enter key and for the combination of the Enter
key with the Shift or Ctrl keys — despite the fact the UI Events spec
states at https://w3c.github.io/uievents/#event-type-keypress it must be
fired “if and only if that key normally produces a character value”.

See https://github.com/w3c/uievents/issues/183#issuecomment-448091687
and https://github.com/w3c/uievents/issues/266#issuecomment-1887917756.
2025-01-31 12:07:17 +00:00

43 lines
1.7 KiB
HTML

<input id="input" />
<script src="../include.js"></script>
<script>
test(() => {
let input = document.getElementById("input");
const modifierKeys = ['Alt', 'Control', 'Shift', 'Super', 'NumLock'];
input.addEventListener("keydown", e => {
const activeModifiers = modifierKeys.filter(modifier => e.getModifierState(modifier));
if (activeModifiers.length > 0) {
println(`keydown key=${e.key} charCode=${e.charCode} modifiers=${activeModifiers.join(', ')}`);
} else {
println(`keydown key=${e.key} charCode=${e.charCode}`);
}
});
input.addEventListener("keypress", e => {
const activeModifiers = modifierKeys.filter(modifier => e.getModifierState(modifier));
if (activeModifiers.length > 0) {
println(`keypress key=${e.key} charCode=${e.charCode} modifiers=${activeModifiers.join(', ')}`);
} else {
println(`keypress key=${e.key} charCode=${e.charCode}`);
}
});
internals.sendText(input, "A");
internals.sendKey(input, "LeftShift");
internals.sendText(input, "B");
internals.sendKey(input, "Return");
let modifiers = 1 << 0; // Mod_Alt
internals.sendKey(input, "Return", modifiers);
modifiers = 1 << 1; // Mod_Ctrl
internals.sendKey(input, "Return", modifiers);
modifiers = 1 << 2; // Mod_Shift
internals.sendKey(input, "Return", modifiers);
modifiers = 1 << 3; // Mod_Super
internals.sendKey(input, "Return", modifiers);
modifiers = 1 << 4; // Mod_Keypad
internals.sendKey(input, "Return", modifiers);
});
</script>