diff --git a/src/browser/dump.zig b/src/browser/dump.zig
index b8cc01fe6..32a8261fd 100644
--- a/src/browser/dump.zig
+++ b/src/browser/dump.zig
@@ -89,7 +89,7 @@ fn rootUncapped(doc: *Node.Document, opts: Opts, writer: *std.Io.Writer, frame:
if (opts.with_base) {
const parent = if (html_doc.getHead()) |head| head.asNode() else doc.asNode();
const base = try doc.createElement("base", null, frame);
- try base.setAttributeSafe(comptime .wrap("base"), .wrap(frame.base()), frame);
+ try base.setAttributeSafe(comptime .wrap("href"), .wrap(frame.base()), frame);
_ = try parent.insertBefore(base.asNode(), parent.firstChild(), frame);
}
}
@@ -348,13 +348,17 @@ fn dumpSlotContent(slot: *Slot, opts: Opts, writer: *std.Io.Writer, frame: *Fram
}
}
-fn isVoidElement(el: *const Node.Element) bool {
- return switch (el._type) {
- .html => switch (el.subtype(Node.Element.Html)._type) {
- .br, .hr, .img, .input, .link, .meta => true,
- else => false,
+fn isVoidElement(el: *Node.Element) bool {
+ return switch (el.getTag()) {
+ .area, .base, .br, .col, .embed, .hr, .img, .input, .link, .meta, .param, .source, .track => true,
+ .unknown => {
+ const unknown = el.as(Node.Element.Html.Unknown);
+ if (unknown._tag_name.eql(comptime .wrap("wbr"))) {
+ return true;
+ }
+ return false;
},
- .svg => false,
+ else => false,
};
}
@@ -494,10 +498,29 @@ test "dump: default dumps the whole document" {
test "dump: with_base injects a
secret
visible & well
+ \\secret
visible & well
); } +test "dump: void elements have no end tag" { + const frame = try testing.createFrame(); + defer testing.test_session.closeAllPages(); + + const doc = frame.window._document; + const div = try doc.createElement("div", null, frame); + try Frame.parse.htmlAsChildren(frame, div.asNode(), + \\