mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
Add DocumentFragment getElementById
This commit is contained in:
@@ -83,6 +83,11 @@ pub const DocumentFragment = struct {
|
|||||||
.include_root = false,
|
.include_root = false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn _getElementById(self: *parser.DocumentFragment, id: []const u8) !?ElementUnion {
|
||||||
|
const e = try parser.nodeGetElementById(@alignCast(@ptrCast(self)), id) orelse return null;
|
||||||
|
return try Element.toInterface(e);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const testing = @import("../../testing.zig");
|
const testing = @import("../../testing.zig");
|
||||||
|
|||||||
@@ -44,7 +44,9 @@ const testing = @import("../../testing.zig");
|
|||||||
test "Browser.DOM.ShadowRoot" {
|
test "Browser.DOM.ShadowRoot" {
|
||||||
defer testing.reset();
|
defer testing.reset();
|
||||||
|
|
||||||
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html = "" });
|
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html =
|
||||||
|
\\ <div id=conflict>nope</div>
|
||||||
|
});
|
||||||
defer runner.deinit();
|
defer runner.deinit();
|
||||||
|
|
||||||
try runner.testCases(&.{
|
try runner.testCases(&.{
|
||||||
@@ -70,4 +72,12 @@ test "Browser.DOM.ShadowRoot" {
|
|||||||
.{ "sr2.host == div2", "true" },
|
.{ "sr2.host == div2", "true" },
|
||||||
.{ "div2.shadowRoot", "null" }, // null when attached with 'closed'
|
.{ "div2.shadowRoot", "null" }, // null when attached with 'closed'
|
||||||
}, .{});
|
}, .{});
|
||||||
|
|
||||||
|
try runner.testCases(&.{
|
||||||
|
.{ "sr2.getElementById('conflict')", "null" },
|
||||||
|
.{ "const n1 = document.createElement('div')", null },
|
||||||
|
.{ "n1.id = 'conflict'", null},
|
||||||
|
.{ "sr2.append(n1)", null},
|
||||||
|
.{ "sr2.getElementById('conflict') == n1", "true" },
|
||||||
|
}, .{});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1418,6 +1418,13 @@ pub fn nodeSetEmbedderData(node: *Node, data: *anyopaque) void {
|
|||||||
c._dom_node_set_embedder_data(node, data);
|
c._dom_node_set_embedder_data(node, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn nodeGetElementById(node: *Node, id: []const u8) !?*Element {
|
||||||
|
var el: ?*Element = undefined;
|
||||||
|
const str_id = try strFromData(id);
|
||||||
|
try DOMErr(c._dom_find_element_by_id(node, str_id, &el));
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
|
||||||
// nodeToElement is an helper to convert a node to an element.
|
// nodeToElement is an helper to convert a node to an element.
|
||||||
pub inline fn nodeToElement(node: *Node) *Element {
|
pub inline fn nodeToElement(node: *Node) *Element {
|
||||||
return @as(*Element, @ptrCast(node));
|
return @as(*Element, @ptrCast(node));
|
||||||
|
|||||||
Reference in New Issue
Block a user