on develop help sign in
add withJSBool and getJSProp
2ea6efeAli Abrar
src/Foreign/JavaScript/TH.hs+17
@@ -74,6 +74,7 @@ class Monad m => MonadJS x m | m -> x where
74 fromJSString :: JSRef x -> m String
74 fromJSString :: JSRef x -> m String
75 fromJSArray :: JSRef x -> m [JSRef x]
75 fromJSArray :: JSRef x -> m [JSRef x]
76 fromJSNumber :: JSRef x -> m Double
76 fromJSNumber :: JSRef x -> m Double
77+ withJSBool :: Bool -> (JSRef x -> m r) -> m r
77 withJSString :: String -> (JSRef x -> m r) -> m r
78 withJSString :: String -> (JSRef x -> m r) -> m r
78 withJSNumber :: Double -> (JSRef x -> m r) -> m r
79 withJSNumber :: Double -> (JSRef x -> m r) -> m r
79 withJSArray :: [JSRef x] -> (JSRef x -> m r) -> m r
80 withJSArray :: [JSRef x] -> (JSRef x -> m r) -> m r
@@ -82,6 +83,7 @@ class Monad m => MonadJS x m | m -> x where
82 mkJSFun :: ([JSRef x] -> m (JSRef x)) -> m (JSFun x) --TODO: Support 'this', exceptions
83 mkJSFun :: ([JSRef x] -> m (JSRef x)) -> m (JSFun x) --TODO: Support 'this', exceptions
83 freeJSFun :: JSFun x -> m ()
84 freeJSFun :: JSFun x -> m ()
84 setJSProp :: String -> JSRef x -> JSRef x -> m ()
85 setJSProp :: String -> JSRef x -> JSRef x -> m ()
86+ getJSProp :: String -> JSRef x -> m (JSRef x)
85 withJSNode :: Node -> (JSRef x -> m r) -> m r
87 withJSNode :: Node -> (JSRef x -> m r) -> m r
86
88
87#ifdef __GHCJS__
89#ifdef __GHCJS__
@@ -103,6 +105,7 @@ instance MonadJS JSCtx_IO IO where
103 fromJSNumber (JSRef_IO r) = do
105 fromJSNumber (JSRef_IO r) = do
104 Just n <- JS.fromJSRef $ JS.castRef r
106 Just n <- JS.fromJSRef $ JS.castRef r
105 return n
107 return n
108+ withJSBool b f = f $ JSRef_IO $ JS.castRef $ JS.toJSBool b
106 withJSString s f = f $ JSRef_IO $ JS.castRef $ JS.toJSString s
109 withJSString s f = f $ JSRef_IO $ JS.castRef $ JS.toJSString s
107 withJSNumber n f = do
110 withJSNumber n f = do
108 r <- JS.toJSRef n
111 r <- JS.toJSRef n
@@ -121,6 +124,9 @@ instance MonadJS JSCtx_IO IO where
121 liftM (JSFun . JSRef_IO) $ funWithArguments cb
124 liftM (JSFun . JSRef_IO) $ funWithArguments cb
122 freeJSFun (JSFun (JSRef_IO r)) = JS.release $ JS.castRef r
125 freeJSFun (JSFun (JSRef_IO r)) = JS.release $ JS.castRef r
123 setJSProp s (JSRef_IO o) (JSRef_IO v) = JS.setProp s o v
126 setJSProp s (JSRef_IO o) (JSRef_IO v) = JS.setProp s o v
127+ getJSProp s (JSRef_IO o) = do
128+ r <- JS.getProp s o
129+ return $ JSRef_IO r
124 withJSNode n f = f $ JSRef_IO $ JS.castRef $ unNode n
130 withJSNode n f = f $ JSRef_IO $ JS.castRef $ unNode n
125
131
126foreign import javascript unsafe "new Uint8Array($1_1.buf, $1_2, $2)" extractByteArray :: Ptr CChar -> Int -> IO (JS.JSRef (JSRef JSCtx_IO))
132foreign import javascript unsafe "new Uint8Array($1_1.buf, $1_2, $2)" extractByteArray :: Ptr CChar -> Int -> IO (JS.JSRef (JSRef JSCtx_IO))
@@ -187,6 +193,10 @@ instance MonadJS (JSCtx_JavaScriptCore x) (WithWebView x IO) where
187 allocaBytes (fromIntegral l) $ \ps -> do
193 allocaBytes (fromIntegral l) $ \ps -> do
188 _ <- jsstringgetutf8cstring'_ s ps (fromIntegral l)
194 _ <- jsstringgetutf8cstring'_ s ps (fromIntegral l)
189 peekCString ps
195 peekCString ps
196+ withJSBool b a = do
197+ jsContext <- askJSContext
198+ valRef <- liftIO $ jsvaluemakeboolean jsContext bRef
199+ a $ JSRef_JavaScriptCore valRef
190 withJSString str a = do
200 withJSString str a = do
191 jsContext <- askJSContext
201 jsContext <- askJSContext
192 withJSStringRaw str $ \strRef -> do
202 withJSStringRaw str $ \strRef -> do
@@ -237,6 +247,10 @@ instance MonadJS (JSCtx_JavaScriptCore x) (WithWebView x IO) where
237 withJSStringRaw propName $ \propNameRaw -> do
247 withJSStringRaw propName $ \propNameRaw -> do
238 jsContext <- askJSContext
248 jsContext <- askJSContext
239 liftIO $ jsobjectsetproperty jsContext objRef propNameRaw valRef 0 nullPtr --TODO: property attribute, exceptions
249 liftIO $ jsobjectsetproperty jsContext objRef propNameRaw valRef 0 nullPtr --TODO: property attribute, exceptions
250+ getJSProp propName (JSRef_JavaScriptCore objRef) = do
251+ withJSStringRaw propName $ \propNameRaw -> do
252+ jsContext <- askJSContext
253+ liftIO $ jsobjectgetproperty jsContext objRef propNameRaw 0 nullPtr --TODO: property attribute, exceptions
240 withJSNode (Node n) f = do
254 withJSNode (Node n) f = do
241 jsContext <- askJSContext
255 jsContext <- askJSContext
242 withForeignPtr n $ \nPtr -> do
256 withForeignPtr n $ \nPtr -> do
@@ -266,6 +280,9 @@ instance FromJS x () where
266instance FromJS x Bool where
280instance FromJS x Bool where
267 fromJS = fromJSBool
281 fromJS = fromJSBool
268
282
283+instance ToJS x Bool where
284+ withJS = withJSBool
285+
269instance FromJS x String where
286instance FromJS x String where
270 fromJS = fromJSString
287 fromJS = fromJSString
271
288