From 7ca0225185ad986f3fffd793eb3882035bdb9c52 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 27 Jan 2026 01:27:54 +0300 Subject: [PATCH] `Image`: prefer `inline_lookup` for `onload` --- src/browser/webapi/element/html/Image.zig | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/browser/webapi/element/html/Image.zig b/src/browser/webapi/element/html/Image.zig index fc3426be..36b7e787 100644 --- a/src/browser/webapi/element/html/Image.zig +++ b/src/browser/webapi/element/html/Image.zig @@ -10,7 +10,6 @@ const log = @import("../../../../log.zig"); const Image = @This(); _proto: *HtmlElement, -_on_load: ?js.Function.Global = null, pub fn constructor(w_: ?u32, h_: ?u32, page: *Page) !*Image { const node = try page.createElementNS(.html, "img", null); @@ -37,12 +36,12 @@ pub fn asNode(self: *Image) *Node { return self.asElement().asNode(); } -pub fn getOnLoad(self: *const Image) ?js.Function.Global { - return self._on_load; +pub fn getOnLoad(self: *Image, page: *Page) ?js.Function.Global { + return page._event_manager.getInlineListener(self.asElement().asEventTarget(), .load); } -pub fn setOnLoad(self: *Image, callback: js.Function.Global) void { - self._on_load = callback; +pub fn setOnLoad(self: *Image, callback: js.Function.Global, page: *Page) !void { + return page._event_manager.setInlineListener(self.asElement().asEventTarget(), .load, callback); } 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); // If onload provided, dispatch with it. - if (_img._on_load) |_on_load| { + if (_img.getOnLoad(_page)) |_on_load| { var ls: js.Local.Scope = undefined; _page.js.localScope(&ls); defer ls.deinit(); @@ -201,11 +200,7 @@ pub const Build = struct { const self = node.as(Image); const image = self.asElement(); // Exit if src not set. We might want to check if src point to valid image. - const src = image.getAttributeSafe("src") orelse return; - // We can at least check if this is a valid URL. - if (!URL.isCompleteHTTPUrl(src)) { - return; - } + _ = image.getAttributeSafe("src") orelse return; // Set `onload` if provided. blk: { @@ -217,7 +212,7 @@ pub const Build = struct { break :blk; }; // 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.