[Fencommits] fenserve: simple item editing interface (in Haskell)
Benja Fallenstein
benja.fallenstein at gmail.com
Wed May 23 00:28:22 EEST 2007
Wed May 23 00:28:06 EEST 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* simple item editing interface (in Haskell)
diff -rN -u old-fenserve/fendata/Main.hs new-fenserve/fendata/Main.hs
--- old-fenserve/fendata/Main.hs 2007-05-23 00:28:22.000000000 +0300
+++ new-fenserve/fendata/Main.hs 2007-05-23 00:28:22.000000000 +0300
@@ -4,7 +4,7 @@
import Control.Monad.State
import Data.Generics (Typeable, Data, everywhere, mkT)
import Data.Binary hiding (get,put)
-import Data.Maybe (fromJust)
+import Data.Maybe (fromJust, fromMaybe)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Set (Set)
@@ -389,9 +389,26 @@
showTable :: () -> MyState -> (String, MyState)
showTable () s = (
concatFor (Map.toList $ stateItems s) $ \(_, Item fields _) ->
- ("<p>"++) . concatFor (Map.toList fields) $ \(f:fs,v) ->
+ ("<p>"++) . (++"<hr>") . concatFor (Map.toList fields) $ \(f:fs,v) ->
"<b>" ++ (toUpper f : fs) ++ ":</b> " ++ v ++ "<br>",
s)
+
+showItem :: String -> () -> MyState -> (String, MyState)
+showItem item () s = let Item fields cats = stateItems s Map.! read item in (
+ ("<form method=post>"++) . (++"<p><input type=submit></form>") .
+ concatFor (Set.toList cats) $ \cat -> let cfs = stateSchema s Map.! cat in
+ (("<p>"++cat++":<br>")++) . concatFor cfs $ \field ->
+ field ++ ": <input name='" ++ quote field ++ "' "
+ ++ "value='" ++ quote (fields Map.! field) ++ "'><br>",
+ s)
+
+updateItem :: String -> Request -> MyState -> (String, MyState)
+updateItem item_s req s = (fst $ showItem item_s () s', s') where
+ item = read item_s
+ s' = s { stateItems = Map.insert item (Item fields' cats) (stateItems s) }
+ Item fields cats = stateItems s Map.! item
+ fields' = flip Map.mapWithKey fields $ \k v -> fromMaybe v (lookM req k)
+
main = stdHTTP [ debugFilter
, h ["potion"] GET $ ok $ \() -> run $
@@ -406,6 +423,8 @@
, h ["editTemplate"] GET $ seeOther $ \() -> runRedirect editTemplate
, h ["makefun"] GET $ ok $ \() -> run makeFun
, h ["table"] GET $ ok $ \() -> run showTable
+ , h (Prefix ["item"]) GET $ ok $ \[item] -> run (showItem item)
+ , h (Prefix ["item"]) POST $ ok $ \[item] -> run (updateItem item)
, h [""] GET $ ok $ \() () -> view
, h ["addfield"] POST $ ok $ \() (cid,name) -> addField cid name
More information about the Fencommits
mailing list