mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-02-04 06:23:45 +00:00
Image: prefer inline_lookup for onload
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user