packages feed

panda-0.0.0.3: Panda/View/Theme/BluePrint/Post.hs

module Panda.View.Theme.BluePrint.Post where

-- env
import Panda.Helper.Env
import Prelude hiding ((.), (/), id, span)
import Panda.Config.Global as Config
import qualified Panda.Type.State as State
import Text.XHtml.Strict

import Panda.Type.Pager as Pager
import System.Time
import System.Locale
import qualified Panda.Type.State as State

-- model
import Panda.Model.Post as Post

-- view
import Panda.View.Theme.BluePrint.Helper
import Panda.View.Theme.BluePrint.Template.Template

-- HTML
-- render single entry
entry x = div_class "post" << [entry_title, entry_mark, entry_body] where
  entry_title = x.title_link
  entry_body  = div_class "entry" << x.Post.body.markup
  entry_mark  = p ! [theclass "small"] << 
    [ x.blog_date, x.blog_tags ]

title_link x              = h2 << hotlink (entry_uri x) << x.Post.title
entry_uri x               = "/" ++ Post.uid x.urlEncode.split "/".tail.join "/"
blog_date x               = toHtml $ x.Post.date.formatCalendarTime defaultTimeLocale "%b %e, %Y"

blog_tags x | x.tags.null = toHtml ""
blog_tags x | otherwise   = toHtml " | " +++ toHtml ["Published in ".toHtml, x.tags.map tag_link .intersperse (", ".toHtml) .toHtml]

tag_link s                = toHtml $ hotlink ("/tag/" ++ s ) << s


-- entry view
view state x = x.entry.page state
  
-- list view
list state = for_current_page p >>> map entry >>> (+++ nav p "/") >>> page state
  where p = state.State.pager