image constructor

This commit is contained in:
sjorsdonkers
2025-05-23 11:37:46 +02:00
parent 0df531a646
commit 7adaa53f42

View File

@@ -563,6 +563,26 @@ pub const HTMLImageElement = struct {
pub const Self = parser.Image;
pub const prototype = *HTMLElement;
pub const subtype = .node;
pub const js_name = "Image";
pub fn constructor(width: ?[]const u8, height: ?[]const u8, state: *const SessionState) !*parser.Image {
const element = try parser.documentCreateElement(parser.documentHTMLToDocument(state.window.document), "img");
if (width) |width_| try parser.elementSetAttribute(element, "width", width_);
if (height) |height_| try parser.elementSetAttribute(element, "height", height_);
return @ptrCast(element);
}
pub fn get_width(self: *parser.Image) !u32 {
const width = try parser.elementGetAttribute(@ptrCast(self), "width") orelse return 0;
return try std.fmt.parseInt(u32, width, 10);
}
pub fn get_height(self: *parser.Image) !u32 {
const width = try parser.elementGetAttribute(@ptrCast(self), "height") orelse return 0;
return try std.fmt.parseInt(u32, width, 10);
}
pub fn get_src(self: *parser.Image) ![]const u8 {
return try parser.elementGetAttribute(@ptrCast(self), "src") orelse return "";
}
};
pub const HTMLInputElement = struct {
@@ -1059,4 +1079,14 @@ test "Browser.HTML.Element" {
.{ "document.getElementById('content').click()", "undefined" },
.{ "click_count", "1" },
}, .{});
try runner.testCases(&.{
.{ "(new Image).width", "0" },
.{ "(new Image).height", "0" },
.{ "(new Image).src", "" },
.{ "(new Image(4)).width", "4" },
.{ "(new Image(4, 6)).height", "6" },
.{ "(new Image).width = 15", "15" },
.{ "(new Image).src = 'abc'", "abc" },
}, .{});
}