diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index 55fd361a..03db92e2 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -2834,3 +2834,11 @@ pub fn inputSetValue(input: *Input, value: []const u8) !void { const err = c.dom_html_input_element_set_value(input, try strFromData(value)); try DOMErr(err); } + +pub fn buttonGetType(button: *Button) ![]const u8 { + var s_: ?*String = null; + const err = c.dom_html_button_element_get_type(button, &s_); + try DOMErr(err); + const s = s_ orelse return "button"; + return strToData(s); +} diff --git a/src/browser/page.zig b/src/browser/page.zig index 05d65304..2a652c88 100644 --- a/src/browser/page.zig +++ b/src/browser/page.zig @@ -582,14 +582,14 @@ pub const Page = struct { }, .input => { const element: *parser.Element = @ptrCast(node); - const input_type = (try parser.elementGetAttribute(element, "type")) orelse return; + const input_type = try parser.inputGetType(@ptrCast(element)); if (std.ascii.eqlIgnoreCase(input_type, "submit")) { return self.elementSubmitForm(element); } }, .button => { const element: *parser.Element = @ptrCast(node); - const button_type = (try parser.elementGetAttribute(element, "type")) orelse return; + const button_type = try parser.buttonGetType(@ptrCast(element)); if (std.ascii.eqlIgnoreCase(button_type, "submit")) { return self.elementSubmitForm(element); } @@ -661,7 +661,7 @@ pub const Page = struct { switch (tag) { .input => { const element: *parser.Element = @ptrCast(node); - const input_type = (try parser.elementGetAttribute(element, "type")) orelse "text"; + const input_type = try parser.inputGetType(@ptrCast(element)); if (std.mem.eql(u8, input_type, "text")) { if (std.mem.eql(u8, new_key, "Enter")) { const form = (try self.formForElement(element)) orelse return; diff --git a/src/browser/xhr/form_data.zig b/src/browser/xhr/form_data.zig index c5e3f278..485ef647 100644 --- a/src/browser/xhr/form_data.zig +++ b/src/browser/xhr/form_data.zig @@ -137,7 +137,7 @@ fn collectForm(form: *parser.Form, submitter_: ?*parser.ElementHTML, page: *Page const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(element))); switch (tag) { .input => { - const tpe = try parser.elementGetAttribute(element, "type") orelse ""; + const tpe = try parser.inputGetType(@ptrCast(element)); if (std.ascii.eqlIgnoreCase(tpe, "image")) { if (submitter_name_) |submitter_name| { if (std.mem.eql(u8, submitter_name, name)) { @@ -249,7 +249,7 @@ fn getSubmitterName(submitter_: ?*parser.ElementHTML) !?[]const u8 { switch (tag) { .button => return name, .input => { - const tpe = (try parser.elementGetAttribute(element, "type")) orelse ""; + const tpe = try parser.inputGetType(@ptrCast(element)); // only an image type can be a sumbitter if (std.ascii.eqlIgnoreCase(tpe, "image") or std.ascii.eqlIgnoreCase(tpe, "submit")) { return name;