mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
add HTML Template's content attribute
This commit is contained in:
@@ -58,6 +58,8 @@ active_element: ?*parser.Element = null,
|
|||||||
// default (by returning selectedIndex == 0).
|
// default (by returning selectedIndex == 0).
|
||||||
explicit_index_set: bool = false,
|
explicit_index_set: bool = false,
|
||||||
|
|
||||||
|
template_content: ?*parser.DocumentFragment = null,
|
||||||
|
|
||||||
const ReadyState = enum {
|
const ReadyState = enum {
|
||||||
loading,
|
loading,
|
||||||
interactive,
|
interactive,
|
||||||
|
|||||||
@@ -71,4 +71,17 @@ test "Browser.DOM.DocumentFragment" {
|
|||||||
.{ "dc1.isEqualNode(dc1)", "true" },
|
.{ "dc1.isEqualNode(dc1)", "true" },
|
||||||
.{ "dc1.isEqualNode(dc2)", "true" },
|
.{ "dc1.isEqualNode(dc2)", "true" },
|
||||||
}, .{});
|
}, .{});
|
||||||
|
|
||||||
|
try runner.testCases(&.{
|
||||||
|
.{ "let f = document.createDocumentFragment()", null },
|
||||||
|
.{ "let d = document.createElement('div');", null },
|
||||||
|
.{ "d.id = 'x';", null },
|
||||||
|
.{ "document.getElementById('x') == null;", "true" },
|
||||||
|
|
||||||
|
.{ "f.append(d);", null },
|
||||||
|
.{ "document.getElementById('x') == null;", "true" },
|
||||||
|
|
||||||
|
.{ "document.getElementsByTagName('body')[0].append(f.cloneNode(true));", null },
|
||||||
|
.{ "document.getElementById('x') != null;", "true" },
|
||||||
|
}, .{});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1265,6 +1265,16 @@ pub const HTMLTemplateElement = struct {
|
|||||||
pub fn constructor(page: *Page, js_this: Env.JsThis) !*parser.Element {
|
pub fn constructor(page: *Page, js_this: Env.JsThis) !*parser.Element {
|
||||||
return constructHtmlElement(page, js_this);
|
return constructHtmlElement(page, js_this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_content(self: *parser.Template, page: *Page) !*parser.DocumentFragment {
|
||||||
|
const state = try page.getOrCreateNodeState(@alignCast(@ptrCast(self)));
|
||||||
|
if (state.template_content) |tc| {
|
||||||
|
return tc;
|
||||||
|
}
|
||||||
|
const tc = try parser.documentCreateDocumentFragment(@ptrCast(page.window.document));
|
||||||
|
state.template_content = tc;
|
||||||
|
return tc;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const HTMLTextAreaElement = struct {
|
pub const HTMLTextAreaElement = struct {
|
||||||
@@ -1550,7 +1560,8 @@ test "Browser.HTML.Element" {
|
|||||||
.{ "document.activeElement === focused", "true" },
|
.{ "document.activeElement === focused", "true" },
|
||||||
}, .{});
|
}, .{});
|
||||||
}
|
}
|
||||||
test "Browser.HTML.HtmlInputElement.propeties" {
|
|
||||||
|
test "Browser.HTML.HtmlInputElement.properties" {
|
||||||
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .url = "https://lightpanda.io/noslashattheend" });
|
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .url = "https://lightpanda.io/noslashattheend" });
|
||||||
defer runner.deinit();
|
defer runner.deinit();
|
||||||
var alloc = std.heap.ArenaAllocator.init(runner.app.allocator);
|
var alloc = std.heap.ArenaAllocator.init(runner.app.allocator);
|
||||||
@@ -1634,7 +1645,8 @@ test "Browser.HTML.HtmlInputElement.propeties" {
|
|||||||
.{ "input_value.value", "mango" }, // Still mango
|
.{ "input_value.value", "mango" }, // Still mango
|
||||||
}, .{});
|
}, .{});
|
||||||
}
|
}
|
||||||
test "Browser.HTML.HtmlInputElement.propeties.form" {
|
|
||||||
|
test "Browser.HTML.HtmlInputElement.properties.form" {
|
||||||
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html =
|
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html =
|
||||||
\\ <form action="test.php" target="_blank">
|
\\ <form action="test.php" target="_blank">
|
||||||
\\ <p>
|
\\ <p>
|
||||||
@@ -1652,6 +1664,21 @@ test "Browser.HTML.HtmlInputElement.propeties.form" {
|
|||||||
}, .{});
|
}, .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "Browser.HTML.HTMLTemplateElement" {
|
||||||
|
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html = "<div id=c></div>" });
|
||||||
|
defer runner.deinit();
|
||||||
|
|
||||||
|
try runner.testCases(&.{
|
||||||
|
.{ "let t = document.createElement('template')", null },
|
||||||
|
.{ "let d = document.createElement('div')", null },
|
||||||
|
.{ "d.id = 'abc'", null },
|
||||||
|
.{ "t.content.append(d)", null },
|
||||||
|
.{ "document.getElementById('abc')", "null" },
|
||||||
|
.{ "document.getElementById('c').appendChild(t.content.cloneNode(true))", null },
|
||||||
|
.{ "document.getElementById('abc').id", "abc" },
|
||||||
|
}, .{});
|
||||||
|
}
|
||||||
|
|
||||||
const Check = struct {
|
const Check = struct {
|
||||||
input: []const u8,
|
input: []const u8,
|
||||||
expected: ?[]const u8 = null, // Needed when input != expected
|
expected: ?[]const u8 = null, // Needed when input != expected
|
||||||
|
|||||||
Reference in New Issue
Block a user