summaryrefslogtreecommitdiff
path: root/src/JavaScript/Element.hs
blob: 2eac8f2b2fc1d9599e4cd064f04c300ec48a5e39 (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
module JavaScript.Element (
    Element, IsElement(..),
    getElementById,
    documentQuerySelector,
    querySelector,
) 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