[Fencommits] fenserve: refactor; fix (insert "&" between query parameters)
Benja Fallenstein
benja.fallenstein at gmail.com
Thu May 31 12:04:51 EEST 2007
Thu May 31 01:50:03 EEST 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* refactor; fix (insert "&" between query parameters)
diff -rN -u old-fenserve/fendata/Main.hs new-fenserve/fendata/Main.hs
--- old-fenserve/fendata/Main.hs 2007-05-31 12:04:50.000000000 +0300
+++ new-fenserve/fendata/Main.hs 2007-05-31 12:04:50.000000000 +0300
@@ -281,13 +281,13 @@
main = stdHTTP [ debugFilter
, h (Prefix ()) () $ \(path::[String]) req ->
- getTime >>= \time ->
- let ?time = time; ?req = req
+ getTime >>= \time -> get >>= \state ->
+ let ?time = time; ?state = state; ?req = req
?root = concatMap (const "../") $ drop 1 path
in runServerParts [app] req
]
-app :: (?root :: String, ?time :: Int64)
+app :: (?root :: String, ?time :: Int64, ?req :: Request, ?state :: MyState)
=> ServerPart (Ev MyState ev) Request IO Result
app = multi [ h ["potion"] GET $ ok $ \() -> run $
\req s -> potionGet (read $ fromJust $ lookM req "exp") (readArgs req) (lookM req "name") s
@@ -308,22 +308,18 @@
, h ["delItem"] POST $ seeOther $ \() -> runRedirect delItem
, h [""] GET $ seeOther $ \() -> runRedirect $ \() s -> ("potion/" ++ (case head $ stateSidebarPages s of (fn,args) -> fn ++ concat ["/"++a | a <- args]), s)
- , h ["addField"] GET $ ok $ \() req ->
- let Just cat = lookM req "category"
- Just item = lookM req "item"
- returnTo = fromMaybe ("item/"++item) (lookM req "returnTo")
- 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=hidden name=returnTo value='"++html returnTo++"'>\
- \<input type=submit value='Submit'></form>"
+ , h ["addField"] GET $ ok $ \() () -> respond $ html $
+ ( h2 ("Add field to category ", lookE "category")
+ , formP "" ( "Field: " & textfield "field" ""
+ , channel ["category", "item"]
+ , hidden "returnTo" $ lookI "returnTo" $
+ "item/"++lookE "item"
+ , submit "Submit" ) )
, h ["addField"] POST $ seeOther $ \() -> runRedirect addField
- , h ["addCategory"] GET $ ok $ \() () -> respond $
- "<h2>Add category</h2>\
- \<form method=post>Name: <input name=name>\
- \<input type=submit value='Submit'></form>"
+ , h ["addCategory"] GET $ ok $ \() () -> respond $ html $
+ ( h2 "Add category"
+ , formP "" ( "Name: " & textfield "name" ""
+ , submit "Submit" ) )
, h ["addCategory"] POST $ seeOther $ \() -> runRedirect addCategory
, h ["addpotion"] POST $ seeOther $ \() -> runRedirect addPotion
, h ["addToSidebar"] POST $ seeOther $ \() -> runRedirect addToSidebar
diff -rN -u old-fenserve/fendata/PotionTypes.hs new-fenserve/fendata/PotionTypes.hs
--- old-fenserve/fendata/PotionTypes.hs 2007-05-31 12:04:50.000000000 +0300
+++ new-fenserve/fendata/PotionTypes.hs 2007-05-31 12:04:50.000000000 +0300
@@ -44,6 +44,9 @@
data Item = Item { itemFields :: Map String String, itemCategories :: Set String }
deriving (Read, Show, Typeable, Data)
+
+u_fields f i = i { itemFields = f (itemFields i) }
+u_categories f i = i { itemCategories = f (itemCategories i) }
nextId :: Map Id a -> Id
nextId m = if Map.null m then 0 else fst (Map.findMax m) + 1
@@ -54,4 +57,8 @@
stateSidebarPages :: [(String, [String])] }
deriving (Read, Show, Typeable, Data)
+u_items f s = s { stateItems = f (stateItems s) }
+u_schema f s = s { stateSchema = f (stateSchema s) }
+u_potions f s = s { statePotions = f (statePotions s) }
+u_sidebarPages f s = s { stateSidebarPages = f (stateSidebarPages s) }
diff -rN -u old-fenserve/fendata/Utils.hs new-fenserve/fendata/Utils.hs
--- old-fenserve/fendata/Utils.hs 2007-05-31 12:04:50.000000000 +0300
+++ new-fenserve/fendata/Utils.hs 2007-05-31 12:04:50.000000000 +0300
@@ -7,6 +7,7 @@
import Data.Char (toUpper, toLower)
import Data.List (intersperse)
+import Data.Maybe (fromMaybe)
for :: [a] -> (a -> b) -> [b]
@@ -20,8 +21,15 @@
escapeMore '[' = "%5b"; escapeMore ']' = "%5d";
escapeMore '&' = "%26"; escapeMore c = [c]
-qlink path params = link $ ?root ++ path ++ "?" ++ concatFor params
- (\(P k v) -> k++"="++escape' (toString v))
+qlink path params = link $ ?root ++ path ++ "?" ++
+ concat (intersperse "&" $ for params $ \(P k v) ->
+ k ++ "=" ++ escape' (toString v))
+
+
+lookI :: (?req :: Request) => String -> String -> String
+lookI field deflt = fromMaybe deflt (lookM ?req field)
+
+lookE field = lookI field ""
commaList :: ToHTML a => [a] -> HTML
@@ -42,6 +50,6 @@
mdot = style "margin-left: 0.5em; margin-right: 0.5em; font-weight: bold" $
HTML "·"
-mdotted = cat . intersperse (" "&mdot&" ")
+mdotted = cat . intersperse (" " & mdot & " ")
More information about the Fencommits
mailing list