@@ -2,6 +2,23 @@ module JavaScript
22
33%access public
44
5+-- TODO: Get rid of this hack, and find a better way.
6+private
7+isUndefined : Ptr -> IO Bool
8+isUndefined p = do
9+ res <- mkForeign (
10+ FFun "(function(arg) { return arg === undefined;})" [FPtr] FString) p
11+ if res == "false"
12+ then (return False)
13+ else (return True)
14+
15+--------------------------------------------------------------------------------
16+-- Events
17+--------------------------------------------------------------------------------
18+abstract
19+data Event : Type where
20+ MkEvent : Ptr -> Event
21+
522--------------------------------------------------------------------------------
623-- Elements
724--------------------------------------------------------------------------------
@@ -21,23 +38,20 @@ setOnClick (MkElem e) f =
2138 , FFunction (FAny Event) (FAny (IO Bool))
2239 ] FUnit) e f
2340--------------------------------------------------------------------------------
24−-- Events
25−--------------------------------------------------------------------------------
26−abstract
27−data Event : Type where
28− MkEvent : Ptr -> Event
29−
30−--------------------------------------------------------------------------------
3141-- Nodelists
3242--------------------------------------------------------------------------------
3343abstract
3444data NodeList : Type where
3545 MkNodeList : Ptr -> NodeList
3646
37−elemAt : NodeList -> Nat -> IO Element
47+elemAt : NodeList -> Nat -> IO (Maybe Element)
3848elemAt (MkNodeList p) i = do
39− i <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
40− return (MkElem i)
49+ e <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
50+ d <- isUndefined e
51+ if d
52+ then return $ Just (MkElem e)
53+ else return Nothing
54+
4155--------------------------------------------------------------------------------
4256-- Intervals
4357--------------------------------------------------------------------------------