[Fencommits] fenserve: specify in a parameter where editing an item redirects
Benja Fallenstein
benja.fallenstein at gmail.com
Wed May 23 16:34:49 EEST 2007
Wed May 23 16:34:40 EEST 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* specify in a parameter where editing an item redirects
diff -rN -u old-fenserve/fendata/Main.hs new-fenserve/fendata/Main.hs
--- old-fenserve/fendata/Main.hs 2007-05-23 16:34:49.000000000 +0300
+++ new-fenserve/fendata/Main.hs 2007-05-23 16:34:49.000000000 +0300
@@ -390,11 +390,12 @@
concatFor (Map.toList $ stateItems s) $ \(id, Item fields _) ->
(++ "<p><form action='delItem' method=post>\
\<input type=hidden name=item value='"++show id++"'>\
- \<a href='item/"++show id++"'>[Edit item]</a> "++mdot++"\
+ \<a href='item/"++show id++"?returnTo=table'>[Edit item]</a> "++mdot++"\
\<button style='cursor: pointer; background: none; border: none; font: inherit; margin: 0; padding: 0'>[Delete item]</button></form><hr>") . ("<p>"++)
. concatFor (Map.toList fields) $ \(f:fs,v) ->
"<b>" ++ (toUpper f : fs) ++ ":</b> " ++ v ++ "<br>",
- s) where new = ("<p><form action='newItem' method=post>" ++) .
+ s) where new = ("<p><form action='newItem' method=post>\
+ \<input type=hidden name=returnTo value=table>" ++) .
(++"<a href='addCategory'>[Add category]</a></form>") .
concatFor (Map.keys $ stateSchema s) $ \cat ->
"<button style='cursor: pointer; background: none; border: none; font: inherit; margin: 0; padding: 0' name=cat value='"++cat++"'>[New "++cat++"]</button>"++mdot
@@ -402,23 +403,27 @@
mdot = "<span style='margin-left: 0.5em; margin-right: 0.5em; font-weight: bold'>·</span>"
-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>") .
+showItem :: String -> Request -> MyState -> (String, MyState)
+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 ->
field ++ ": <input name='" ++ quote field ++ "' "
++ "value='" ++ quote (fields Map.! field) ++ "'><br>",
- s)
+ s) where returnTo = flip (maybe "") (lookM req "returnTo") $ \uri ->
+ "<input type=hidden name=returnTo value='"++quote(escape uri)++"'>"
+
updateItem :: String -> Request -> MyState -> (String, MyState)
-updateItem item_s req s = ("/table", s') where
+updateItem item_s req s = (returnTo, s') where
+ returnTo = maybe "" ("../"++) (lookM req "returnTo")
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)
-newItem msg s = ("item/"++show id, s') where
+newItem msg s = ("item/"++show id++returnTo, s') where
+ returnTo = maybe "" (("?returnTo="++) . escape) (lookM msg "returnTo")
id = nextId $ stateItems s
s' = s { stateItems = Map.insert id item $ stateItems s }
item = Item (Map.fromList $ [(f,"") | f <- catFs]) (Set.fromList [cat])
More information about the Fencommits
mailing list