packages feed

muon-0.1.0.0: src/Archive.hs

module Archive where

import System.Directory
import qualified Data.Text as T
import Site
import Text.StringTemplate
import Post

sitePath = "site/"
mkdir = createDirectoryIfMissing False

archiveTemplate = do
    templates <- directoryGroup "templates" :: IO (STGroup T.Text)
    let Just t = getStringTemplate "generic" templates
    return t

makeTableRow ::  Post -> String
makeTableRow p = "<tr>"
              ++ "<td><a href=" ++ T.unpack (link p) ++ ">" ++ T.unpack (title p) ++ "</a></td>"
              ++ "<td>" ++ T.unpack (date p) ++ "</td>"
              ++ "<td>" ++ T.unpack (comment p) ++ "</td>"
              ++ "</tr>"

makeTable ::  [Post] -> T.Text
makeTable ps = T.pack
             $ "<table>"
            ++ "<tr><td>Title</td><td>Date</td><td>Comment</td></tr>"
            ++ unlines (map makeTableRow ps)
            ++ "</table>"

renderGenericArchive t c = render
                         $ setAttribute "site" defaultSite
                         $ setAttribute "content" c t

renderArchive = do
    ps <- getAllPosts
    t <- archiveTemplate
    return $ renderGenericArchive t (makeTable $ reverse ps)

writeArchive ::  T.Text -> IO ()
writeArchive s = do
    mkdir $ sitePath ++ "archive/"
    writeFile (sitePath ++ "archive/index.html") (T.unpack s)

generateArchive = renderArchive >>= writeArchive >> putStrLn "Generated archive"