mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-12-16 16:28:58 +00:00
node: textContent must ignore comments for elements
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<script src="../testing.js"></script>
|
<script src="../testing.js"></script>
|
||||||
<div id=id1>d1 <p>hello</p></div>
|
<div id=id1>d1 <p>hello</p></div>
|
||||||
|
<div id=id2>
|
||||||
|
<style>h1 { font-size: 1em; }</style>
|
||||||
|
<!-- this is a comment -->
|
||||||
|
This is a <br>
|
||||||
|
text
|
||||||
|
</div>
|
||||||
|
|
||||||
<script id=element>
|
<script id=element>
|
||||||
const div = $('#id1');
|
const div = $('#id1');
|
||||||
@@ -8,6 +14,9 @@
|
|||||||
|
|
||||||
div.textContent = 'world <p>!</p>';
|
div.textContent = 'world <p>!</p>';
|
||||||
testing.expectEqual('world <p>!</p>', div.textContent);
|
testing.expectEqual('world <p>!</p>', div.textContent);
|
||||||
|
|
||||||
|
const div2 = $('#id2');
|
||||||
|
testing.expectEqual("\n h1 { font-size: 1em; }\n \n This is a \n text\n", div2.textContent);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script id=document>
|
<script id=document>
|
||||||
@@ -28,8 +37,8 @@
|
|||||||
const attr = div.getAttributeNode('id');
|
const attr = div.getAttributeNode('id');
|
||||||
testing.expectEqual('id1', attr.value);
|
testing.expectEqual('id1', attr.value);
|
||||||
testing.expectEqual('id1', attr.textContent);
|
testing.expectEqual('id1', attr.textContent);
|
||||||
attr.textContent = 'id2';
|
attr.textContent = 'attr2';
|
||||||
testing.expectEqual('id2', attr.value);
|
testing.expectEqual('attr2', attr.value);
|
||||||
testing.expectEqual('id2', attr.textContent);
|
testing.expectEqual('attr2', attr.textContent);
|
||||||
testing.expectEqual(div, $('#id2'));
|
testing.expectEqual(div, $('#attr2'));
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -171,7 +171,20 @@ pub fn childNodes(self: *const Node, page: *Page) !*collections.ChildNodes {
|
|||||||
|
|
||||||
pub fn getTextContent(self: *Node, writer: *std.Io.Writer) error{WriteFailed}!void {
|
pub fn getTextContent(self: *Node, writer: *std.Io.Writer) error{WriteFailed}!void {
|
||||||
switch (self._type) {
|
switch (self._type) {
|
||||||
.element => |el| return el.getInnerText(writer),
|
.element => {
|
||||||
|
var it = self.childrenIterator();
|
||||||
|
while (it.next()) |child| {
|
||||||
|
// ignore comments and TODO processing instructions.
|
||||||
|
switch (child._type) {
|
||||||
|
.cdata => |c| switch (c._type) {
|
||||||
|
.comment => continue,
|
||||||
|
.text => {},
|
||||||
|
},
|
||||||
|
else => {},
|
||||||
|
}
|
||||||
|
try child.getTextContent(writer);
|
||||||
|
}
|
||||||
|
},
|
||||||
.cdata => |c| try writer.writeAll(c.getData()),
|
.cdata => |c| try writer.writeAll(c.getData()),
|
||||||
.document => {},
|
.document => {},
|
||||||
.document_type => {},
|
.document_type => {},
|
||||||
@@ -719,7 +732,7 @@ pub const JsApi = struct {
|
|||||||
switch (self._type) {
|
switch (self._type) {
|
||||||
.element => |el| {
|
.element => |el| {
|
||||||
var buf = std.Io.Writer.Allocating.init(page.call_arena);
|
var buf = std.Io.Writer.Allocating.init(page.call_arena);
|
||||||
try el.getInnerText(&buf.writer);
|
try el.asNode().getTextContent(&buf.writer);
|
||||||
return buf.written();
|
return buf.written();
|
||||||
},
|
},
|
||||||
.cdata => |cdata| return cdata.getData(),
|
.cdata => |cdata| return cdata.getData(),
|
||||||
|
|||||||
Reference in New Issue
Block a user