33
44extern type Node
55
6- extern def getDocumentBody() at {}: Node = jsWeb "(document.body)"
6+ extern def empty() at {}: Node =
7+ js "(null)"
8+ default { <> }
9+
10+ extern def getDocumentBody() at {}: Node =
11+ jsWeb "(document.body)"
12+ default { <> }
713
814val documentBody: Node = getDocumentBody()
915
10- extern def getPixelRatio() at {}: Double = jsWeb "(window.devicePixelRatio || 1)"
16+ extern def getPixelRatio() at {}: Double =
17+ jsWeb "(window.devicePixelRatio || 1)"
18+ default { <> }
1119
1220val pixelRatio: Double = getPixelRatio()
1321
1422extern def onClick(node: Node, handler: () => Unit at {io, global}) at io: Unit =
1523 jsWeb "${node}.addEventListener('click', () => $effekt.runToplevel(${handler}))"
24+ default { <> }
1625
1726extern def onScroll(node: Node, handler: Double => Unit at {io, global}) at io: Unit =
1827 jsWeb """(function() {
1928 const handler = ({wheelDelta, detail}) => $effekt.runToplevel((ks, k) => ${handler}(wheelDelta ? wheelData / 40 : detail ? -detail : 0, ks, k));
2029 ${node}.addEventListener('DOMMouseScroll', handler);
2130 ${node}.addEventListener('mousewheel', handler);
2231 })()"""
32+ default { <> }
2333
2434// based on https://stackoverflow.com/a/5526721
2535extern def onDrag(node: Node, handler: (Double, Double) => Unit at {io, global}) at io: Unit =
@@ -41,9 +51,11 @@ extern def onDrag(node: Node, handler: (Double, Double) => Unit at {io, global})
4151 if (dragStart) $effekt.runToplevel((ks, k) => ${handler}(lastX - dragStart.x, lastY - dragStart.y, ks, k))
4252 });
4353 })()"""
54+ default { <> }
4455
4556extern def onKeyUp(node: Node, handler: String => Unit at {io, global}) at io: Unit =
4657 jsWeb "${node}.addEventListener('keyup', ({key}) => $effekt.runToplevel((ks, k) => ${handler}(key, ks, k)))"
58+ default { <> }
4759
4860// let's just pretend we're using internet explorer :)
4961extern def onResize(node: Node, handler: (Bool, Double, Double) => Unit at {io, global}) at io: Unit =
@@ -55,45 +67,59 @@ extern def onResize(node: Node, handler: (Bool, Double, Double) => Unit at {io,
5567 return res;
5668 }))).observe(${node});
5769 })()"""
70+ default { <> }
5871
5972extern def createElement(tag: String) at io: Node =
6073 jsWeb "document.createElement(${tag})"
74+ default { <> }
6175
6276extern def createTextNode(text: String) at io: Node =
6377 jsWeb "document.createTextNode(${text})"
78+ default { <> }
6479
6580extern def appendChild(node: Node, child: Node) at io: Node =
6681 jsWeb "${node}.appendChild(${child})"
82+ default { <> }
6783
6884extern def replaceWith(node: Node, by: Node) at io: Unit =
6985 jsWeb "${node}.replaceWith(${by})"
86+ default { <> }
7087
7188extern def getAttribute(node: Node, key: String) at io: String =
7289 jsWeb "(${node}.getAttribute(${key}) || '')"
90+ default { <> }
7391
7492extern def setAttribute(node: Node, key: String, value: String) at io: Node =
7593 jsWeb "(function() { ${node}.setAttribute(${key}, ${value}); return ${node} })()"
94+ default { <> }
7695
7796extern def innerHTML(node: Node, contents: String) at io: Node =
7897 jsWeb "(function() { ${node}.innerHTML = ${contents}; return ${node} })()"
98+ default { <> }
7999
80100extern def setValue(node: Node, value: String) at io: Node =
81101 jsWeb "(function() { ${node}.value = ${value}; return ${node} })()"
102+ default { <> }
82103
83104extern def setSize(node: Node, width: Double, height: Double) at io: Unit =
84105 jsWeb "(function() { ${node}.width = ${width}; ${node}.height = ${height} })()"
106+ default { <> }
85107
86108extern def addClass(node: Node, class: String) at io: Node =
87109 jsWeb "(function() { ${node}.classList.add(${class}) })()"
110+ default { <> }
88111
89112extern def unsafeQuerySelector(node: Node, query: String) at io: Node =
90113 jsWeb "${node}.querySelector(${query})"
114+ default { <> }
91115
92116extern def unsafeGetElementById(id: String) at io: Node =
93117 jsWeb "document.getElementById(${id})"
118+ default { <> }
94119
95120extern def value(node: Node) at io: String =
96121 jsWeb "(${node}.value)"
122+ default { <> }
97123
98124def getElementById(id: String): Option[Node] = {
99125 val unsafeElement = unsafeGetElementById(id)
0 commit comments