[Fencommits] fenserve: make the table view a potion
Benja Fallenstein
benja.fallenstein at gmail.com
Sat Jun 9 07:07:48 EEST 2007
Sat Jun 9 07:07:01 EEST 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* make the table view a potion
diff -rN -u old-fenserve-1/fendata/Main.hs new-fenserve-1/fendata/Main.hs
--- old-fenserve-1/fendata/Main.hs 2007-06-09 07:07:46.000000000 +0300
+++ new-fenserve-1/fendata/Main.hs 2007-06-09 07:07:46.000000000 +0300
@@ -18,6 +18,7 @@
, h (Prefix ()) () $ \(path::[String]) req -> do
getTime -> time; get -> state :: DB
let ?time = time; ?state = state; ?db = state; ?req = req
+ ?funs = Map.empty
?root = concatMap (const "../") $ drop 1 path
runServerParts [app] req
]
@@ -83,15 +84,12 @@
forM_ rows $ \r -> do
item <- new_item $ Set.singleton cat
forM_ (zip fields r) $ \(field, value) ->
- modify $ u_value item field [InlineValue value]
+ modify $ u_value item field [InlineValue $ toHTML value]
, page ["table"] "Table"
( h2 "Table of all data in the database (if any)"
, catFor (Map.elems $ dbCategories ?db) $ \(Category cat name fs) ->
( h3 ("Category ", name)
- , tag "table" [P "border" "1"]
- ( tag "tr" [] $ catFor fs $ tag "th" [] . fieldName . getField
- , catFor (getItems cat) $ \(Item _ _ vs) ->
- ( tag "tr" [] $ catFor fs $ \f ->
- tag "td" [] $ renderValues $ Map.findWithDefault [] f vs))))
+ , renderValues $ runExp [] $ TableView (AllItems cat) $
+ map (\f -> (fieldName $ getField f, GetField f (Var 0))) fs))
]
diff -rN -u old-fenserve-1/fendata/Potions.hs new-fenserve-1/fendata/Potions.hs
--- old-fenserve-1/fendata/Potions.hs 2007-06-09 07:07:46.000000000 +0300
+++ new-fenserve-1/fendata/Potions.hs 2007-06-09 07:07:46.000000000 +0300
@@ -75,8 +75,8 @@
f DateType = "date"
f (ItemType cat) = catName $ getCategory cat
-renderValue (InlineValue s) = toHTML s
-renderValue (BlockValue s) = toHTML s -- XXX
+renderValue (InlineValue s) = s
+renderValue (BlockValue s) = s
renderValue (BooleanValue False) = toHTML "No"
renderValue (BooleanValue True) = toHTML "Yes"
renderValue (NumberValue x) = toHTML (show x)
@@ -97,7 +97,7 @@
template (Call fun _) = map html $ templateHTML tmp where
Fun tmp _ _ = ?funs Map.! fun
template (Literal vals) = [html $ renderValues vals]
- template (GetField _ field _) =
+ template (GetField field _) =
["the " ++ (fieldName $ getField field) ++ " of ", ""]
template (AllItems cat) =
["all the " ++ (plural $ catName $ getCategory cat)
@@ -129,7 +129,7 @@
runExp env (Call fun exps) = runExp (map (runExp env) exps) body where
Fun _ _ body = ?funs Map.! fun
runExp env (Literal val) = val
-runExp env (GetField _ field exp) = do
+runExp env (GetField field exp) = do
ItemValue _ item <- runExp env exp; getValue item field
runExp env (AllItems cat) = map (ItemValue cat) $ map itemId $ getItems cat
runExp env (Sort exp sortKeyExp order) = f sorted where
@@ -156,4 +156,9 @@
[BooleanValue True] -> e2; [BooleanValue False] -> e3
runExp env Today = [DateValue (ctYear t) (fromEnum (ctMonth t)+1) (ctDay t)]
where t = toUTCTime (TOD (fromIntegral ?time) 0)
-
+runExp env (TableView exp columns) = return $ BlockValue $
+ tag "table" [P "border" "1"]
+ ( tag "tr" [] $ catFor columns $ tag "th" [] . fst
+ , catFor (runExp env exp) $ \item -> tag "tr" [] $
+ catFor columns $ \(_,exp') ->
+ tag "td" [] $ renderValues $ runExp ([item]:env) exp' )
diff -rN -u old-fenserve-1/fendata/Types.hs new-fenserve-1/fendata/Types.hs
--- old-fenserve-1/fendata/Types.hs 2007-06-09 07:07:46.000000000 +0300
+++ new-fenserve-1/fendata/Types.hs 2007-06-09 07:07:46.000000000 +0300
@@ -33,8 +33,8 @@
data Type = Single BaseType | Multiple BaseType
deriving (Read, Show, Typeable, Data, Eq, Ord)
-data Value = InlineValue String
- | BlockValue String
+data Value = InlineValue HTML
+ | BlockValue HTML
| BooleanValue Bool
| NumberValue { numberValue :: Float }
| EmailValue String
@@ -104,8 +104,7 @@
in (i, Map.insert i x m)
new_category name = mfix $ \cat -> do
- field <- new_field "Name" cat $ Single InlineType
- inside dbCategories u_dbCategories $ new $ Category cat name [field]
+ inside dbCategories u_dbCategories $ new $ Category cat name []
new_field name cat ty = mfix $ \field -> do
modify $ u_cat cat $ u_catFields $ (++[field])
@@ -147,7 +146,7 @@
data Exp = Var Int
| Call FunId [Exp]
| Literal Values
- | GetField CategoryId FieldId Exp
+ | GetField FieldId Exp
| AllItems CategoryId
| Sort Exp Exp Order
| Filter Exp Exp
@@ -156,6 +155,8 @@
| IfThenElse Exp Exp Exp
| Today
+ | TableView Exp [(String, Exp)]
+
| Question Type | Focus Exp
deriving (Read, Show, Typeable, Data, Eq, Ord)
More information about the Fencommits
mailing list