From 018abe0188b2f2a8edf46718de8a4701c6daab6b Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 30 Jan 2025 16:09:19 +0100 Subject: [PATCH] dom: implement outerHTML --- src/dom/element.zig | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/dom/element.zig b/src/dom/element.zig index 15f1d707..030630da 100644 --- a/src/dom/element.zig +++ b/src/dom/element.zig @@ -26,7 +26,7 @@ const checkCases = jsruntime.test_utils.checkCases; const Variadic = jsruntime.Variadic; const collection = @import("html_collection.zig"); -const writeChildren = @import("../browser/dump.zig").writeChildren; +const dump = @import("../browser/dump.zig"); const css = @import("css.zig"); const Node = @import("node.zig").Node; @@ -102,7 +102,17 @@ pub const Element = struct { var buf = std.ArrayList(u8).init(alloc); defer buf.deinit(); - try writeChildren(parser.elementToNode(self), buf.writer()); + try dump.writeChildren(parser.elementToNode(self), buf.writer()); + // TODO express the caller owned the slice. + // https://github.com/lightpanda-io/jsruntime-lib/issues/195 + return buf.toOwnedSlice(); + } + + pub fn get_outerHTML(self: *parser.Element, alloc: std.mem.Allocator) ![]const u8 { + var buf = std.ArrayList(u8).init(alloc); + defer buf.deinit(); + + try dump.writeNode(parser.elementToNode(self), buf.writer()); // TODO express the caller owned the slice. // https://github.com/lightpanda-io/jsruntime-lib/issues/195 return buf.toOwnedSlice(); @@ -470,4 +480,9 @@ pub fn testExecFn( .{ .src = "document.getElementById('para-empty').innerHTML.trim()", .ex = "" }, }; try checkCases(js_env, &innerHTML); + + var outerHTML = [_]Case{ + .{ .src = "document.getElementById('para').outerHTML", .ex = "

And

" }, + }; + try checkCases(js_env, &outerHTML); }