Skip to content

Commit 487aaff

Browse files
committed
dom: implement innerText
1 parent 8f7a8c0 commit 487aaff

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/html/elements.zig

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const checkCases = jsruntime.test_utils.checkCases;
2626

2727
const Element = @import("../dom/element.zig").Element;
2828
const URL = @import("../url/url.zig").URL;
29+
const Node = @import("../dom/node.zig").Node;
2930

3031
// HTMLElement interfaces
3132
pub const Interfaces = .{
@@ -117,6 +118,25 @@ pub const HTMLElement = struct {
117118
pub fn get_style(_: *parser.ElementHTML) CSSProperties {
118119
return .{};
119120
}
121+
122+
pub fn get_innerText(e: *parser.ElementHTML) ![]const u8 {
123+
const n = @as(*parser.Node, @ptrCast(e));
124+
return try parser.nodeTextContent(n) orelse "";
125+
}
126+
127+
pub fn set_innerText(e: *parser.ElementHTML, s: []const u8) !void {
128+
const n = @as(*parser.Node, @ptrCast(e));
129+
130+
// create text node.
131+
const doc = try parser.nodeOwnerDocument(n) orelse return error.NoDocument;
132+
const t = try parser.documentCreateTextNode(doc, s);
133+
134+
// remove existing children.
135+
try Node.removeChildren(n);
136+
137+
// attach the text node.
138+
_ = try parser.nodeAppendChild(n, @as(*parser.Node, @ptrCast(t)));
139+
}
120140
};
121141

122142
// Deprecated HTMLElements in Chrome (2023/03/15)
@@ -1068,4 +1088,12 @@ pub fn testExecFn(
10681088
.{ .src = "script.async", .ex = "false" },
10691089
};
10701090
try checkCases(js_env, &script);
1091+
1092+
var innertext = [_]Case{
1093+
.{ .src = "const backup = document.getElementById('content')", .ex = "undefined" },
1094+
.{ .src = "document.getElementById('content').innerText = 'foo';", .ex = "foo" },
1095+
.{ .src = "document.getElementById('content').innerText", .ex = "foo" },
1096+
.{ .src = "document.getElementById('content').innerHTML = backup; true;", .ex = "true" },
1097+
};
1098+
try checkCases(js_env, &innertext);
10711099
}

0 commit comments

Comments
 (0)