diff options
Diffstat (limited to 'src/JavaScript/Element.hs')
| -rw-r--r-- | src/JavaScript/Element.hs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/JavaScript/Element.hs b/src/JavaScript/Element.hs new file mode 100644 index 0000000..2eac8f2 --- /dev/null +++ b/src/JavaScript/Element.hs @@ -0,0 +1,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 |