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