Skip to content

Commit 3a4bd00

Browse files
committed
Ignore dead keys
Submit form on "Enter" within text input. Convert "Enter" to "\n" in textarea.
1 parent effd07d commit 3a4bd00

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
@@ -647,26 +647,38 @@ pub const Page = struct {
647647
};
648648
}
649649

650-
fn _keydownCallback(page: *Page, event: *parser.Event) !void {
651-
const kbe: *parser.KeyboardEvent = @ptrCast(event);
650+
fn _keydownCallback(self: *Page, event: *parser.Event) !void {
652651
const target = (try parser.eventTarget(event)) orelse return;
653652
const node = parser.eventTargetToNode(target);
654653
const tag = (try parser.nodeHTMLGetTagType(node)) orelse return;
654+
655+
const kbe: *parser.KeyboardEvent = @ptrCast(event);
656+
var new_key = try parser.keyboardEventGetKey(kbe);
657+
if (std.mem.eql(u8, new_key, "Dead")) {
658+
return;
659+
}
660+
655661
switch (tag) {
656662
.input => {
657663
const element: *parser.Element = @ptrCast(node);
658664
const input_type = (try parser.elementGetAttribute(element, "type")) orelse "text";
659665
if (std.mem.eql(u8, input_type, "text")) {
666+
if (std.mem.eql(u8, new_key, "Enter")) {
667+
const form = (try self.formForElement(element)) orelse return;
668+
return self.submitForm(@ptrCast(form), null);
669+
}
670+
660671
const value = try parser.inputGetValue(@ptrCast(element));
661-
const new_key = try parser.keyboardEventGetKey(kbe);
662-
const new_value = try std.mem.concat(page.arena, u8, &.{ value, new_key });
672+
const new_value = try std.mem.concat(self.arena, u8, &.{ value, new_key });
663673
try parser.inputSetValue(@ptrCast(element), new_value);
664674
}
665675
},
666676
.textarea => {
667677
const value = try parser.textareaGetValue(@ptrCast(node));
668-
const new_key = try parser.keyboardEventGetKey(kbe);
669-
const new_value = try std.mem.concat(page.arena, u8, &.{ value, new_key });
678+
if (std.mem.eql(u8, new_key, "Enter")) {
679+
new_key = "\n";
680+
}
681+
const new_value = try std.mem.concat(self.arena, u8, &.{ value, new_key });
670682
try parser.textareaSetValue(@ptrCast(node), new_value);
671683
},
672684
else => {},
@@ -734,7 +746,6 @@ pub const Page = struct {
734746
} else {
735747
action = try URL.concatQueryString(transfer_arena, action, buf.items);
736748
}
737-
738749
try self.navigateFromWebAPI(action, opts);
739750
}
740751

0 commit comments

Comments
 (0)