From 75150152f51b21db78bd3cef70b47a5ec98a4c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 28 Jun 2026 13:26:33 +0200 Subject: Newtype wrappers for some JavaScript values --- src/JavaScript/Element.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/JavaScript/Element.hs (limited to 'src/JavaScript/Element.hs') 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 -- cgit v1.2.3