packages feed

muon-0.1.0.4: src/Page.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Page where

import qualified Data.Text as T
import Site
import Text.StringTemplate
import Text.StringTemplate.GenericStandard
import System.Directory
import Control.Monad
import Constant


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

onlyFiles ::  [FilePath] -> IO [FilePath]
onlyFiles fs = filterM doesFileExist fs

pageNames ::  IO [String]
pageNames = do
    cs <- getDirectoryContents "pages"
    let fs = map (\x -> "pages/" ++ x) cs
    fmap ( map (drop 6) ) (onlyFiles fs)

renderPage ::  Site -> StringTemplate T.Text -> T.Text -> T.Text
renderPage s t c = render
               $ setAttribute "site" s
               $ setAttribute "content" c t

renderPageFile ::  String -> IO T.Text
renderPageFile p = do
    c <- readFile $ "pages/" ++ p
    t <- pageTemplate
    s <- readSite
    return $ renderPage s t (T.pack c)

writePage ::  String -> T.Text -> IO ()
writePage p c = do
    mkdir $ sitePath ++ p
    writeFile (sitePath ++ p ++ "/index.html") (T.unpack c)

generatePage p = do
    c <- renderPageFile p
    writePage p c
    putStrLn $ "Generated " ++ p

generatePages = pageNames >>= mapM_ generatePage