@@ -0,0 +1,101 @@
5+-- TODO: Get rid of this hack, and find a better way.
7+isUndefined : Ptr -> IO Bool
10+ FFun "(function(arg) { return arg === undefined;})" [FPtr] FString) p
15+--------------------------------------------------------------------------------
17+--------------------------------------------------------------------------------
19+data Event : Type where
20+ MkEvent : Ptr -> Event
22+--------------------------------------------------------------------------------
24+--------------------------------------------------------------------------------
26+data Element : Type where
27+ MkElem : Ptr -> Element
29+setText : Element -> String -> IO ()
30+setText (MkElem p) s =
31+ mkForeign (FFun ".textContent=" [FPtr, FString] FUnit) p s
34+setOnClick : Element -> (Event -> IO Bool) -> IO ()
35+setOnClick (MkElem e) f =
37+ FFun "['onclick']=" [ FPtr
38+ , FFunction (FAny Event) (FAny (IO Bool))
40+--------------------------------------------------------------------------------
42+--------------------------------------------------------------------------------
44+data NodeList : Type where
45+ MkNodeList : Ptr -> NodeList
47+elemAt : NodeList -> Nat -> IO (Maybe Element)
48+elemAt (MkNodeList p) i = do
49+ e <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
52+ then return $ Just (MkElem e)
55+--------------------------------------------------------------------------------
57+--------------------------------------------------------------------------------
59+data Interval : Type where
60+ MkInterval : Ptr -> Interval
62+setInterval : (() -> IO ()) -> Float -> IO Interval
65+ FFun "setInterval" [FFunction FUnit (FAny (IO ())), FFloat] FPtr) f t
66+ return (MkInterval e)
68+clearInterval : Interval -> IO ()
69+clearInterval (MkInterval p) =
70+ mkForeign (FFun "clearInterval" [FPtr] FUnit) p
72+--------------------------------------------------------------------------------
74+--------------------------------------------------------------------------------
75+data Timeout : Type where
76+ MkTimeout : Ptr -> Timeout
78+setTimeout : (() -> IO ()) -> Float -> IO Timeout
81+ FFun "setTimeout" [FFunction FUnit (FAny (IO ())), FFloat] FPtr) f t
84+clearTimeout : Timeout -> IO ()
85+clearTimeout (MkTimeout p) =
86+ mkForeign (FFun "clearTimeout" [FPtr] FUnit) p
88+--------------------------------------------------------------------------------
90+--------------------------------------------------------------------------------
91+alert : String -> IO ()
93+ mkForeign (FFun "alert" [FString] FUnit) msg
95+--------------------------------------------------------------------------------
97+--------------------------------------------------------------------------------
98+query : String -> IO NodeList
100+ e <- mkForeign (FFun "document.querySelectorAll" [FString] FPtr) q
101+ return (MkNodeList e)