@@ -1,39 +1,50 @@
1−import Text.Hakyll
2−import Text.Hakyll.Render
3−import Text.Hakyll.File
4−import Text.Hakyll.CreateContext
5−import Control.Monad.Reader (liftIO)
6−import System.Directory
7−import Control.Monad (mapM_, forM_, liftM)
8−import Data.List (sort)
1+{-# LANGUAGE OverloadedStrings #-}
2+import Hakyll
3+import Control.Monad (forM_)
4+import Control.Arrow ((>>>), arr)
5+import Text.Pandoc (writerTableOfContents, writerTemplate, writerStandalone)
96
10−main = hakyll "http://jaspervdj.be/hakyll" $ do
11− directory css "css"
12− directory static "images"
13− directory static "examples"
14− directory static "reference"
7+main :: IO ()
8+main = hakyll $ do
9+ route "css/*" idRoute
10+ compile "css/*" defaultCompressCss
1511
16− tutorials <- liftM sort $ getRecursiveContents "tutorials"
17− let tutorialPage = createListing "tutorials.html"
18− ["templates/tutorialitem.html"]
19− (map createPage tutorials)
20− [("title", Left "Tutorials")]
21− renderChain ["templates/tutorials.html", "templates/default.html"]
22− (withSidebar tutorialPage)
12+ -- Static directories
13+ forM_ ["images/*", "examples/*", "reference/*"] $ \f -> do
14+ route f idRoute
15+ compile f defaultCopyFile
2316
24− mapM_ (render' ["templates/default.html"]) $
25− [ "about.markdown"
26− , "index.markdown"
27− , "philosophy.markdown"
28− , "reference.markdown"
29− , "changelog.markdown"
30− ]
17+ -- Pages
18+ forM_ pages $ \p -> do
19+ route p $ setExtension "html"
20+ compile p $ defaultPageRead
21+ >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
22+ >>> defaultApplyTemplate "templates/default.html"
23+ >>> defaultRelativizeUrls
3124
32− forM_ tutorials $ render' [ "templates/tutorial.html"
33− , "templates/default.html"
34− ]
25+ -- Tutorial
26+ route "tutorial.markdown" $ setExtension "html"
27+ compile "tutorial.markdown" $ pageRead
28+ >>> pageRenderPandocWith defaultParserState withToc
29+ >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
30+ >>> defaultApplyTemplate "templates/default.html"
31+ >>> defaultRelativizeUrls
3532
33+ -- Sidebar
34+ compile "sidebar.markdown" defaultPageRead
35+
36+ -- Templates
37+ compile "templates/*" defaultTemplateRead
3638 where
37− render' templates = renderChain templates . withSidebar . createPage
38− withSidebar a = a `combine` createPage "sidebar.markdown"
39−
39+ withToc = defaultWriterOptions
40+ { writerTableOfContents = True
41+ , writerTemplate = "<h2>Table of contents</h2>\n$toc$\n$body$"
42+ , writerStandalone = True
43+ }
44+
45+ pages = [ "about.markdown"
46+ , "changelog.markdown"
47+ , "index.markdown"
48+ , "philosophy.markdown"
49+ , "reference.markdown"
50+ ]