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();
|
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user