From 82148da5f6d6b7754dcdc6fd0bceb39a4da3b678 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 7 Dec 2023 17:31:04 +0100 Subject: [PATCH] dom: implement document.adoptNode --- src/dom/document.zig | 10 ++++++++++ src/netsurf.zig | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/dom/document.zig b/src/dom/document.zig index 48f827f7..8d9da356 100644 --- a/src/dom/document.zig +++ b/src/dom/document.zig @@ -149,6 +149,10 @@ pub const Document = struct { return try parser.documentImportNode(self, node, deep orelse false); } + pub fn _adoptNode(self: *parser.Document, node: *parser.Node) !*parser.Node { + return try parser.documentAdoptNode(self, node); + } + pub fn deinit(_: *parser.Document, _: std.mem.Allocator) void {} }; @@ -273,6 +277,12 @@ pub fn testExecFn( }; try checkCases(js_env, &importNode); + var adoptNode = [_]Case{ + .{ .src = "let nadop = document.getElementById('content')", .ex = "undefined" }, + .{ .src = "document.adoptNode(nadop)", .ex = "[object Node]" }, + }; + try checkCases(js_env, &adoptNode); + const tags = comptime parser.Tag.all(); comptime var createElements: [(tags.len) * 2]Case = undefined; inline for (tags, 0..) |tag, i| { diff --git a/src/netsurf.zig b/src/netsurf.zig index 439c0478..d79c2d51 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -1184,6 +1184,14 @@ pub inline fn documentImportNode(doc: *Document, node: *Node, deep: bool) !*Node return @as(*Node, @ptrCast(res)); } +pub inline fn documentAdoptNode(doc: *Document, node: *Node) !*Node { + var res: NodeExternal = undefined; + const nodeext = toNodeExternal(Node, node); + const err = documentVtable(doc).dom_document_adopt_node.?(doc, nodeext, &res); + try DOMErr(err); + return @as(*Node, @ptrCast(res)); +} + // DocumentHTML pub const DocumentHTML = c.dom_html_document;