mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
move *addedCallbacks to respective types
This commit is contained in:
@@ -1035,47 +1035,6 @@ pub fn iframeAddedCallback(self: *Page, iframe: *Element.Html.IFrame) !void {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn linkAddedCallback(self: *Page, link: *Element.Html.Link) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (self.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const element = link.asElement();
|
||||
// Exit if rel not set.
|
||||
const rel = element.getAttributeSafe(comptime .wrap("rel")) orelse return;
|
||||
// Exit if rel is not stylesheet.
|
||||
if (!std.mem.eql(u8, rel, "stylesheet")) return;
|
||||
// Exit if href not set.
|
||||
const href = element.getAttributeSafe(comptime .wrap("href")) orelse return;
|
||||
if (href.len == 0) return;
|
||||
|
||||
try self._to_load.append(self.arena, link._proto);
|
||||
}
|
||||
|
||||
pub fn styleAddedCallback(self: *Page, style: *Element.Html.Style) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (self.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try self._to_load.append(self.arena, style._proto);
|
||||
}
|
||||
|
||||
pub fn imageAddedCallback(self: *Page, image: *Element.Html.Image) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (self.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const element = image.asElement();
|
||||
// Exit if src not set.
|
||||
const src = element.getAttributeSafe(comptime .wrap("src")) orelse return;
|
||||
if (src.len == 0) return;
|
||||
|
||||
try self._to_load.append(self.arena, image._proto);
|
||||
}
|
||||
|
||||
pub fn domChanged(self: *Page) void {
|
||||
self.version += 1;
|
||||
|
||||
@@ -2886,12 +2845,12 @@ fn nodeIsReady(self: *Page, comptime from_parser: bool, node: *Node) !void {
|
||||
return err;
|
||||
};
|
||||
} else if (node.is(Element.Html.Link)) |link| {
|
||||
self.linkAddedCallback(link) catch |err| {
|
||||
link.linkAddedCallback(self) catch |err| {
|
||||
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "link", .type = self._type });
|
||||
return error.LinkLoadError;
|
||||
};
|
||||
} else if (node.is(Element.Html.Style)) |style| {
|
||||
self.styleAddedCallback(style) catch |err| {
|
||||
style.styleAddedCallback(self) catch |err| {
|
||||
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "style", .type = self._type });
|
||||
return error.StyleLoadError;
|
||||
};
|
||||
|
||||
@@ -53,7 +53,7 @@ pub fn setSrc(self: *Image, value: []const u8, page: *Page) !void {
|
||||
const element = self.asElement();
|
||||
try element.setAttributeSafe(comptime .wrap("src"), .wrap(value), page);
|
||||
// No need to check if `Image` is connected to DOM; this is a special case.
|
||||
return page.imageAddedCallback(self);
|
||||
return self.imageAddedCallback(page);
|
||||
}
|
||||
|
||||
pub fn getAlt(self: *const Image) []const u8 {
|
||||
@@ -123,6 +123,21 @@ pub fn getComplete(_: *const Image) bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Used in `Page.nodeIsReady`.
|
||||
pub fn imageAddedCallback(self: *Image, page: *Page) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (page.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const element = self.asElement();
|
||||
// Exit if src not set.
|
||||
const src = element.getAttributeSafe(comptime .wrap("src")) orelse return;
|
||||
if (src.len == 0) return;
|
||||
|
||||
try page._to_load.append(page.arena, self._proto);
|
||||
}
|
||||
|
||||
pub const JsApi = struct {
|
||||
pub const bridge = js.Bridge(Image);
|
||||
|
||||
@@ -148,7 +163,7 @@ pub const JsApi = struct {
|
||||
pub const Build = struct {
|
||||
pub fn created(node: *Node, page: *Page) !void {
|
||||
const self = node.as(Image);
|
||||
return page.imageAddedCallback(self);
|
||||
return self.imageAddedCallback(page);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ pub fn setHref(self: *Link, value: []const u8, page: *Page) !void {
|
||||
try element.setAttributeSafe(comptime .wrap("href"), .wrap(value), page);
|
||||
|
||||
if (element.asNode().isConnected()) {
|
||||
try page.linkAddedCallback(self);
|
||||
try self.linkAddedCallback(page);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +86,24 @@ pub fn setCrossOrigin(self: *Link, value: []const u8, page: *Page) !void {
|
||||
return self.asElement().setAttributeSafe(comptime .wrap("crossOrigin"), .wrap(normalized), page);
|
||||
}
|
||||
|
||||
pub fn linkAddedCallback(self: *Link, page: *Page) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (page.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const element = self.asElement();
|
||||
// Exit if rel not set.
|
||||
const rel = element.getAttributeSafe(comptime .wrap("rel")) orelse return;
|
||||
// Exit if rel is not stylesheet.
|
||||
if (!std.mem.eql(u8, rel, "stylesheet")) return;
|
||||
// Exit if href not set.
|
||||
const href = element.getAttributeSafe(comptime .wrap("href")) orelse return;
|
||||
if (href.len == 0) return;
|
||||
|
||||
try page._to_load.append(page.arena, self._proto);
|
||||
}
|
||||
|
||||
pub const JsApi = struct {
|
||||
pub const bridge = js.Bridge(Link);
|
||||
|
||||
|
||||
@@ -97,6 +97,15 @@ pub fn getSheet(self: *Style, page: *Page) !?*CSSStyleSheet {
|
||||
return sheet;
|
||||
}
|
||||
|
||||
pub fn styleAddedCallback(self: *Style, page: *Page) !void {
|
||||
// if we're planning on navigating to another page, don't trigger load event.
|
||||
if (page.isGoingAway()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try page._to_load.append(page.arena, self._proto);
|
||||
}
|
||||
|
||||
pub const JsApi = struct {
|
||||
pub const bridge = js.Bridge(Style);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user