Image: prefer inline_lookup for onload

This commit is contained in:
Halil Durak
2026-01-27 01:27:54 +03:00
parent 3114454687
commit 7ca0225185

View File

@@ -10,7 +10,6 @@ const log = @import("../../../../log.zig");
const Image = @This(); const Image = @This();
_proto: *HtmlElement, _proto: *HtmlElement,
_on_load: ?js.Function.Global = null,
pub fn constructor(w_: ?u32, h_: ?u32, page: *Page) !*Image { pub fn constructor(w_: ?u32, h_: ?u32, page: *Page) !*Image {
const node = try page.createElementNS(.html, "img", null); const node = try page.createElementNS(.html, "img", null);
@@ -37,12 +36,12 @@ pub fn asNode(self: *Image) *Node {
return self.asElement().asNode(); return self.asElement().asNode();
} }
pub fn getOnLoad(self: *const Image) ?js.Function.Global { pub fn getOnLoad(self: *Image, page: *Page) ?js.Function.Global {
return self._on_load; return page._event_manager.getInlineListener(self.asElement().asEventTarget(), .load);
} }
pub fn setOnLoad(self: *Image, callback: js.Function.Global) void { pub fn setOnLoad(self: *Image, callback: js.Function.Global, page: *Page) !void {
self._on_load = callback; return page._event_manager.setInlineListener(self.asElement().asEventTarget(), .load, callback);
} }
pub fn getSrc(self: *const Image, page: *Page) ![]const u8 { pub fn getSrc(self: *const Image, page: *Page) ![]const u8 {
@@ -177,7 +176,7 @@ fn dispatchLoadEvent(raw: *anyopaque) !?u32 {
const event = try Event.initTrusted("load", .{}, _page); const event = try Event.initTrusted("load", .{}, _page);
// If onload provided, dispatch with it. // If onload provided, dispatch with it.
if (_img._on_load) |_on_load| { if (_img.getOnLoad(_page)) |_on_load| {
var ls: js.Local.Scope = undefined; var ls: js.Local.Scope = undefined;
_page.js.localScope(&ls); _page.js.localScope(&ls);
defer ls.deinit(); defer ls.deinit();
@@ -201,11 +200,7 @@ pub const Build = struct {
const self = node.as(Image); const self = node.as(Image);
const image = self.asElement(); const image = self.asElement();
// Exit if src not set. We might want to check if src point to valid image. // Exit if src not set. We might want to check if src point to valid image.
const src = image.getAttributeSafe("src") orelse return; _ = image.getAttributeSafe("src") orelse return;
// We can at least check if this is a valid URL.
if (!URL.isCompleteHTTPUrl(src)) {
return;
}
// Set `onload` if provided. // Set `onload` if provided.
blk: { blk: {
@@ -217,7 +212,7 @@ pub const Build = struct {
break :blk; break :blk;
}; };
// Set onload. // Set onload.
self._on_load = on_load_func; try self.setOnLoad(on_load_func, page);
} }
// Since src set, we should send dispatch operation to Scheduler. // Since src set, we should send dispatch operation to Scheduler.