happstack-0.4.1: templates/project/src/GuestBook/View.hs
{-# LANGUAGE FlexibleContexts, FlexibleInstances, MultiParamTypeClasses #-}
{-# OPTIONS_GHC -F -pgmFtrhsx #-}
module GuestBook.View where
import GuestBook.State2 (GuestBook(..),GuestBookEntry(..))
import HSP
import qualified HSX.XMLGenerator as HSX (XML)
import System.Locale (defaultTimeLocale)
import System.Time(ClockTime(..), formatCalendarTime, toUTCTime)
-- * Convenience Functions
dateStr :: ClockTime -> String
dateStr ct =
formatCalendarTime
defaultTimeLocale
"%a, %B %d, %Y at %H:%M:%S (UTC)"
(toUTCTime ct)
-- * Main Implementation
instance (XMLGenerator m) => (EmbedAsChild m (GuestBookEntry, Bool)) where
asChild ((GuestBookEntry author message date email), alt) =
<%
<li class=(if alt then "alt" else "")>
<strong><% author ++ (displayemail email) %></strong> said:<br /><br />
<% map p (lines message) %>
<br />
<small class="commentmetadata"><% dateStr date %></small>
</li>
%>
where p str = <p><% str %></p>
displayemail "" = ""
displayemail x = "<" ++ x ++ ">"
instance (XMLGenerator m) => (EmbedAsChild m GuestBook) where
asChild (GuestBook entries) =
<%
<div>
<h2 id="comments" class="h2comment">Words of Wisdom</h2>
<div class="clear" />
<ul class="commentlist">
<% zip entries (cycle [False,True]) %>
</ul>
</div>
%>
seeOtherXML :: (XMLGenerator m) => String -> XMLGenT m (HSX.XML m)
seeOtherXML url = <a href=url alt="303 see other"><% url %></a>