mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
actions: refactor node type checks for idiomatic flattening
This commit is contained in:
@@ -24,66 +24,58 @@ const Event = @import("webapi/Event.zig");
|
|||||||
const Page = @import("Page.zig");
|
const Page = @import("Page.zig");
|
||||||
|
|
||||||
pub fn click(node: *DOMNode, page: *Page) !void {
|
pub fn click(node: *DOMNode, page: *Page) !void {
|
||||||
if (node.is(Element)) |el| {
|
if (node.is(Element.Html)) |html_el| {
|
||||||
if (el.is(Element.Html)) |html_el| {
|
html_el.click(page) catch |err| {
|
||||||
html_el.click(page) catch |err| {
|
lp.log.err(.app, "click failed", .{ .err = err });
|
||||||
lp.log.err(.app, "click failed", .{ .err = err });
|
return error.ActionFailed;
|
||||||
return error.ActionFailed;
|
};
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return error.InvalidNodeType;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return error.InvalidNodeType;
|
return error.InvalidNodeType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fill(node: *DOMNode, text: []const u8, page: *Page) !void {
|
pub fn fill(node: *DOMNode, text: []const u8, page: *Page) !void {
|
||||||
if (node.is(Element)) |el| {
|
const el = node.is(Element) orelse return error.InvalidNodeType;
|
||||||
if (el.is(Element.Html.Input)) |input| {
|
|
||||||
input.setValue(text, page) catch |err| {
|
|
||||||
lp.log.err(.app, "fill input failed", .{ .err = err });
|
|
||||||
return error.ActionFailed;
|
|
||||||
};
|
|
||||||
} else if (el.is(Element.Html.TextArea)) |textarea| {
|
|
||||||
textarea.setValue(text, page) catch |err| {
|
|
||||||
lp.log.err(.app, "fill textarea failed", .{ .err = err });
|
|
||||||
return error.ActionFailed;
|
|
||||||
};
|
|
||||||
} else if (el.is(Element.Html.Select)) |select| {
|
|
||||||
select.setValue(text, page) catch |err| {
|
|
||||||
lp.log.err(.app, "fill select failed", .{ .err = err });
|
|
||||||
return error.ActionFailed;
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return error.InvalidNodeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
const input_evt = try Event.initTrusted(comptime lp.String.wrap("input"), .{ .bubbles = true }, page);
|
if (el.is(Element.Html.Input)) |input| {
|
||||||
_ = page._event_manager.dispatch(el.asEventTarget(), input_evt) catch {};
|
input.setValue(text, page) catch |err| {
|
||||||
|
lp.log.err(.app, "fill input failed", .{ .err = err });
|
||||||
const change_evt = try Event.initTrusted(comptime lp.String.wrap("change"), .{ .bubbles = true }, page);
|
return error.ActionFailed;
|
||||||
_ = page._event_manager.dispatch(el.asEventTarget(), change_evt) catch {};
|
};
|
||||||
|
} else if (el.is(Element.Html.TextArea)) |textarea| {
|
||||||
|
textarea.setValue(text, page) catch |err| {
|
||||||
|
lp.log.err(.app, "fill textarea failed", .{ .err = err });
|
||||||
|
return error.ActionFailed;
|
||||||
|
};
|
||||||
|
} else if (el.is(Element.Html.Select)) |select| {
|
||||||
|
select.setValue(text, page) catch |err| {
|
||||||
|
lp.log.err(.app, "fill select failed", .{ .err = err });
|
||||||
|
return error.ActionFailed;
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
return error.InvalidNodeType;
|
return error.InvalidNodeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const input_evt = try Event.initTrusted(comptime lp.String.wrap("input"), .{ .bubbles = true }, page);
|
||||||
|
_ = page._event_manager.dispatch(el.asEventTarget(), input_evt) catch {};
|
||||||
|
|
||||||
|
const change_evt = try Event.initTrusted(comptime lp.String.wrap("change"), .{ .bubbles = true }, page);
|
||||||
|
_ = page._event_manager.dispatch(el.asEventTarget(), change_evt) catch {};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn scroll(node: ?*DOMNode, x: i32, y: i32, page: *Page) !void {
|
pub fn scroll(node: ?*DOMNode, x: i32, y: i32, page: *Page) !void {
|
||||||
if (node) |n| {
|
if (node) |n| {
|
||||||
if (n.is(Element)) |el| {
|
const el = n.is(Element) orelse return error.InvalidNodeType;
|
||||||
if (x != 0) {
|
|
||||||
el.setScrollLeft(x, page) catch {};
|
|
||||||
}
|
|
||||||
if (y != 0) {
|
|
||||||
el.setScrollTop(y, page) catch {};
|
|
||||||
}
|
|
||||||
|
|
||||||
const scroll_evt = try Event.initTrusted(comptime lp.String.wrap("scroll"), .{ .bubbles = true }, page);
|
if (x != 0) {
|
||||||
_ = page._event_manager.dispatch(el.asEventTarget(), scroll_evt) catch {};
|
el.setScrollLeft(x, page) catch {};
|
||||||
} else {
|
|
||||||
return error.InvalidNodeType;
|
|
||||||
}
|
}
|
||||||
|
if (y != 0) {
|
||||||
|
el.setScrollTop(y, page) catch {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const scroll_evt = try Event.initTrusted(comptime lp.String.wrap("scroll"), .{ .bubbles = true }, page);
|
||||||
|
_ = page._event_manager.dispatch(el.asEventTarget(), scroll_evt) catch {};
|
||||||
} else {
|
} else {
|
||||||
page.window.scrollTo(.{ .x = x }, y, page) catch |err| {
|
page.window.scrollTo(.{ .x = x }, y, page) catch |err| {
|
||||||
lp.log.err(.app, "scroll failed", .{ .err = err });
|
lp.log.err(.app, "scroll failed", .{ .err = err });
|
||||||
|
|||||||
Reference in New Issue
Block a user