From 5301f7998965e56486f9a0b772bcac9fcad2c127 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Tue, 10 Mar 2026 20:58:31 +0800 Subject: [PATCH] Add Form.action getter/setter --- src/browser/tests/element/html/form.html | 16 ++++++++++++++++ src/browser/webapi/element/html/Form.zig | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/browser/tests/element/html/form.html b/src/browser/tests/element/html/form.html index f148fae0..f62cb221 100644 --- a/src/browser/tests/element/html/form.html +++ b/src/browser/tests/element/html/form.html @@ -23,6 +23,22 @@ } + +
diff --git a/src/browser/webapi/element/html/Form.zig b/src/browser/webapi/element/html/Form.zig index 9c0fd2ed..c4fdf260 100644 --- a/src/browser/webapi/element/html/Form.zig +++ b/src/browser/webapi/element/html/Form.zig @@ -18,7 +18,9 @@ const std = @import("std"); const js = @import("../../../js/js.zig"); +const URL = @import("../../../URL.zig"); const Page = @import("../../../Page.zig"); + const Node = @import("../../Node.zig"); const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); @@ -85,6 +87,19 @@ pub fn getElements(self: *Form, page: *Page) !*collections.HTMLFormControlsColle }); } +pub fn getAction(self: *Form, page: *Page) ![]const u8 { + const element = self.asElement(); + const action = element.getAttributeSafe(comptime .wrap("action")) orelse return page.url; + if (action.len == 0) { + return page.url; + } + return URL.resolve(page.call_arena, page.base(), action, .{ .encode = true }); +} + +pub fn setAction(self: *Form, value: []const u8, page: *Page) !void { + try self.asElement().setAttributeSafe(comptime .wrap("action"), .wrap(value), page); +} + pub fn getLength(self: *Form, page: *Page) !u32 { const elements = try self.getElements(page); return elements.length(page); @@ -104,6 +119,7 @@ pub const JsApi = struct { pub const name = bridge.accessor(Form.getName, Form.setName, .{}); pub const method = bridge.accessor(Form.getMethod, Form.setMethod, .{}); + pub const action = bridge.accessor(Form.getAction, Form.setAction, .{}); pub const elements = bridge.accessor(Form.getElements, null, .{}); pub const length = bridge.accessor(Form.getLength, null, .{}); pub const submit = bridge.function(Form.submit, .{});