diff --git a/src/dom/node.zig b/src/dom/node.zig index 444a505b..26e971e8 100644 --- a/src/dom/node.zig +++ b/src/dom/node.zig @@ -154,6 +154,10 @@ pub const Node = struct { pub fn _hasChildNodes(self: *parser.Node) bool { return parser.nodeHasChildNodes(self); } + + pub fn _insertBefore(self: *parser.Node, new_node: *parser.Node, ref_node: *parser.Node) *parser.Node { + return parser.nodeInsertBefore(self, new_node, ref_node); + } }; pub const Types = generate.Tuple(.{ @@ -300,4 +304,11 @@ pub fn testExecFn( .{ .src = "text.hasChildNodes()", .ex = "false" }, }; try checkCases(js_env, &node_has_child_nodes); + + var node_insert_before = [_]Case{ + .{ .src = "let insertBefore = document.createElement('a')", .ex = "undefined" }, + .{ .src = "link.insertBefore(insertBefore, text) !== undefined", .ex = "true" }, + .{ .src = "link.firstChild.localName === 'a'", .ex = "true" }, + }; + try checkCases(js_env, &node_insert_before); } diff --git a/src/netsurf.zig b/src/netsurf.zig index f0677554..9e9a3070 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -358,6 +358,12 @@ pub fn nodeHasChildNodes(node: *Node) bool { return res; } +pub fn nodeInsertBefore(node: *Node, new_node: *Node, ref_node: *Node) *Node { + var res: ?*Node = undefined; + _ = nodeVtable(node).dom_node_insert_before.?(node, new_node, ref_node, &res); + return res.?; +} + // CharacterData pub const CharacterData = c.dom_characterdata;