panda-0.0: Panda/View/Blog.hs
module Panda.View.Blog where
import Kibro
import MPS
import Prelude hiding ((.), (/), id)
import Control.Arrow ((>>>))
import Panda.Helper.Helper
import Panda.View.Template
import Panda.Model.Blog as Blog
import Panda.Config.Global as Config
import Panda.Type.Pager as Pager
import Network.URI
import Text.RSS
import System.Time
import System.Locale
-- HTML
-- render single entry
entry x = [entry_title, entry_body, entry_mark] where
entry_title = div_class "span-24 last" << x.title_link
entry_body = div_class "span-23 last" << x.Blog.body.markup
entry_mark = div_class "span-4 last" << x.blog_date
entry_uri x = "/" ++ Blog.uid x.urlEncode.split "/".tail.join "/"
title_link x = h2 << hotlink (entry_uri x) << x.Blog.title
blog_date x = p << formatted where
formatted = x.Blog.date.formatCalendarTime defaultTimeLocale "- %b %e %Y"
-- entry view
view x = x.entry.page
-- list view
list p = for_current_page p >>> map entry >>> sep_by hr >>> (+++ hr) >>> (+++ nav p) >>> page
nav p =
[ div_class "span-2 append-20" << nav_previous p
, div_class "span-2 last" << nav_next p
]
nav_previous p = if p.Pager.has_previous
then h2 << hotlink ( "/" ++ "?page=" ++ p.Pager.previous.show ) << previous_sign
else spaceHtml
nav_next p = if p.Pager.has_next
then h2 << hotlink ( "/" ++ "?page=" ++ p.Pager.next.show ) << next_sign
else spaceHtml
next_sign = svg "treble_clef.svg.png" ">>>" 18 44
previous_sign = svg "bass_clef.svg.png" "<<<" 18 20
-- RSS
channel_rss_template =
[ Language "en-us"
]
item_rss_template x =
[ Title $ x.Blog.title
, Description $ x.Blog.body.markup.show
, Author $ Config.author_email
, Link $ x.item_uri
, PubDate $ x.Blog.date
]
item_uri x = URI
{ uriScheme = "http://"
, uriAuthority = Nothing
, uriPath = Config.host_name ++ x.entry_uri
, uriQuery = ""
, uriFragment = ""
}
rss xs = RSS Config.blog_title (rss_uri Config.host_name) Config.blog_title channel_rss_template (xs.take 20 .map item_rss_template)
.rssToXML.showXML