packages feed

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