From 3ec5cee98cf8a4a3163f33d981721b24da238323 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 7 Dec 2023 17:26:08 +0100 Subject: [PATCH] dom: implement document.importNode --- 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 6a34c01b..48f827f7 100644 --- a/src/dom/document.zig +++ b/src/dom/document.zig @@ -145,6 +145,10 @@ pub const Document = struct { return try parser.documentCreateProcessingInstruction(self, target, data); } + pub fn _importNode(self: *parser.Document, node: *parser.Node, deep: ?bool) !*parser.Node { + return try parser.documentImportNode(self, node, deep orelse false); + } + pub fn deinit(_: *parser.Document, _: std.mem.Allocator) void {} }; @@ -263,6 +267,12 @@ pub fn testExecFn( }; try checkCases(js_env, &createProcessingInstruction); + var importNode = [_]Case{ + .{ .src = "let nimp = document.getElementById('content')", .ex = "undefined" }, + .{ .src = "document.importNode(nimp)", .ex = "[object Node]" }, + }; + try checkCases(js_env, &importNode); + 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 96639ea2..439c0478 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -1176,6 +1176,14 @@ pub inline fn documentCreateProcessingInstruction(doc: *Document, target: []cons return pi.?; } +pub inline fn documentImportNode(doc: *Document, node: *Node, deep: bool) !*Node { + var res: NodeExternal = undefined; + const nodeext = toNodeExternal(Node, node); + const err = documentVtable(doc).dom_document_import_node.?(doc, nodeext, deep, &res); + try DOMErr(err); + return @as(*Node, @ptrCast(res)); +} + // DocumentHTML pub const DocumentHTML = c.dom_html_document;