diff --git a/src/dom/node.zig b/src/dom/node.zig index c2b65100..6a7e92b7 100644 --- a/src/dom/node.zig +++ b/src/dom/node.zig @@ -141,6 +141,10 @@ pub const Node = struct { _ = self; @panic("Not implemented node.compareDocumentPosition()"); } + + pub fn _contains(self: *parser.Node, other: *parser.Node) bool { + return parser.nodeContains(self, other); + } }; pub const Types = generate.Tuple(.{ @@ -275,4 +279,10 @@ pub fn testExecFn( .{ .src = "clone_deep.firstChild.nodeName === '#text'", .ex = "true" }, }; try checkCases(js_env, &node_clone); + + var node_contains = [_]Case{ + .{ .src = "link.contains(text)", .ex = "true" }, + .{ .src = "text.contains(link)", .ex = "false" }, + }; + try checkCases(js_env, &node_contains); } diff --git a/src/netsurf.zig b/src/netsurf.zig index 705c47b9..320cbf32 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -346,6 +346,12 @@ pub fn nodeCloneNode(node: *Node, is_deep: bool) *Node { return res.?; } +pub fn nodeContains(node: *Node, other: *Node) bool { + var res: bool = undefined; + _ = c._dom_node_contains(node, other, &res); + return res; +} + // CharacterData pub const CharacterData = c.dom_characterdata;