on cf0ef4f help sign in
Idris-dev/libs/javascript/JavaScript.idr
104 lines 3.2 kB history raw
1module JavaScript
3%access public
5private
6isUndefined : Ptr -> IO Bool
7isUndefined p = do
8 res <- mkForeign (
9 FFun "%0 === undefined" [FPtr] FString) p
10 if res == "false"
11 then (return False)
12 else (return True)
14--------------------------------------------------------------------------------
15-- Events
16--------------------------------------------------------------------------------
17abstract
18data Event : Type where
19 MkEvent : Ptr -> Event
21--------------------------------------------------------------------------------
22-- Elements
23--------------------------------------------------------------------------------
24abstract
25data Element : Type where
26 MkElem : Ptr -> Element
28setText : Element -> String -> IO ()
29setText (MkElem p) s =
30 mkForeign (FFun "%0.textContent=%1" [FPtr, FString] FUnit) p s
33setOnClick : Element -> (Event -> IO Bool) -> IO ()
34setOnClick (MkElem e) f =
35 mkForeign (
36 FFun "%0['onclick']=%1" [ FPtr
37 , FFunction (FAny Event) (FAny (IO Bool))
38 ] FUnit) e f
39--------------------------------------------------------------------------------
40-- Nodelists
41--------------------------------------------------------------------------------
42abstract
43data NodeList : Type where
44 MkNodeList : Ptr -> NodeList
46elemAt : NodeList -> Nat -> IO (Maybe Element)
47elemAt (MkNodeList p) i = do
48 e <- mkForeign (FFun "%0.item(%1)" [FPtr, FInt] FPtr) p (
49 prim__truncBigInt_Int (cast i)
50 )
51 d <- isUndefined e
52 if d
53 then return $ Just (MkElem e)
54 else return Nothing
56--------------------------------------------------------------------------------
57-- Intervals
58--------------------------------------------------------------------------------
59abstract
60data Interval : Type where
61 MkInterval : Ptr -> Interval
63setInterval : (() -> IO ()) -> Float -> IO Interval
64setInterval f t = do
65 e <- mkForeign (
66 FFun "setInterval(%0,%1)" [FFunction FUnit (FAny (IO ())), FFloat] FPtr
67 ) f t
68 return (MkInterval e)
70clearInterval : Interval -> IO ()
71clearInterval (MkInterval p) =
72 mkForeign (FFun "clearInterval(%0)" [FPtr] FUnit) p
74--------------------------------------------------------------------------------
75-- Timeouts
76--------------------------------------------------------------------------------
77data Timeout : Type where
78 MkTimeout : Ptr -> Timeout
80setTimeout : (() -> IO ()) -> Float -> IO Timeout
81setTimeout f t = do
82 e <- mkForeign (
83 FFun "setTimeout(%0,%1)" [FFunction FUnit (FAny (IO ())), FFloat] FPtr
84 ) f t
85 return (MkTimeout e)
87clearTimeout : Timeout -> IO ()
88clearTimeout (MkTimeout p) =
89 mkForeign (FFun "clearTimeout(%0)" [FPtr] FUnit) p
91--------------------------------------------------------------------------------
92-- Basic IO
93--------------------------------------------------------------------------------
94alert : String -> IO ()
95alert msg =
96 mkForeign (FFun "alert(%0)" [FString] FUnit) msg
98--------------------------------------------------------------------------------
99-- DOM
100--------------------------------------------------------------------------------
101query : String -> IO NodeList
102query q = do
103 e <- mkForeign (FFun "document.querySelectorAll(%0)" [FString] FPtr) q
104 return (MkNodeList e)