From dcb095d9df941a7da5bdbe8ca862fce9965ddbde Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Fri, 1 Dec 2023 16:51:58 +0100 Subject: [PATCH] dom: add element.HasAttributes --- src/dom/element.zig | 5 +++++ src/netsurf.zig | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/dom/element.zig b/src/dom/element.zig index 51f7e80b..2e725102 100644 --- a/src/dom/element.zig +++ b/src/dom/element.zig @@ -27,6 +27,10 @@ pub const Element = struct { return try parser.elementLocalName(self); } + pub fn _hasAttributes(self: *parser.Element) !bool { + return try parser.nodeHasAttributes(parser.elementToNode(self)); + } + pub fn _getAttribute(self: *parser.Element, qname: []const u8) !?[]const u8 { return try parser.elementGetAttribute(self, qname); } @@ -84,6 +88,7 @@ pub fn testExecFn( ) !void { var attribute = [_]Case{ .{ .src = "let a = document.getElementById('content')", .ex = "undefined" }, + .{ .src = "a.hasAttributes()", .ex = "true" }, .{ .src = "a.getAttribute('id')", .ex = "content" }, .{ .src = "a.hasAttribute('foo')", .ex = "false" }, diff --git a/src/netsurf.zig b/src/netsurf.zig index 1c857ad6..b0423032 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -630,6 +630,13 @@ pub fn nodeReplaceChild(node: *Node, new_child: *Node, old_child: *Node) !*Node return res.?; } +pub fn nodeHasAttributes(node: *Node) !bool { + var res: bool = undefined; + const err = nodeVtable(node).dom_node_has_attributes.?(node, &res); + try DOMErr(err); + return res; +} + // nodeToElement is an helper to convert a node to an element. pub inline fn nodeToElement(node: *Node) *Element { return @as(*Element, @ptrCast(node));