Skip to content

Commit 1558aa5

Browse files
committed
Ignore dead keys
Submit form on "Enter" within text input. Convert "Enter" to "\n" in textarea.
1 parent 4b59e49 commit 1558aa5

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/browser/page.zig

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -645,26 +645,38 @@ pub const Page = struct {
645645
};
646646
}
647647

648-
fn _keydownCallback(page: *Page, event: *parser.Event) !void {
649-
const kbe: *parser.KeyboardEvent = @ptrCast(event);
648+
fn _keydownCallback(self: *Page, event: *parser.Event) !void {
650649
const target = (try parser.eventTarget(event)) orelse return;
651650
const node = parser.eventTargetToNode(target);
652651
const tag = (try parser.nodeHTMLGetTagType(node)) orelse return;
652+
653+
const kbe: *parser.KeyboardEvent = @ptrCast(event);
654+
var new_key = try parser.keyboardEventGetKey(kbe);
655+
if (std.mem.eql(u8, new_key, "Dead")) {
656+
return;
657+
}
658+
653659
switch (tag) {
654660
.input => {
655661
const element: *parser.Element = @ptrCast(node);
656662
const input_type = (try parser.elementGetAttribute(element, "type")) orelse "text";
657663
if (std.mem.eql(u8, input_type, "text")) {
664+
if (std.mem.eql(u8, new_key, "Enter")) {
665+
const form = (try self.formForElement(element)) orelse return;
666+
return self.submitForm(@ptrCast(form), null);
667+
}
668+
658669
const value = try parser.inputGetValue(@ptrCast(element));
659-
const new_key = try parser.keyboardEventGetKey(kbe);
660-
const new_value = try std.mem.concat(page.arena, u8, &.{ value, new_key });
670+
const new_value = try std.mem.concat(self.arena, u8, &.{ value, new_key });
661671
try parser.inputSetValue(@ptrCast(element), new_value);
662672
}
663673
},
664674
.textarea => {
665675
const value = try parser.textareaGetValue(@ptrCast(node));
666-
const new_key = try parser.keyboardEventGetKey(kbe);
667-
const new_value = try std.mem.concat(page.arena, u8, &.{ value, new_key });
676+
if (std.mem.eql(u8, new_key, "Enter")) {
677+
new_key = "\n";
678+
}
679+
const new_value = try std.mem.concat(self.arena, u8, &.{ value, new_key });
668680
try parser.textareaSetValue(@ptrCast(node), new_value);
669681
},
670682
else => {},
@@ -728,7 +740,6 @@ pub const Page = struct {
728740
} else {
729741
action = try URL.concatQueryString(transfer_arena, action, buf.items);
730742
}
731-
732743
try self.navigateFromWebAPI(action, opts);
733744
}
734745

0 commit comments

Comments
 (0)