@@ -4,7 +4,7 @@ module Text.Hakyll
4 , hakyllWithConfiguration
4 , hakyllWithConfiguration
7−import Control.Monad.Reader (runReaderT)
7+import Control.Monad.Reader (runReaderT, liftIO)
8import Control.Monad (when)
8import Control.Monad (when)
9import qualified Data.Map as M
9import qualified Data.Map as M
10import System.Environment (getArgs, getProgName)
10import System.Environment (getArgs, getProgName)
@@ -17,6 +17,8 @@ import Text.Hakyll.Hakyll
17defaultHakyllConfiguration :: HakyllConfiguration
17defaultHakyllConfiguration :: HakyllConfiguration
18defaultHakyllConfiguration = HakyllConfiguration
18defaultHakyllConfiguration = HakyllConfiguration
19 { additionalContext = M.empty
19 { additionalContext = M.empty
20+ , siteDirectory = "_site"
21+ , cacheDirectory = "_cache"
22-- | Hakyll with a default configuration.
24-- | Hakyll with a default configuration.
@@ -27,32 +29,27 @@ hakyll = hakyllWithConfiguration defaultHakyllConfiguration
27hakyllWithConfiguration :: HakyllConfiguration -> Hakyll () -> IO ()
29hakyllWithConfiguration :: HakyllConfiguration -> Hakyll () -> IO ()
28hakyllWithConfiguration configuration buildFunction = do
30hakyllWithConfiguration configuration buildFunction = do
29 args <- getArgs
31 args <- getArgs
30− case args of ["build"] -> build'
32+ let f = case args of ["build"] -> buildFunction
31− ["clean"] -> clean
33+ ["clean"] -> clean
32− ["preview", p] -> build' >> server (read p)
34+ ["preview", p] -> buildFunction >> server (read p)
33− ["preview"] -> build' >> server 8000
35+ ["preview"] -> buildFunction >> server 8000
34− ["server", p] -> server (read p)
36+ ["server", p] -> server (read p)
35− ["server"] -> server 8000
37+ ["server"] -> server 8000
36− _ -> help
38+ _ -> help
38− build' = build configuration buildFunction
41−build :: HakyllConfiguration -> Hakyll () -> IO ()
42−build configuration buildFunction = do putStrLn "Generating..."
43− runReaderT buildFunction configuration
39+ runReaderT f configuration
45-- | Clean up directories.
41-- | Clean up directories.
46−clean :: IO ()
42+clean :: Hakyll ()
47−clean = remove' "_site"
43+clean = do askHakyll siteDirectory >>= remove'
44+ askHakyll cacheDirectory >>= remove'
49− remove' dir = do putStrLn $ "Removing " ++ dir ++ "..."
46+ remove' dir = liftIO $ do putStrLn $ "Removing " ++ dir ++ "..."
50− exists <- doesDirectoryExist dir
47+ exists <- doesDirectoryExist dir
51− when exists $ removeDirectoryRecursive dir
48+ when exists $ removeDirectoryRecursive dir
53-- | Show usage information.
50-- | Show usage information.
54−help :: IO ()
51+help :: Hakyll ()
55−help = do
52+help = liftIO $ do
56 name <- getProgName
53 name <- getProgName
57 putStrLn $ "This is a Hakyll site generator program. You should always\n"
54 putStrLn $ "This is a Hakyll site generator program. You should always\n"
58 ++ "run it from the project root directory.\n"
55 ++ "run it from the project root directory.\n"
@@ -64,5 +61,5 @@ help = do
64 ++ name ++ " preview [port] Generate site, then start a server.\n"
61 ++ name ++ " preview [port] Generate site, then start a server.\n"
65 ++ name ++ " server [port] Run a local test server.\n"
62 ++ name ++ " server [port] Run a local test server.\n"
67−server :: Integer -> IO ()
64+server :: Integer -> Hakyll ()
68−server p = simpleServer (fromIntegral p) "_site"
65+server p = askHakyll siteDirectory >>= liftIO . simpleServer (fromIntegral p)