Skip to content

Commit d262f01

Browse files
authored
Merge pull request #689 from lightpanda-io/image
new Image constructor
2 parents a98c08c + 5fc9cd7 commit d262f01

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-0
lines changed

src/browser/html/elements.zig

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,52 @@ pub const HTMLImageElement = struct {
563563
pub const Self = parser.Image;
564564
pub const prototype = *HTMLElement;
565565
pub const subtype = .node;
566+
pub const js_name = "Image";
567+
568+
pub fn constructor(width: ?u32, height: ?u32, state: *const SessionState) !*parser.Image {
569+
const element = try parser.documentCreateElement(parser.documentHTMLToDocument(state.window.document), "img");
570+
const image: *parser.Image = @ptrCast(element);
571+
if (width) |width_| try parser.imageSetWidth(image, width_);
572+
if (height) |height_| try parser.imageSetHeight(image, height_);
573+
return image;
574+
}
575+
576+
pub fn get_alt(self: *parser.Image) ![]const u8 {
577+
return try parser.imageGetAlt(self);
578+
}
579+
pub fn set_alt(self: *parser.Image, alt: []const u8) !void {
580+
try parser.imageSetAlt(self, alt);
581+
}
582+
pub fn get_src(self: *parser.Image) ![]const u8 {
583+
return try parser.imageGetSrc(self);
584+
}
585+
pub fn set_src(self: *parser.Image, src: []const u8) !void {
586+
try parser.imageSetSrc(self, src);
587+
}
588+
pub fn get_useMap(self: *parser.Image) ![]const u8 {
589+
return try parser.imageGetUseMap(self);
590+
}
591+
pub fn set_useMap(self: *parser.Image, use_map: []const u8) !void {
592+
try parser.imageSetUseMap(self, use_map);
593+
}
594+
pub fn get_height(self: *parser.Image) !u32 {
595+
return try parser.imageGetHeight(self);
596+
}
597+
pub fn set_height(self: *parser.Image, height: u32) !void {
598+
try parser.imageSetHeight(self, height);
599+
}
600+
pub fn get_width(self: *parser.Image) !u32 {
601+
return try parser.imageGetWidth(self);
602+
}
603+
pub fn set_width(self: *parser.Image, width: u32) !void {
604+
try parser.imageSetWidth(self, width);
605+
}
606+
pub fn get_isMap(self: *parser.Image) !bool {
607+
return try parser.imageGetIsMap(self);
608+
}
609+
pub fn set_isMap(self: *parser.Image, is_map: bool) !void {
610+
try parser.imageSetIsMap(self, is_map);
611+
}
566612
};
567613

568614
pub const HTMLInputElement = struct {
@@ -1059,4 +1105,31 @@ test "Browser.HTML.Element" {
10591105
.{ "document.getElementById('content').click()", "undefined" },
10601106
.{ "click_count", "1" },
10611107
}, .{});
1108+
1109+
// Image
1110+
try runner.testCases(&.{
1111+
// Testing constructors
1112+
.{ "(new Image).width", "0" },
1113+
.{ "(new Image).height", "0" },
1114+
.{ "(new Image(4)).width", "4" },
1115+
.{ "(new Image(4, 6)).height", "6" },
1116+
1117+
// Testing ulong property
1118+
.{ "let fruit = new Image", null },
1119+
.{ "fruit.width", "0" },
1120+
.{ "fruit.width = 5", "5" },
1121+
.{ "fruit.width", "5" },
1122+
.{ "fruit.width = '15'", "15" },
1123+
.{ "fruit.width", "15" },
1124+
.{ "fruit.width = 'apple'", "apple" },
1125+
.{ "fruit.width;", "0" },
1126+
1127+
// Testing string property
1128+
.{ "let lyric = new Image", null },
1129+
.{ "lyric.src", "" },
1130+
.{ "lyric.src = 'okay'", "okay" },
1131+
.{ "lyric.src", "okay" },
1132+
.{ "lyric.src = 15", "15" },
1133+
.{ "lyric.src", "15" },
1134+
}, .{});
10621135
}

src/browser/netsurf.zig

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,3 +2509,84 @@ pub fn htmlCollectionItem(collection: *HTMLCollection, index: u32) !*Node {
25092509
try DOMErr(err);
25102510
return @ptrCast(node.?);
25112511
}
2512+
2513+
const ulongNegativeOne = 4294967295;
2514+
2515+
// Image
2516+
// Image.name is deprecated
2517+
// Image.align is deprecated
2518+
// Image.border is deprecated
2519+
// Image.longDesc is deprecated
2520+
// Image.hspace is deprecated
2521+
// Image.vspace is deprecated
2522+
2523+
pub fn imageGetAlt(image: *Image) ![]const u8 {
2524+
var s_: ?*String = null;
2525+
const err = c.dom_html_image_element_get_alt(image, &s_);
2526+
try DOMErr(err);
2527+
const s = s_ orelse return "";
2528+
return strToData(s);
2529+
}
2530+
pub fn imageSetAlt(image: *Image, alt: []const u8) !void {
2531+
const err = c.dom_html_image_element_set_alt(image, try strFromData(alt));
2532+
try DOMErr(err);
2533+
}
2534+
2535+
pub fn imageGetSrc(image: *Image) ![]const u8 {
2536+
var s_: ?*String = null;
2537+
const err = c.dom_html_image_element_get_src(image, &s_);
2538+
try DOMErr(err);
2539+
const s = s_ orelse return "";
2540+
return strToData(s);
2541+
}
2542+
pub fn imageSetSrc(image: *Image, src: []const u8) !void {
2543+
const err = c.dom_html_image_element_set_src(image, try strFromData(src));
2544+
try DOMErr(err);
2545+
}
2546+
2547+
pub fn imageGetUseMap(image: *Image) ![]const u8 {
2548+
var s_: ?*String = null;
2549+
const err = c.dom_html_image_element_get_use_map(image, &s_);
2550+
try DOMErr(err);
2551+
const s = s_ orelse return "";
2552+
return strToData(s);
2553+
}
2554+
pub fn imageSetUseMap(image: *Image, use_map: []const u8) !void {
2555+
const err = c.dom_html_image_element_set_use_map(image, try strFromData(use_map));
2556+
try DOMErr(err);
2557+
}
2558+
2559+
pub fn imageGetHeight(image: *Image) !u32 {
2560+
var height: u32 = 0;
2561+
const err = c.dom_html_image_element_get_height(image, &height);
2562+
try DOMErr(err);
2563+
if (height == ulongNegativeOne) return 0;
2564+
return height;
2565+
}
2566+
pub fn imageSetHeight(image: *Image, height: u32) !void {
2567+
const err = c.dom_html_image_element_set_height(image, height);
2568+
try DOMErr(err);
2569+
}
2570+
2571+
pub fn imageGetWidth(image: *Image) !u32 {
2572+
var width: u32 = 0;
2573+
const err = c.dom_html_image_element_get_width(image, &width);
2574+
try DOMErr(err);
2575+
if (width == ulongNegativeOne) return 0;
2576+
return width;
2577+
}
2578+
pub fn imageSetWidth(image: *Image, width: u32) !void {
2579+
const err = c.dom_html_image_element_set_width(image, width);
2580+
try DOMErr(err);
2581+
}
2582+
2583+
pub fn imageGetIsMap(image: *Image) !bool {
2584+
var is_map: bool = false;
2585+
const err = c.dom_html_image_element_get_is_map(image, &is_map);
2586+
try DOMErr(err);
2587+
return is_map;
2588+
}
2589+
pub fn imageSetIsMap(image: *Image, is_map: bool) !void {
2590+
const err = c.dom_html_image_element_set_is_map(image, is_map);
2591+
try DOMErr(err);
2592+
}

0 commit comments

Comments
 (0)