Reflect source width/height as unsigned long per spec

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Karl Seguin
2026-06-12 18:29:46 +08:00
parent 7835f133fe
commit 67f947f606
2 changed files with 23 additions and 16 deletions

View File

@@ -13,8 +13,8 @@
testing.expectEqual('100vw', s1.sizes);
testing.expectEqual('(min-width: 600px)', s1.media);
testing.expectEqual('video/webm', s1.type);
testing.expectEqual('640', s1.width);
testing.expectEqual('480', s1.height);
testing.expectEqual(640, s1.width);
testing.expectEqual(480, s1.height);
const s2 = document.getElementById('s2');
testing.expectEqual('', s2.src);
@@ -22,8 +22,8 @@
testing.expectEqual('', s2.sizes);
testing.expectEqual('', s2.media);
testing.expectEqual('', s2.type);
testing.expectEqual('', s2.width);
testing.expectEqual('', s2.height);
testing.expectEqual(0, s2.width);
testing.expectEqual(0, s2.height);
}
</script>
@@ -51,15 +51,17 @@
s.setAttribute('type', 'image/svg+xml');
testing.expectEqual('image/svg+xml', s.type);
s.width = '320';
s.width = 320;
testing.expectEqual('320', s.getAttribute('width'));
s.setAttribute('width', '160');
testing.expectEqual('160', s.width);
testing.expectEqual(160, s.width);
s.setAttribute('width', 'not-a-number');
testing.expectEqual(0, s.width);
s.height = '240';
s.height = 240;
testing.expectEqual('240', s.getAttribute('height'));
s.setAttribute('height', '120');
testing.expectEqual('120', s.height);
testing.expectEqual(120, s.height);
}
</script>

View File

@@ -1,3 +1,4 @@
const std = @import("std");
const js = @import("../../../js/js.zig");
const Frame = @import("../../../Frame.zig");
const Node = @import("../../Node.zig");
@@ -63,20 +64,24 @@ pub fn setType(self: *Source, value: []const u8, frame: *Frame) !void {
try self.asElement().setAttributeSafe(comptime .wrap("type"), .wrap(value), frame);
}
pub fn getWidth(self: *const Source) []const u8 {
return self.asConstElement().getAttributeSafe(comptime .wrap("width")) orelse "";
pub fn getWidth(self: *const Source) u32 {
const attr = self.asConstElement().getAttributeSafe(comptime .wrap("width")) orelse return 0;
return std.fmt.parseUnsigned(u32, attr, 10) catch 0;
}
pub fn setWidth(self: *Source, value: []const u8, frame: *Frame) !void {
try self.asElement().setAttributeSafe(comptime .wrap("width"), .wrap(value), frame);
pub fn setWidth(self: *Source, value: u32, frame: *Frame) !void {
const str = try std.fmt.allocPrint(frame.call_arena, "{d}", .{value});
try self.asElement().setAttributeSafe(comptime .wrap("width"), .wrap(str), frame);
}
pub fn getHeight(self: *const Source) []const u8 {
return self.asConstElement().getAttributeSafe(comptime .wrap("height")) orelse "";
pub fn getHeight(self: *const Source) u32 {
const attr = self.asConstElement().getAttributeSafe(comptime .wrap("height")) orelse return 0;
return std.fmt.parseUnsigned(u32, attr, 10) catch 0;
}
pub fn setHeight(self: *Source, value: []const u8, frame: *Frame) !void {
try self.asElement().setAttributeSafe(comptime .wrap("height"), .wrap(value), frame);
pub fn setHeight(self: *Source, value: u32, frame: *Frame) !void {
const str = try std.fmt.allocPrint(frame.call_arena, "{d}", .{value});
try self.asElement().setAttributeSafe(comptime .wrap("height"), .wrap(str), frame);
}
pub const JsApi = struct {