packages feed

jsaddle 0.3.0.1 → 0.3.0.2

raw patch · 7 files changed

+100/−52 lines, 7 filesdep ~webkit-javascriptcoredep ~webkitgtk3-javascriptcore

Dependency ranges changed: webkit-javascriptcore, webkitgtk3-javascriptcore

Files

jsaddle.cabal view
@@ -1,5 +1,5 @@ name: jsaddle-version: 0.3.0.1+version: 0.3.0.2 cabal-version: >=1.10 build-type: Simple license: MIT@@ -32,12 +32,12 @@             build-depends:                 gtk3 >=0.14.2 && <0.15,                 webkitgtk3 >=0.13.0.0 && <0.15,-                webkitgtk3-javascriptcore >=0.13.0.0 && <0.14+                webkitgtk3-javascriptcore >=0.13.1.2 && <0.14         else             build-depends:                 gtk >=0.14.2 && <0.15,                 webkit >=0.13.0.0 && <0.15,-                webkit-javascriptcore >=0.13.0.0 && <0.14+                webkit-javascriptcore >=0.13.1.2 && <0.14         build-depends:             glib -any     exposed-modules:
src/Language/Javascript/JSaddle/Evaluate.hs view
@@ -47,12 +47,14 @@ -- >>> import Language.Javascript.JSaddle.Object (global, array, (!)) -- >>> import Language.Javascript.JSaddle.Monad (catch) -- >>> import Language.Javascript.JSaddle.Exception (JSException(..))+-- >>> testJSaddle $ return ()+-- ...  -- | Evaluates a script (like eval in java script).  Unlike 'eval' this function lets you --   specify a source URL and starting line number for beter error information. -- -- >>> testJSaddle $ (evaluateScript "\n\n{" global "FileName" 53 >>= valToText) `catch` \(JSException e) -> array (e,e!"sourceURL", e!"line") >>= valToText--- SyntaxError: Expected token '}',FileName,55+-- SyntaxError: ...,FileName,55 evaluateScript :: (ToJSString script, MakeObject this, ToJSString url)                => script         -- ^ JavaScript to evaluate                -> this
src/Language/Javascript/JSaddle/Native.hs view
@@ -30,8 +30,8 @@        (JSObjectRef, OpaqueJSString, JSStringRef, OpaqueJSContext,         OpaqueJSValue, JSValueRef) import Foreign.ForeignPtr-       (touchForeignPtr, FinalizerPtr, newForeignPtr, FinalizerEnvPtr,-        newForeignPtrEnv, ForeignPtr)+       (newForeignPtr_, touchForeignPtr, FinalizerPtr, newForeignPtr,+        FinalizerEnvPtr, newForeignPtrEnv, ForeignPtr) import Control.Monad.IO.Class (MonadIO, MonadIO(..)) import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef        (jsvalueprotect)@@ -41,6 +41,7 @@        (JSM, JSString, Object(..), JSVal) import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr) import Language.Javascript.JSaddle.Classes (ToJSVal(..), ToJSVal)+import Foreign.Ptr (nullPtr)  makeNewJSVal :: JSValueRef -> JSM (ForeignPtr OpaqueJSValue) makeNewJSVal val = do@@ -53,12 +54,16 @@   jsValueUnprotect :: FinalizerEnvPtr OpaqueJSContext OpaqueJSValue  makeNewJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString)+makeNewJSString s | s == nullPtr =+    liftIO $ newForeignPtr_ s makeNewJSString s =     liftIO $ do         s' <- jsstringretain s         newForeignPtr jsStringRelease s'  wrapJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString)+wrapJSString s | s == nullPtr =+    liftIO $ newForeignPtr_ s wrapJSString s = liftIO $ newForeignPtr jsStringRelease s  foreign import ccall unsafe "&JSStringRelease"
src/Language/Javascript/JSaddle/Object.hs view
@@ -112,8 +112,8 @@         jspropertynamearraygetcount, jsobjectcopypropertynames,         jsobjectcallasconstructor, jsobjectmakearray,         jsobjectcallasfunction,-        JSObjectCallAsFunctionCallback,-        jsobjectmakefunctionwithcallback, JSObjectCallAsFunctionCallback')+        JSObjectCallAsFunctionCallback, mkJSObjectCallAsFunctionCallback,+        jsobjectmakefunctionwithcallback) import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef        (jsvaluemakeundefined) import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSContextRef@@ -121,8 +121,8 @@ import Foreign (peekArray, nullPtr, withArrayLen) import Foreign.Ptr (freeHaskellFunPtr) import Language.Javascript.JSaddle.Native-       (makeNewJSVal, wrapJSString, withJSVals, withObject, withJSString,-        withToJSVal)+       (makeNewJSString, makeNewJSVal, wrapJSString, withJSVals,+        withObject, withJSString, withToJSVal) import System.IO.Unsafe (unsafePerformIO) import Foreign.ForeignPtr (newForeignPtr_) #endif@@ -147,8 +147,9 @@ -- $setup -- >>> import Language.Javascript.JSaddle.Test (testJSaddle) -- >>> import Language.Javascript.JSaddle.Evaluate (eval)--- >>> import Language.Javascript.JSaddle.Value (val)+-- >>> import Language.Javascript.JSaddle.Value (val, valToText, JSNull(..)) -- >>> import Control.Lens.Operators ((^.))+-- >>> import qualified Data.Text as T (unpack)  -- | Object can be made by evaluating a fnction in 'JSM' as long --   as it returns something we can make into a Object.@@ -159,6 +160,7 @@ -- | Lookup a property based on its name. -- -- >>> testJSaddle $ eval "'Hello World'.length"+-- 11 -- >>> testJSaddle $ val "Hello World" ! "length" -- 11 (!) :: (MakeObject this, ToJSString name)@@ -175,6 +177,7 @@ -- | Lookup a property based on its index. -- -- >>> testJSaddle $ eval "'Hello World'[6]"+-- W -- >>> testJSaddle $ val "Hello World" !! 6 -- W (!!) :: (MakeObject this)@@ -191,6 +194,7 @@ -- > js name = to (!name) -- -- >>> testJSaddle $ eval "'Hello World'.length"+-- 11 -- >>> testJSaddle $ val "Hello World" ^. js "length" -- 11 js :: (MakeObject s, ToJSString name)@@ -204,6 +208,7 @@ -- > jss name = to (<#name) -- -- >>> testJSaddle $ eval "'Hello World'.length"+-- 11 -- >>> testJSaddle $ val "Hello World" ^. js "length" -- 11 jss :: (ToJSString name, ToJSVal val)@@ -275,8 +280,13 @@ -- | Handy way to get and hold onto a reference top level javascript -- -- >>> testJSaddle $ eval "w = console; w.log('Hello World')"--- >>> testJSaddle $ do w <- jsg "console"; w ^. js "log" # ["Hello World"]--- 11+-- ** Message: console message:  @1: Hello World+-- <BLANKLINE>+-- undefined+-- >>> testJSaddle $ do w <- jsg "console"; w ^. js1 "log" "Hello World"+-- ** Message: console message:...@0: Hello World+-- <BLANKLINE>+-- undefined jsg :: ToJSString a => a -> JSM JSVal jsg name = global ! name {-# INLINE jsg #-}@@ -285,9 +295,10 @@ -- -- > jsgf name = jsg name . to (# args) ----- >>> testJSaddle $ eval "globalFunc = function(x) {x.length}"+-- >>> testJSaddle $ eval "globalFunc = function (x) {return x.length;}"+-- function (x) {return x.length;} -- >>> testJSaddle $ jsgf "globalFunc" ["World"]--- 6+-- 5 jsgf :: (ToJSString name, MakeArgs args) => name -> args -> JSM JSVal jsgf name = global # name {-# INLINE jsgf #-}@@ -297,7 +308,7 @@ -- > jsg0 name = jsgf name () -- -- >>> testJSaddle $ jsg0 "globalFunc"--- hello world+-- TypeError:...undefined...is not an objec... jsg0 :: (ToJSString name) => name -> JSM JSVal jsg0 name = jsgf name () {-# INLINE jsg0 #-}@@ -307,7 +318,7 @@ -- > jsg1 name a0 = jsgf name [a0] -- -- >>> testJSaddle $ jsg1 "globalFunc" "World"--- 6+-- 5 jsg1 :: (ToJSString name, ToJSVal a0) => name -> a0 -> JSM JSVal jsg1 name a0 = jsgf name [a0] {-# INLINE jsg1 #-}@@ -340,6 +351,7 @@ -- | Call a JavaScript function -- -- >>> testJSaddle $ eval "'Hello World'.indexOf('World')"+-- 6 -- >>> testJSaddle $ val "Hello World" # "indexOf" $ ["World"] -- 6 infixr 2 #@@ -354,8 +366,10 @@  -- | Call a JavaScript function ----- >>> testJSaddle $ eval "something[6]('World')"--- >>> testJSaddle $ val something ## 6 ["World"]+-- >>> testJSaddle $ eval "something = {}; something[6]=function (x) {return x.length;}; something[6]('World')"+-- 5+-- >>> testJSaddle $ jsg "something" ## 6 $ ["World"]+-- 5 infixr 2 ## (##) :: (MakeObject this, MakeArgs args)     => this -> Index -> args -> JSM JSVal@@ -369,8 +383,9 @@ -- | Set a JavaScript property -- -- >>> testJSaddle $ eval "var j = {}; j.x = 1; j.x"--- >>> testJSaddle $ do {j <- eval "({})"; j <# "x" 1; j!"x"} -- 1+-- >>> testJSaddle $ do {j <- obj; (j <# "x") 1; j!"x"}+-- 1 infixr 1 <# (<#) :: (MakeObject this, ToJSString name, ToJSVal val)      => this           -- ^ Object to set the property on@@ -385,8 +400,9 @@ -- | Set a JavaScript property -- -- >>> testJSaddle $ eval "var j = {}; j[6] = 1; j[6]"--- >>> testJSaddle $ do {j <- eval "({})"; j <## 6 1; j!!6} -- 1+-- >>> testJSaddle $ do {j <- obj; (j <## 6) 1; j!!6}+-- 1 infixr 1 <## (<##) :: (MakeObject this, ToJSVal val)      => this           -- ^ Object to set the property on@@ -404,7 +420,7 @@ -- JavaScript type (like Date) then this function will fail. -- -- >>> testJSaddle $ new (jsg "Date") (2013, 1, 1)--- Fri Feb 01 2013 00:00:00 GMT+1300 (NZDT)+-- Fri Feb 01 2013 00:00:00 GMT+... (...) new :: (MakeObject constructor, MakeArgs args)     => constructor     -> args@@ -417,6 +433,7 @@ -- | Call function with a given @this@.  In most cases you should use '#'. -- -- >>> testJSaddle $ eval "(function(){return this;}).apply('Hello', [])"+-- Hello -- >>> testJSaddle $ do { test <- eval "(function(){return this;})"; call test (val "Hello") () } -- Hello call :: (MakeObject f, MakeObject this, MakeArgs args)@@ -430,8 +447,9 @@ -- | Make an empty object using the default constuctor -- -- >>> testJSaddle $ eval "var a = {}; a.x = 'Hello'; a.x"--- >>> testJSaddle $ do { a <- obj; a ^. js "x" <# "Hello"; a ^. js "x" } -- Hello+-- >>> testJSaddle $ do { a <- obj; (a <# "x") "Hello"; a ^. js "x" }+-- Hello obj :: JSM Object #ifdef ghcjs_HOST_OS obj = liftIO Object.create@@ -456,6 +474,9 @@ --   a to a JavaScipt one. -- -- >>> testJSaddle $ eval "(function(f) {f('Hello');})(function (a) {console.log(a)})"+-- ** Message: console message:  @1: Hello+-- <BLANKLINE>+-- undefined -- >>> testJSaddle $ call (eval "(function(f) {f('Hello');})") global [fun $ \ _ _ args -> valToText (head args) >>= (liftIO . putStrLn . T.unpack) ] -- Hello -- undefined@@ -463,11 +484,6 @@ fun = id {-# INLINE fun #-} -#if !defined(ghcjs_HOST_OS)-foreign import ccall "wrapper"-  mkJSObjectCallAsFunctionCallback :: JSObjectCallAsFunctionCallback' -> IO JSObjectCallAsFunctionCallback-#endif- #ifdef ghcjs_HOST_OS type HaskellCallback = Callback (JSVal -> JSVal -> IO ()) #else@@ -557,9 +573,11 @@ -- | Make an JavaScript array from a list of values -- -- >>> testJSaddle $ eval "['Hello', 'World'][1]"+-- World -- >>> testJSaddle $ array ["Hello", "World"] !! 1 -- World -- >>> testJSaddle $ eval "['Hello', null, undefined, true, 1]"+-- Hello,,,true,1 -- >>> testJSaddle $ array ("Hello", JSNull, (), True, 1.0::Double) -- Hello,,,true,1 array :: MakeArgs args => args -> JSM Object@@ -634,7 +652,7 @@  -- | Get a name out of a property name array propertyNamesAt :: MonadIO m => JSPropertyNameArray -> CSize -> m JSString-propertyNamesAt names index = liftIO $ jspropertynamearraygetnameatindex names index >>= wrapJSString+propertyNamesAt names index = liftIO $ jspropertynamearraygetnameatindex names index >>= makeNewJSString {-# INLINE propertyNamesAt #-}  -- | Convert property array to a list
src/Language/Javascript/JSaddle/Test.hs view
@@ -62,7 +62,7 @@ showJSaddle = testJSaddle' True  debugLog :: String -> IO ()-debugLog = putStrLn+debugLog _ = return ()  testJSaddle' :: ToJSVal val => Bool -> JSM val -> IO () testJSaddle' showWindow f = do
src/Language/Javascript/JSaddle/Value.hs view
@@ -111,6 +111,8 @@ -- >>> import Language.Javascript.JSaddle.Test (testJSaddle) -- >>> import Language.Javascript.JSaddle.Monad (catch) -- >>> import Language.Javascript.JSaddle.Exception (JSException(..))+-- >>> import Language.Javascript.JSaddle.Object (obj)+-- >>> import qualified Data.Text as T (pack)  data JSNull      = JSNull -- ^ Type that represents a value that can only be null.                           --   Haskell of course has no null so we are adding this type.@@ -218,7 +220,7 @@ -- >>> testJSaddle $ valToStr (0.0 :: Double) >>= strToText -- 0 -- >>> testJSaddle $ valToStr "" >>= strToText---+-- <BLANKLINE> -- >>> testJSaddle $ valToStr "1" >>= strToText -- 1 valToStr :: ToJSVal value => value -> JSM JSString@@ -263,7 +265,7 @@ -- >>> testJSaddle $ valToJSON 0 JSNull >>= strToText -- null -- >>> testJSaddle $ valToJSON 0 () >>= strToText---+-- <BLANKLINE> -- >>> testJSaddle $ valToJSON 0 True >>= strToText -- true -- >>> testJSaddle $ valToJSON 0 False >>= strToText@@ -295,9 +297,9 @@ --   May throw JSException. -- -- >>> testJSaddle $ (valToObject JSNull >>= valToText) `catch` \ (JSException e) -> valToText e--- TypeError: 'null' is not an object+-- TypeError:...null...is not an object -- >>> testJSaddle $ (valToObject () >>= valToText) `catch` \ (JSException e) -> valToText e--- TypeError: 'undefined' is not an object+-- TypeError:...undefined...is not an object -- >>> testJSaddle $ valToObject True -- true -- >>> testJSaddle $ valToObject False@@ -307,7 +309,7 @@ -- >>> testJSaddle $ valToObject (0.0 :: Double) -- 0 -- >>> testJSaddle $ valToObject ""---+-- <BLANKLINE> -- >>> testJSaddle $ valToObject "1" -- 1 valToObject :: ToJSVal value => value -> JSM Object@@ -578,23 +580,23 @@ -- | Derefernce a value reference. -- -- >>> testJSaddle $ showJSValue <$> deRefVal JSNull--- ValNull+-- null -- >>> testJSaddle $ showJSValue <$> deRefVal ()--- ValUndefined+-- undefined -- >>> testJSaddle $ showJSValue <$> deRefVal True--- ValBool True+-- true -- >>> testJSaddle $ showJSValue <$> deRefVal False--- ValBool False+-- false -- >>> testJSaddle $ showJSValue <$> deRefVal (1.0 :: Double)--- ValNumber 1.0+-- 1.0 -- >>> testJSaddle $ showJSValue <$> deRefVal (0.0 :: Double)--- ValNumber 0.0+-- 0.0 -- >>> testJSaddle $ showJSValue <$> deRefVal ""--- ValString ""+-- "" -- >>> testJSaddle $ showJSValue <$> deRefVal "1"--- ValString "1"--- >>> testJSaddle $ showJSValue <$> valToObject True >>= deRefVal--- ValObject 0x...+-- "1"+-- >>> testJSaddle $ showJSValue <$> (valToObject True >>= deRefVal)+-- object deRefVal :: ToJSVal value => value -> JSM JSValue #ifdef ghcjs_HOST_OS deRefVal value = do@@ -629,15 +631,15 @@ -- | Make a JavaScript value out of a 'JSValue' ADT. -- -- >>> testJSaddle $ valMakeRef ValNull--- "null"+-- null -- >>> testJSaddle $ valMakeRef ValUndefined--- "undefined"+-- undefined -- >>> testJSaddle $ valMakeRef (ValBool True)--- "true"+-- true -- >>> testJSaddle $ valMakeRef (ValNumber 1)--- "1"--- >>> testJSaddle $ valMakeRef (ValString $ pack "Hello")--- "Hello"+-- 1+-- >>> testJSaddle $ valMakeRef (ValString $ T.pack "Hello")+-- Hello valMakeRef :: JSValue -> JSM JSVal valMakeRef value =     case value of
tests/DocTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module Main (     main ) where@@ -5,7 +6,27 @@ import Test.DocTest  main :: IO ()-main = doctest ["-isrc",+main = doctest [+    "-idist/build/autgen",+    "-optP-include",+    "-optPdist/build/autogen/cabal_macros.h",+    "-hide-all-packages",+#ifdef VERSION_gtk3+    "-package=gtk3-" ++ VERSION_gtk3,+    "-package=webkitgtk3-" ++ VERSION_webkitgtk3,+    "-package=webkitgtk3-javascriptcore-" ++ VERSION_webkitgtk3_javascriptcore,+#else+    "-package=gtk-" ++ VERSION_gtk,+    "-package=webkit-" ++ VERSION_webkit,+    "-package=webkit-javascriptcore-" ++ VERSION_webkit_javascriptcore,+#endif+    "-package=glib-" ++ VERSION_glib,+    "-package=template-haskell-" ++ VERSION_template_haskell,+    "-package=base-" ++ VERSION_base,+    "-package=lens-" ++ VERSION_lens,+    "-package=text-" ++ VERSION_text,+    "-package=transformers-" ++ VERSION_transformers,+    "-isrc",     "src/Language/Javascript/JSaddle/Arguments.hs",     "src/Language/Javascript/JSaddle/Classes.hs",     "src/Language/Javascript/JSaddle/Evaluate.hs",