[Fencommits] fenserve: start working on board demo -- it can render something, but the data is static, not loaded from the server state
Benja Fallenstein
benja.fallenstein at gmail.com
Thu Mar 22 19:49:11 EET 2007
Wed Mar 21 23:07:21 EET 2007 Benja Fallenstein <benja.fallenstein at gmail.com>
* start working on board demo -- it can render something, but the data is static, not loaded from the server state
diff -rN -u old-fenserve/FenServe.hs new-fenserve/FenServe.hs
--- old-fenserve/FenServe.hs 2007-03-22 19:49:10.000000000 +0200
+++ new-fenserve/FenServe.hs 2007-03-22 19:49:10.000000000 +0200
@@ -217,7 +217,7 @@
mkResult 500 "text/plain" $ toUTF $ stage ++ " failed:\n" ++ msg
h <- case Hsx.parseModuleWithMode (Hsx.ParseMode "Page.hs") $ fromUTF s of
ParseFailed (SrcLoc file line col) err -> errH "HSP preprocessing" $
- "At"++show line++":"++show col++" in "++file++": "++err
+ "At "++show line++":"++show col++" in "++file++": "++err
ParseOk parsed -> return $ unsafePerformIO $ do
--putStrLn "STARTING"
let s' = Hsx.prettyPrintWithMode (Hsx.defaultMode
diff -rN -u old-fenserve/Page.stub new-fenserve/Page.stub
--- old-fenserve/Page.stub 2007-03-22 19:49:10.000000000 +0200
+++ new-fenserve/Page.stub 2007-03-22 19:49:10.000000000 +0200
@@ -3,18 +3,13 @@
-}
module PageStub where
-import HAppS hiding (Handler)
+import HAppS hiding (Handler, query)
import Storm (toUTF)
import FenServe
import qualified Data.Map
-page :: HTML
-
-handler :: Handler
-handler = pageHandler page
-
pageHandler :: HTML -> Handler
pageHandler html _request = return $ mkResult 200 "text/html" (toUTF html)
diff -rN -u old-fenserve/board-demo.page new-fenserve/board-demo.page
--- old-fenserve/board-demo.page 1970-01-01 02:00:00.000000000 +0200
+++ new-fenserve/board-demo.page 2007-03-22 19:49:10.000000000 +0200
@@ -0,0 +1,71 @@
+
+import Fenfire.RDF
+
+dc = "http://purl.org/dc/elements/1.1/"
+dcterms = "http://purl.org/dc/terms/"
+sioc = "http://rdfs.org/sioc/ns#"
+content = "http://purl.org/rss/1.0/modules/content/"
+
+dc_title = IRI $ dc ++ "title"
+dc_description = IRI $ dc ++ "description"
+dc_creator = IRI $ dc ++ "creator"
+dcterms_created = IRI $ dcterms ++ "created"
+dcterms_modified = IRI $ dcterms ++ "modified"
+content_encoded = IRI $ content ++ "encoded"
+sioc_reply_of = IRI $ sioc ++ "reply_of"
+sioc_has_container = IRI $ sioc ++ "has_container"
+
+postTitle p = literalStr $ query (p, dc_title, X) ?graph
+postAuthor p = literalStr $ query (p, dc_creator, X) ?graph
+postDate p = literalStr $ query (p, dcterms_modified, X) ?graph
+postContent p = literalStr $ query (p, content_encoded, X) ?graph
+boardTitle b = literalStr $ query (b, dc_title, X) ?graph
+boardDesc b = literalStr $ query (b, dc_description, X) ?graph
+
+boardPosts :: (?graph :: Graph) => Node -> [Node]
+boardPosts board = [post | post <- query (X, sioc_has_container, board) ?graph,
+ not $ query (post, sioc_reply_of, Any) ?graph]
+
+postReplies post = query (X, sioc_reply_of, post) ?graph :: [Node]
+
+lit s = Literal s Plain
+blog = IRI "ex:blog"; post = IRI "ex:post"
+
+example = toGraph (IRI "ex:graph") [
+ (blog, dc_title, lit "Benja's Blog"),
+ (blog, dc_description, lit "Benja Fallenstein"),
+ (post, dc_title, lit "Hi there!"),
+ (post, content_encoded, lit $ <div><p>Well, I'm blogging, ain't I?</p>
+ <p>Yep, sure am, sure am.</p></div>),
+ (post, dcterms_created, lit "someday"),
+ (post, dcterms_modified, lit "someday"),
+ (post, dc_creator, lit "Benja"),
+ (post, sioc_has_container, blog) ]
+
+blockquote html = <blockquote><% html %></blockquote>
+
+renderPost :: (?graph :: Graph) => Node -> HTML
+renderPost p = let replyURI = "/post?inReplyTo=" ++ iriStr p
+ editURI = "/edit?post=" ++ iriStr p in
+ <div>
+ <h2><% postTitle p %> (<a href=editURI><i>Edit this</i></a> | <a
+ href=replyURI><i>Reply to this</i></a>)</h2>
+ <p>Posted by <b><i><% postAuthor p %></i></b> on <% postDate p %></p>
+ <% postContent p %>
+ <% concatMap (blockquote . renderPost) (postReplies p) %>
+ </div>
+
+renderBoard :: (?graph :: Graph) => Node -> HTML
+renderBoard b = simplePage (boardTitle b) $
+ boardDesc b ++ concatMap ((<hr/> ++) . renderPost) (boardPosts b)
+
+simplePage title body =
+ <html>
+ <head><title><% title %></title></head>
+ <body>
+ <h1><% title %></h1>
+ <% body %>
+ </body>
+ </html>
+
+handler = pageHandler $ let ?graph = example in renderBoard blog
diff -rN -u old-fenserve/demo.page new-fenserve/demo.page
--- old-fenserve/demo.page 2007-03-22 19:49:10.000000000 +0200
+++ new-fenserve/demo.page 2007-03-22 19:49:10.000000000 +0200
@@ -1,4 +1,6 @@
+<% handler = pageHandler page %>
+
<body>
<h1>Hello, world!</h1>
<p>I can generate & send HTML, how cool is that?</p>
diff -rN -u old-fenserve/handler-demo.page new-fenserve/handler-demo.page
--- old-fenserve/handler-demo.page 1970-01-01 02:00:00.000000000 +0200
+++ new-fenserve/handler-demo.page 2007-03-22 19:49:10.000000000 +0200
@@ -0,0 +1,4 @@
+
+handler req = do
+ getURI ["testdata","foo"] req
+
diff -rN -u old-fenserve/put new-fenserve/put
--- old-fenserve/put 2007-03-22 19:49:10.000000000 +0200
+++ new-fenserve/put 2007-03-22 19:49:10.000000000 +0200
@@ -1,2 +1,2 @@
#!/bin/sh
-curl -X PUT -d "$2" http://localhost:8000/$1
+curl -X PUT --data-binary "$2" http://localhost:8000/$1
More information about the Fencommits
mailing list