From 83f008de1ff67fc73b9f832a4f04a2b0c3dfb797 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 24 Dec 2025 11:43:43 +0800 Subject: [PATCH] Correctly handle setting textContent to empty for DocFrag and Element Fixes an [non-critical] error on old.reddit.com --- .../tests/document_fragment/document_fragment.html | 13 +++++++++++++ src/browser/tests/element/element.html | 13 +++++++++++++ src/browser/webapi/Node.zig | 14 ++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/browser/tests/document_fragment/document_fragment.html b/src/browser/tests/document_fragment/document_fragment.html index 663d483f..cda2f85d 100644 --- a/src/browser/tests/document_fragment/document_fragment.html +++ b/src/browser/tests/document_fragment/document_fragment.html @@ -176,3 +176,16 @@ testing.expectEqual("Nested content", clonedInner.textContent); } + + diff --git a/src/browser/tests/element/element.html b/src/browser/tests/element/element.html index 2a7adbaf..84044ecd 100644 --- a/src/browser/tests/element/element.html +++ b/src/browser/tests/element/element.html @@ -153,3 +153,16 @@ testing.expectEqual(d, parent.childNodes[3]); } + + diff --git a/src/browser/webapi/Node.zig b/src/browser/webapi/Node.zig index 1149ef44..47ef3db9 100644 --- a/src/browser/webapi/Node.zig +++ b/src/browser/webapi/Node.zig @@ -269,11 +269,21 @@ pub fn getTextContentAlloc(self: *Node, allocator: Allocator) error{WriteFailed} pub fn setTextContent(self: *Node, data: []const u8, page: *Page) !void { switch (self._type) { - .element => |el| return el.replaceChildren(&.{.{ .text = data }}, page), + .element => |el| { + if (data.len == 0) { + return el.replaceChildren(&.{}, page); + } + return el.replaceChildren(&.{.{ .text = data }}, page); + }, .cdata => |c| c._data = try page.arena.dupe(u8, data), .document => {}, .document_type => {}, - .document_fragment => |frag| return frag.replaceChildren(&.{.{ .text = data }}, page), + .document_fragment => |frag| { + if (data.len == 0) { + return frag.replaceChildren(&.{}, page); + } + return frag.replaceChildren(&.{.{ .text = data }}, page); + }, .attribute => |attr| return attr.setValue(data, page), } }