move *addedCallbacks to respective types

This commit is contained in:
Halil Durak
2026-02-26 10:26:59 +03:00
parent 721cf98486
commit c86c851c60
4 changed files with 47 additions and 46 deletions

View File

@@ -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 { pub fn domChanged(self: *Page) void {
self.version += 1; self.version += 1;
@@ -2886,12 +2845,12 @@ fn nodeIsReady(self: *Page, comptime from_parser: bool, node: *Node) !void {
return err; return err;
}; };
} else if (node.is(Element.Html.Link)) |link| { } 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 }); log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "link", .type = self._type });
return error.LinkLoadError; return error.LinkLoadError;
}; };
} else if (node.is(Element.Html.Style)) |style| { } 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 }); log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "style", .type = self._type });
return error.StyleLoadError; return error.StyleLoadError;
}; };

View File

@@ -53,7 +53,7 @@ pub fn setSrc(self: *Image, value: []const u8, page: *Page) !void {
const element = self.asElement(); const element = self.asElement();
try element.setAttributeSafe(comptime .wrap("src"), .wrap(value), page); try element.setAttributeSafe(comptime .wrap("src"), .wrap(value), page);
// No need to check if `Image` is connected to DOM; this is a special case. // 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 { pub fn getAlt(self: *const Image) []const u8 {
@@ -123,6 +123,21 @@ pub fn getComplete(_: *const Image) bool {
return true; 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 JsApi = struct {
pub const bridge = js.Bridge(Image); pub const bridge = js.Bridge(Image);
@@ -148,7 +163,7 @@ pub const JsApi = struct {
pub const Build = struct { pub const Build = struct {
pub fn created(node: *Node, page: *Page) !void { pub fn created(node: *Node, page: *Page) !void {
const self = node.as(Image); const self = node.as(Image);
return page.imageAddedCallback(self); return self.imageAddedCallback(page);
} }
}; };

View File

@@ -54,7 +54,7 @@ pub fn setHref(self: *Link, value: []const u8, page: *Page) !void {
try element.setAttributeSafe(comptime .wrap("href"), .wrap(value), page); try element.setAttributeSafe(comptime .wrap("href"), .wrap(value), page);
if (element.asNode().isConnected()) { 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); 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 JsApi = struct {
pub const bridge = js.Bridge(Link); pub const bridge = js.Bridge(Link);

View File

@@ -97,6 +97,15 @@ pub fn getSheet(self: *Style, page: *Page) !?*CSSStyleSheet {
return sheet; 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 JsApi = struct {
pub const bridge = js.Bridge(Style); pub const bridge = js.Bridge(Style);