@@ -1,94 +1,11 @@
1name: servant-jquery
1name: servant-jquery
2−version: 0.2
2+version: 0.2.1
3synopsis: Automatically derive jquery-based javascript functions to query servant webservices
3synopsis: Automatically derive jquery-based javascript functions to query servant webservices
4description:
4description:
5 Automatically derive jquery-based javascript functions to query servant webservices.
5 Automatically derive jquery-based javascript functions to query servant webservices.
7− Example below that serves the generated javascript to a webpage that lets you
7+ Example <https://github.com/haskell-servant/servant-jquery/blob/master/examples/counter.hs here> that serves the generated javascript to a webpage that lets you
8 trigger webservice calls.
8 trigger webservice calls.
10− > {-# LANGUAGE DataKinds #-}
11− > {-# LANGUAGE TypeOperators #-}
12− > {-# LANGUAGE DeriveGeneric #-}
13− > {-# LANGUAGE GeneralizedNewtypeDeriving #-}
15− > import Control.Concurrent.STM
16− > import Control.Monad.IO.Class
19− > import GHC.Generics
20− > import Network.Wai.Handler.Warp (run)
22− > import Servant.JQuery
23− > import System.FilePath
25− > -- * A simple Counter data type
26− > newtype Counter = Counter { value :: Int }
27− > deriving (Generic, Show, Num)
29− > instance ToJSON Counter
31− > -- * Shared counter operations
33− > -- Creating a counter that starts from 0
34− > newCounter :: IO (TVar Counter)
35− > newCounter = newTVarIO 0
37− > -- Increasing the counter by 1
38− > counterPlusOne :: MonadIO m => TVar Counter -> m Counter
39− > counterPlusOne counter = liftIO . atomically $ do
40− > oldValue <- readTVar counter
41− > let newValue = oldValue + 1
42− > writeTVar counter newValue
45− > currentValue :: MonadIO m => TVar Counter -> m Counter
46− > currentValue counter = liftIO $ readTVarIO counter
49− > type TestApi = "counter" :> Post Counter -- endpoint for increasing the counter
50− > :<|> "counter" :> Get Counter -- endpoint to get the current value
51− > :<|> Raw -- used for serving static files
53− > testApi :: Proxy TestApi
56− > -- * Server-side handler
58− > -- where our static files reside
60− > www = "examples/www"
62− > -- defining handlers
63− > server :: TVar Counter -> Server TestApi
64− > server counter = counterPlusOne counter -- (+1) on the TVar
65− > :<|> currentValue counter -- read the TVar
66− > :<|> serveDirectory www -- serve static files
68− > runServer :: TVar Counter -- ^ shared variable for the counter
69− > -> Int -- ^ port the server should listen on
71− > runServer var port = run port (serve testApi $ server var)
73− > -- * Generating the JQuery code
75− > incCounterJS :<|> currentValueJS :<|> _ = jquery testApi
77− > writeJS :: FilePath -> [AjaxReq] -> IO ()
78− > writeJS fp functions = writeFile fp $
79− > concatMap generateJS functions
83− > -- write the JS code to www/api.js at startup
84− > writeJS (www </> "api.js")
85− > [ incCounterJS, currentValueJS ]
87− > -- setup a shared counter
90− > -- listen to requests on port 8080
92license: BSD3
9license: BSD3
93license-file: LICENSE
10license-file: LICENSE
94author: Alp Mestanogullari
11author: Alp Mestanogullari
@@ -103,10 +20,15 @@ source-repository head
103 type: git
20 type: git
104 location: http://github.com/haskell-servant/servant-jquery.git
21 location: http://github.com/haskell-servant/servant-jquery.git
24+ description: Build the example too
107 exposed-modules: Servant.JQuery
29 exposed-modules: Servant.JQuery
108 other-modules: Servant.JQuery.Internal
30 other-modules: Servant.JQuery.Internal
109− build-depends: base >=4.5 && <5, servant >= 0.2, lens >= 4
31+ build-depends: base >=4.5 && <5, servant >= 0.2.1, lens >= 4
110 hs-source-dirs: src
32 hs-source-dirs: src
111 default-language: Haskell2010
33 default-language: Haskell2010
112 ghc-options: -Wall
34 ghc-options: -Wall
@@ -115,12 +37,19 @@ executable counter
115 main-is: counter.hs
37 main-is: counter.hs
116 ghc-options: -O2 -Wall
38 ghc-options: -O2 -Wall
117 hs-source-dirs: examples
39 hs-source-dirs: examples
118 build-depends:
46 build-depends:
121 , filepath
49 , filepath
122− , servant >= 0.2
50+ , servant >= 0.2.1
51+ , servant-server >= 0.2.1
123− , servant-jquery >= 0.2
52+ , servant-jquery >= 0.2.1
125 , transformers
54 , transformers