node and browser bindings for gleam
at master 3.6 kB view raw
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}