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