blob: 60f5c6545cb47c27792f4b21b6570eae792a35c3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
module JavaScript.Element (
Element, IsElement(..),
getElementById,
documentQuerySelector,
querySelector,
createElement,
removeElement,
firstElementChild,
lastElementChild,
) where
import JavaScript.Event
import JavaScript.Val
newtype Element = Element JSVal
deriving (ToJSVal, FromJSVal)
class IsElement a where
toElement :: a -> Element
instance IsElement Element where
toElement = id
instance IsEventTarget Element where
toEventTarget = fromJSValUnchecked . toJSVal
getElementById :: String -> IO (Maybe Element)
getElementById = fmap nullToNothing . js_document_getElementById . toJSString
foreign import javascript unsafe "document.getElementById($1)"
js_document_getElementById :: JSString -> IO JSVal
documentQuerySelector :: String -> IO (Maybe Element)
documentQuerySelector = fmap nullToNothing . js_document_querySelector . toJSString
foreign import javascript unsafe "document.querySelector($1)"
js_document_querySelector :: JSString -> IO JSVal
querySelector :: IsElement e => String -> e -> IO (Maybe Element)
querySelector sel e = nullToNothing <$> js_querySelector (toJSVal $ toElement e) (toJSString sel)
foreign import javascript unsafe "$1.querySelector($2)"
js_querySelector :: JSVal -> JSString -> IO JSVal
createElement :: String -> IO Element
createElement = fmap Element . js_document_createElement . toJSString
foreign import javascript unsafe "document.createElement($1)"
js_document_createElement :: JSString -> IO JSVal
removeElement :: IsElement e => e -> IO ()
removeElement = js_element_remove . toJSVal . toElement
foreign import javascript unsafe "$1.remove()"
js_element_remove :: JSVal -> IO ()
firstElementChild :: IsElement e => e -> IO (Maybe Element)
firstElementChild = fmap nullToNothing . js_element_firstElementChild . toJSVal . toElement
foreign import javascript unsafe "$1.firstElementChild"
js_element_firstElementChild :: JSVal -> IO JSVal
lastElementChild :: IsElement e => e -> IO (Maybe Element)
lastElementChild = fmap nullToNothing . js_element_lastElementChild . toJSVal . toElement
foreign import javascript unsafe "$1.lastElementChild"
js_element_lastElementChild :: JSVal -> IO JSVal
|