Packages

A webdriver bidi client written in Gleam, for Gleam.

Current section

Files

Jump to
butterbee src butterbee@page_module@list_element.erl
Raw

src/butterbee@page_module@list_element.erl

-module(butterbee@page_module@list_element).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/butterbee/page_module/list_element.gleam").
-export([define/2, perform_action/4]).
-export_type([node_list/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Define elements for page module using this module.\n"
"\n"
" Example:\n"
"\n"
" ```gleam\n"
" import butterbee/page_module/list_element.{type NodeList}\n"
"\n"
" pub fn team_list(\n"
" driver: WebDriver(state),\n"
" on_element: NodeList,\n"
" action: fn(_) -> WebDriver(new_state),\n"
" ) {\n"
" list_element.define(\n"
" list: by.css(\"ul#team\"),\n"
" list_item: by.css(\"li\"),\n"
" )\n"
" |> list_element.perform_action(driver, on_element, action)\n"
" }\n"
" ```\n"
"\n"
" For a more complete example, see the [`page module`](https://hexdocs.pm/butterbee/page-modules) guide.\n"
).
-type node_list() :: list | {row, integer()}.
-file("src/butterbee/page_module/list_element.gleam", 33).
?DOC(" Define an element for a page module.\n").
-spec define(
butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()
) -> {butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()}.
define(List_locator, List_item_locator) ->
{List_locator, List_item_locator}.
-file("src/butterbee/page_module/list_element.gleam", 41).
?DOC(" Perform an action on the defined element.\n").
-spec perform_action(
{butterbidi@browsing_context@types@locator:locator(),
butterbidi@browsing_context@types@locator:locator()},
butterbee@webdriver:web_driver(any()),
node_list(),
fun((butterbee@webdriver:web_driver(butterbidi@script@types@remote_value:node_remote_value())) -> butterbee@webdriver:web_driver(WWA))
) -> butterbee@webdriver:web_driver(WWA).
perform_action(Locator, Driver, On_element, Action) ->
{List_locator, List_item_locator} = Locator,
_pipe@3 = case On_element of
list ->
butterbee@get:node(Driver, List_locator);
{row, Row} ->
_pipe = Driver,
_pipe@1 = butterbee@get:node(_pipe, List_locator),
_pipe@2 = butterbee@get:nodes_from_node(_pipe@1, List_item_locator),
butterbee@get:node_from_nodes(_pipe@2, Row)
end,
Action(_pipe@3).