diff --git a/src/browser/tests/element/rel_list.html b/src/browser/tests/element/rel_list.html index 28b231753..40ec1e686 100644 --- a/src/browser/tests/element/rel_list.html +++ b/src/browser/tests/element/rel_list.html @@ -21,3 +21,32 @@ testing.expectError('TypeError', () => $('#d1').classList.supports('foo')); } + + + + + + + + diff --git a/src/browser/webapi/element/html/Anchor.zig b/src/browser/webapi/element/html/Anchor.zig index 805b50619..7bc96f408 100644 --- a/src/browser/webapi/element/html/Anchor.zig +++ b/src/browser/webapi/element/html/Anchor.zig @@ -248,7 +248,7 @@ pub const JsApi = struct { pub const rel = reflect.string("rel"); pub const @"type" = reflect.string("type"); pub const text = bridge.accessor(Anchor.getText, Anchor.setText, .{ .ce_reactions = true }); - pub const relList = bridge.accessor(_getRelList, null, .{ .null_as_undefined = true }); + pub const relList = bridge.accessor(_getRelList, _setRelList, .{ .null_as_undefined = true, .ce_reactions = true }); pub const toString = bridge.function(Anchor.getHref, .{}); fn _getRelList(self: *Anchor, frame: *Frame) !?*@import("../../collections.zig").DOMTokenList { @@ -260,6 +260,11 @@ pub const JsApi = struct { } return element.getRelList(frame); } + + fn _setRelList(self: *Anchor, value: lp.String, frame: *Frame) !void { + const list = try _getRelList(self, frame) orelse return; + try list.setValue(value, frame); + } }; const testing = @import("../../../../testing.zig"); diff --git a/src/browser/webapi/element/html/Area.zig b/src/browser/webapi/element/html/Area.zig index 24c86e2a1..fb8013527 100644 --- a/src/browser/webapi/element/html/Area.zig +++ b/src/browser/webapi/element/html/Area.zig @@ -26,6 +26,7 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const HtmlElement = @import("../Html.zig"); +const String = lp.String; const Area = @This(); pub const Proto = HtmlElement; @@ -197,6 +198,11 @@ pub fn getRelList(self: *Area, frame: *Frame) !?*DOMTokenList { return element.getRelList(frame); } +fn setRelList(self: *Area, value: String, frame: *Frame) !void { + const list = try self.getRelList(frame) orelse return; + try list.setValue(value, frame); +} + fn getResolvedHref(self: *Area, frame: *Frame) !?[:0]const u8 { const href = self.asElement().getAttributeInterned("href") orelse return null; if (href.len == 0) { @@ -244,7 +250,7 @@ pub const JsApi = struct { pub const rel = reflect.string("rel"); pub const referrerPolicy = reflect.referrerPolicy(); pub const toString = bridge.function(Area.getHref, .{}); - pub const relList = bridge.accessor(Area.getRelList, null, .{ .null_as_undefined = true }); + pub const relList = bridge.accessor(Area.getRelList, Area.setRelList, .{ .null_as_undefined = true, .ce_reactions = true }); }; const testing = @import("../../../../testing.zig"); diff --git a/src/browser/webapi/element/html/Link.zig b/src/browser/webapi/element/html/Link.zig index 161fbf0c6..684c03c33 100644 --- a/src/browser/webapi/element/html/Link.zig +++ b/src/browser/webapi/element/html/Link.zig @@ -28,6 +28,7 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const HtmlElement = @import("../Html.zig"); +const String = lp.String; const Link = @This(); pub const Proto = HtmlElement; @@ -91,6 +92,11 @@ fn getSizes(self: *Link, frame: *Frame) !?*DOMTokenList { return element.getTokenList(.sizes, frame); } +fn setSizes(self: *Link, value: String, frame: *Frame) !void { + const list = try self.getSizes(frame) orelse return; + try list.setValue(value, frame); +} + pub fn getRelList(self: *Link, frame: *Frame) !?*DOMTokenList { const element = self.asElement(); // relList is only valid for HTML elements, not SVG or MathML @@ -100,6 +106,11 @@ pub fn getRelList(self: *Link, frame: *Frame) !?*DOMTokenList { return element.getRelList(frame); } +fn setRelList(self: *Link, value: String, frame: *Frame) !void { + const list = try self.getRelList(frame) orelse return; + try list.setValue(value, frame); +} + pub fn linkAddedCallback(self: *Link, frame: *Frame) !void { // if we're planning on navigating to another frame, don't trigger load event. if (frame.isGoingAway()) { @@ -176,8 +187,8 @@ pub const JsApi = struct { pub const @"type" = reflect.string("type"); pub const rev = reflect.string("rev"); pub const target = reflect.string("target"); - pub const relList = bridge.accessor(Link.getRelList, null, .{ .null_as_undefined = true }); - pub const sizes = bridge.accessor(Link.getSizes, null, .{ .null_as_undefined = true }); + pub const relList = bridge.accessor(Link.getRelList, Link.setRelList, .{ .null_as_undefined = true, .ce_reactions = true }); + pub const sizes = bridge.accessor(Link.getSizes, Link.setSizes, .{ .null_as_undefined = true, .ce_reactions = true }); }; // Parser-created elements are void (no closing tag) so they never diff --git a/src/browser/webapi/element/html/Output.zig b/src/browser/webapi/element/html/Output.zig index 6a49962e9..8621a65fc 100644 --- a/src/browser/webapi/element/html/Output.zig +++ b/src/browser/webapi/element/html/Output.zig @@ -27,6 +27,7 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const HtmlElement = @import("../Html.zig"); +const String = lp.String; const Output = @This(); pub const Proto = HtmlElement; @@ -53,6 +54,11 @@ fn getHtmlFor(self: *Output, frame: *Frame) !?*DOMTokenList { return element.getTokenList(.@"for", frame); } +fn setHtmlFor(self: *Output, value: String, frame: *Frame) !void { + const list = try self.getHtmlFor(frame) orelse return; + try list.setValue(value, frame); +} + pub const JsApi = struct { pub const bridge = js.Bridge(Output); @@ -66,5 +72,5 @@ pub const JsApi = struct { pub const name = reflect.string("name"); pub const labels = bridge.accessor(Output.getLabels, null, .{}); - pub const htmlFor = bridge.accessor(Output.getHtmlFor, null, .{ .null_as_undefined = true }); + pub const htmlFor = bridge.accessor(Output.getHtmlFor, Output.setHtmlFor, .{ .null_as_undefined = true, .ce_reactions = true }); }; diff --git a/src/browser/webapi/element/svg/A.zig b/src/browser/webapi/element/svg/A.zig index cb7009bf4..c6712d2c8 100644 --- a/src/browser/webapi/element/svg/A.zig +++ b/src/browser/webapi/element/svg/A.zig @@ -28,6 +28,7 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const Graphics = @import("Graphics.zig"); +const String = lp.String; const A = @This(); pub const Proto = Graphics; @@ -45,6 +46,11 @@ pub fn getRelList(self: *A, frame: *Frame) !*DOMTokenList { return self.asElement().getRelList(frame); } +fn setRelList(self: *A, value: String, frame: *Frame) !void { + const list = try self.getRelList(frame); + try list.setValue(value, frame); +} + pub const JsApi = struct { pub const bridge = js.Bridge(A); @@ -59,5 +65,5 @@ pub const JsApi = struct { return AnimatedString.getOrCreate(self.asElement(), .href, frame); } - pub const relList = bridge.accessor(A.getRelList, null, .{}); + pub const relList = bridge.accessor(A.getRelList, A.setRelList, .{ .ce_reactions = true }); };