1import { Ok, Error } from "./gleam.mjs";
2
3export function cast(raw) {
4 if (raw instanceof Element) {
5 return new Ok(raw)
6 } else {
7 return new Error()
8 }
9}
10
11export function getAttribute(element, name) {
12 let attribute = element.getAttribute(name);
13 if (attribute) {
14 return new Ok(attribute);
15 }
16 return new Error();
17}
18
19export function setAttribute(element, name, value) {
20 element.setAttribute(name, value);
21}
22
23export function addEventListener(element, type, listener) {
24 return element.addEventListener(type, listener);
25}
26
27export function setInnerHTML(element, content) {
28 element.innerHTML = content;
29}
30
31export function innerText(element) {
32 return element.innerText;
33}
34
35export function setInnerText(element, content) {
36 element.innerText = content;
37}
38
39export function insertAdjacentElement(target, position, element) {
40 try {
41 return new Ok(target.insertAdjacentElement(position, element));
42 } catch (error) {
43 return new Error(`${error}`);
44 }
45}
46
47export function insertAdjacentHTML(target, position, element) {
48 try {
49 return new Ok(target.insertAdjacentHTML(position, element));
50 } catch (error) {
51 return new Error(`${error}`);
52 }
53}
54
55export function insertAdjacentText(target, position, element) {
56 try {
57 return new Ok(target.insertAdjacentText(position, element));
58 } catch (error) {
59 return new Error(`${error}`);
60 }
61}
62
63export function nextElementSibling(element) {
64 let sibling = element.nextElementSibling;
65 if (sibling) {
66 return new Ok(sibling);
67 }
68 return new Error();
69}
70
71export function closest(element, selector) {
72 let ancestor = element.closest(selector);
73 if (ancestor) {
74 return new Ok(ancestor);
75 }
76 return new Error();
77}
78
79export async function requestFullscreen(element) {
80 try {
81 await element.requestFullscreen();
82 return new Ok();
83 } catch (error) {
84 return new Error(error.toString());
85 }
86}
87
88export function scrollIntoView(element) {
89 element.scrollIntoView({ behavior: "smooth", block: "nearest" });
90}
91
92export function scrollHeight(element) {
93 return element.scrollHeight;
94}
95
96export function scrollLeft(element) {
97 return element.scrollLeft;
98}
99
100export function scrollTop(element) {
101 return element.scrollTop;
102}
103
104export function scrollWidth(element) {
105 return element.scrollWidth;
106}
107
108export function setScrollHeight(element, value) {
109 element.scrollHeight = value;
110}
111
112export function setScrollLeft(element, value) {
113 element.scrollLeft = value;
114}
115
116export function setScrollTop(element, value) {
117 element.scrollTop = value;
118}
119
120export function setScrollWidth(element, value) {
121 element.scrollWidth = value;
122}
123
124export function value(element) {
125 let value = element.value;
126 if (value != undefined) {
127 return new Ok(value);
128 }
129 return new Error();
130}
131
132export function setValue(element, value) {
133 element.value = value;
134}
135
136export function selectionStart(element) {
137 let value = element.selectionStart;
138 if (value != undefined) {
139 return new Ok(value);
140 }
141 return new Error();
142}
143
144export function setSelectionRange(element, start, end) {
145 element.setSelectionRange(start, end);
146}
147
148export function focus(element) {
149 element.focus();
150}
151
152export function appendChild(parent, child) {
153 parent.appendChild(child);
154}
155
156export function remove(element) {
157 element.remove();
158}
159
160export function datasetGet(el, key) {
161 if (key in el.dataset) {
162 return new Ok(el.dataset[key]);
163 }
164 return new Error(undefined);
165}
166
167export function getChecked(el) {
168 return el.checked;
169}
170
171export function setTextContent(element, text) {
172 element.textContent = text;
173}