Mercurial > hg > Members > toma > bulletinboard
view RouteSetting.hs @ 0:622f5598f951
Initial Commit
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 17 Jun 2013 05:15:33 +0900 |
parents | |
children | 616d3e6ce483 |
line wrap: on
line source
{-# LANGUAGE OverloadedStrings #-} module RouteSetting (routeSetting) where import Types import Network.Wai (Response, responseLBS) import Network.Wai.Parse (Param) import Network.HTTP.Types (status200) import Network.HTTP.Types.URI (Query) import Control.Concurrent.STM import Data.ByteString.Lazy.Char8 as B (ByteString, append, pack) import Data.ByteString.Lazy.UTF8 (fromString) import Data.ByteString.Char8 (unpack) import Data.Text (Text) import qualified Jungle as J routeSetting :: [([Text],(TJungle -> Query -> [Param] -> IO Response))] routeSetting = [([], showBoard), (["createBoard"], createBoard), (["showBoardMessage"],showBoardMessage), (["createBoardMessage"],createBoardMessage), (["editMessage"],editMessage)] showBoard jungle query params = do new_jungle <- modifyJungle' jungle params let responseText = makeResponseText new_jungle return $ responseLBS status200 [("Content-type", "text/html")] $ responseText otherfunc jungle query params = do return $ responseLBS status200 [("Content-type", "text/html")] $ "otherfunc" createBoard jungle query params = do return $ responseLBS status200 [("Content-type", "text/html")] $ "createBoard" showBoardMessage jungle query params = do return $ responseLBS status200 [("Content-type", "text/html")] $ "showBoardMessage" createBoardMessage jungle query params = do return $ responseLBS status200 [("Content-type", "text/html")] $ "createBoardMessage" editMessage jungle query params = do return $ responseLBS status200 [("Content-type", "text/html")] $ "editMessage" makeResponseText :: (Show a) => a -> B.ByteString makeResponseText s = form `append` "<h1>Hello " `append` (toByteString s) `append` "</h1>\n" where form = "<form method=\"POST\" action=\"#\"><input name=\"key\" type=\"text\"><input name=\"value\" type=\"text\"><input type=\"submit\"></form>" toByteString :: (Show a) => a -> B.ByteString toByteString s = fromString $ show s modifyJungle' :: TJungle -> [Param] -> IO J.Jungle modifyJungle' jungle [] = atomically $ readTVar jungle modifyJungle' jungle (key:value:xs) = atomically $ test jungle (unpack $ snd key) (unpack $ snd value) add :: TJungle -> String -> String -> STM () add tv key value = do jungle <- readTVar tv let new_jungle = putAttribute jungle "boards" [] key (B.pack value) writeTVar tv new_jungle test jungle key value = do add jungle key value readTVar jungle putAttribute :: J.Jungle -> String -> J.Path -> String -> B.ByteString -> J.Jungle putAttribute jungle tree_name path key value = new_jungle jungle where new_tree jungle = J.putAttribute (J.getTreeByName jungle tree_name) path key value new_jungle jungle = J.updateTree jungle (new_tree jungle)