From 3b851f889edd28957aeb80c11125ad31f80d622c Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Wed, 3 Jan 2024 14:44:24 +0100 Subject: [PATCH] dom: add Element AttributeNode funcs --- src/dom/element.zig | 26 ++++++++++++++++++++++++++ src/netsurf.zig | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/dom/element.zig b/src/dom/element.zig index f8acfbe9..2c2378f1 100644 --- a/src/dom/element.zig +++ b/src/dom/element.zig @@ -131,6 +131,22 @@ pub const Element = struct { return try parser.elementGetAttributeNode(self, name); } + pub fn _getAttributeNodeNS(self: *parser.Element, ns: []const u8, name: []const u8) !?*parser.Attribute { + return try parser.elementGetAttributeNodeNS(self, ns, name); + } + + pub fn _setAttributeNode(self: *parser.Element, attr: *parser.Attribute) !?*parser.Attribute { + return try parser.elementSetAttributeNode(self, attr); + } + + pub fn _setAttributeNodeNS(self: *parser.Element, attr: *parser.Attribute) !?*parser.Attribute { + return try parser.elementSetAttributeNodeNS(self, attr); + } + + pub fn _removeAttributeNode(self: *parser.Element, attr: *parser.Attribute) !*parser.Attribute { + return try parser.elementRemoveAttributeNode(self, attr); + } + pub fn _getElementsByTagName( self: *parser.Element, alloc: std.mem.Allocator, @@ -370,4 +386,14 @@ pub fn testExecFn( .{ .src = "e.querySelectorAll('*').length", .ex = "4" }, }; try checkCases(js_env, &querySelector); + + var attrNode = [_]Case{ + .{ .src = "let f = document.getElementById('content')", .ex = "undefined" }, + .{ .src = "let ff = document.createAttribute('foo')", .ex = "undefined" }, + .{ .src = "f.setAttributeNode(ff)", .ex = "null" }, + .{ .src = "f.getAttributeNode('foo').name", .ex = "foo" }, + .{ .src = "f.removeAttributeNode(ff).name", .ex = "foo" }, + .{ .src = "f.getAttributeNode('bar')", .ex = "null" }, + }; + try checkCases(js_env, &attrNode); } diff --git a/src/netsurf.zig b/src/netsurf.zig index 9fd658b6..68dce512 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -924,6 +924,39 @@ pub fn elementGetAttributeNode(elem: *Element, name: []const u8) !?*Attribute { return a; } +pub fn elementGetAttributeNodeNS(elem: *Element, ns: []const u8, name: []const u8) !?*Attribute { + var a: ?*Attribute = undefined; + const err = elementVtable(elem).dom_element_get_attribute_node_ns.?( + elem, + try strFromData(ns), + try strFromData(name), + &a, + ); + try DOMErr(err); + return a; +} + +pub fn elementSetAttributeNode(elem: *Element, attr: *Attribute) !?*Attribute { + var a: ?*Attribute = undefined; + const err = elementVtable(elem).dom_element_set_attribute_node.?(elem, attr, &a); + try DOMErr(err); + return a; +} + +pub fn elementSetAttributeNodeNS(elem: *Element, attr: *Attribute) !?*Attribute { + var a: ?*Attribute = undefined; + const err = elementVtable(elem).dom_element_set_attribute_node_ns.?(elem, attr, &a); + try DOMErr(err); + return a; +} + +pub fn elementRemoveAttributeNode(elem: *Element, attr: *Attribute) !*Attribute { + var a: ?*Attribute = undefined; + const err = elementVtable(elem).dom_element_remove_attribute_node.?(elem, attr, &a); + try DOMErr(err); + return a.?; +} + pub fn elementHasClass(elem: *Element, class: []const u8) !bool { var res: bool = undefined; const err = elementVtable(elem).dom_element_has_class.?(