[Fencommits] fenserve: links to add fields in the item view
Tuukka Hastrup
Tuukka.Hastrup at iki.fi
Wed May 23 17:03:00 EEST 2007
Wed May 23 17:02:29 EEST 2007 Tuukka Hastrup <Tuukka.Hastrup at iki.fi>
* links to add fields in the item view
diff -rN -u old-fenserve/fendata/Main.hs new-fenserve/fendata/Main.hs
--- old-fenserve/fendata/Main.hs 2007-05-23 17:03:00.000000000 +0300
+++ new-fenserve/fendata/Main.hs 2007-05-23 17:03:00.000000000 +0300
@@ -261,11 +261,17 @@
ty <- lookM m "type"
return (read exp, read old, read ty)
-addField cat name = do
- state <- get
- let fs = stateSchema state Map.! cat
- put $ state { stateSchema = Map.insert cat (fs ++ [name]) (stateSchema state) }
- view
+addField req state = ("item/"++item,state') where
+ state' = state { stateSchema = Map.insert cat (fs ++ [name]) (stateSchema state),
+ stateItems = Map.map addField' (stateItems state) }
+ fs = stateSchema state Map.! cat
+ addField' item@(Item fields cats)
+ | cat `Set.member` cats
+ = Item (Map.union fields (Map.singleton name "")) cats
+ | otherwise = item
+ Just cat = lookM req "category"
+ Just item = lookM req "item"
+ Just name = lookM req "field"
addCategory (c:cs) s = ("table",
s { stateSchema = Map.insert (toLower c : cs) [] $ stateSchema s})
@@ -420,7 +426,10 @@
showItem item req s = let Item fields cats = stateItems s Map.! read item in (
(("<form method=post>"++returnTo)++) . (++"<p><input type=submit></form>") .
concatFor (Set.toList cats) $ \cat -> let cfs = stateSchema s Map.! cat in
- (("<p>"++cat++":<br>")++) . concatFor cfs $ \field ->
+ (("<p>"++cat++":<br>")++)
+ . (++ "<a href='/addField?item="++item++"&category="++cat
+ ++ "'>[add field to "++cat++"]</a><br>")
+ . concatFor cfs $ \field ->
field ++ ": <input name='" ++ quote field ++ "' "
++ "value='" ++ quote (fields Map.! field) ++ "'><br>",
s) where returnTo = flip (maybe "") (lookM req "returnTo") $ \uri ->
@@ -467,7 +476,16 @@
, h ["delItem"] POST $ seeOther $ \() -> runRedirect delItem
, h [""] GET $ ok $ \() () -> view
- , h ["addfield"] POST $ ok $ \() (cid,name) -> addField cid name
+ , h ["addField"] GET $ ok $ \() req ->
+ let Just cat = lookM req "category"
+ Just item = lookM req "item"
+ in respond $
+ "<h2>Add field to category "++cat++"</h2>\
+ \<form method=post>Field: <input name=field>\
+ \<input type=hidden name=category value='"++cat++"'>\
+ \<input type=hidden name=item value='"++item++"'>\
+ \<input type=submit value='Submit'></form>"
+ , h ["addField"] POST $ seeOther $ \() -> runRedirect addField
, h ["addCategory"] GET $ ok $ \() () -> respond $
"<h2>Add category</h2>\
\<form method=post>Name: <input name=name>\
More information about the Fencommits
mailing list