packages feed

primula-board-0.0.1: DisplayHTML.hs

-- | DisplayHTML.hs
-- A module which contain functions for display html from board
-- structures.

module DisplayHTML (
    displayOneThread,
    displayBoard,
    displayError
) where

import Board
import HTML

import HSP

-- | Display full thread by call displayThread and glue it with full
-- page template.
displayOneThread :: TagPosts -> HSP XML
displayOneThread tagPosts@(tag, _, _) =
    fullPageTemplate True tag [displayThread True tagPosts]

-- | Display board by gluing partial threads.
displayBoard :: String -> (Int, Int) -> [TagPosts] -> HSP XML
displayBoard tagsStr pages tagsPosts = fullPageTemplate False tagsStr $
    map (displayThread False) tagsPosts++[pagesTemplate tagsStr pages]

displayError :: String -> HSP XML
displayError = errorPageTemplate

---

-- | Display full or partial thread.
displayThread :: Bool -> TagPosts -> HSP XML
displayThread full (tag, omitted, posts) = threadTemplate full tag num $
    case lenPosts of
      0 -> [displayError "Error! Empty thread."] -- should not happened
      1 -> [opPost]
      _ -> [opPost, omit] ++ replies
    where
      opPost = opPostTemplate full (head posts)
      omit = omittedTemplate omitted
      replies = map reply (tail posts)
      reply = replyTemplate full
      lenPosts = length posts
      num = if lenPosts > 0
              then show $ pnumber $ head posts
              else "0"