|
@@ -7,61 +7,80 @@ import Hakyll
|
|
|
--------------------------------------------------------------------------------
|
|
|
main :: IO ()
|
|
|
main = hakyll $ do
|
|
|
- match "images/*" $ do
|
|
|
- route idRoute
|
|
|
- compile copyFileCompiler
|
|
|
-
|
|
|
- match "css/*" $ do
|
|
|
- route idRoute
|
|
|
- compile compressCssCompiler
|
|
|
-
|
|
|
- match (fromList ["about.rst", "contact.markdown"]) $ do
|
|
|
- route $ setExtension "html"
|
|
|
- compile $ pandocCompiler
|
|
|
- >>= loadAndApplyTemplate "templates/default.html" defaultContext
|
|
|
- >>= relativizeUrls
|
|
|
-
|
|
|
- match "posts/*" $ do
|
|
|
- route $ setExtension "html"
|
|
|
- compile $ pandocCompiler
|
|
|
- >>= loadAndApplyTemplate "templates/post.html" postCtx
|
|
|
- >>= loadAndApplyTemplate "templates/default.html" postCtx
|
|
|
- >>= relativizeUrls
|
|
|
-
|
|
|
- create ["archive.html"] $ do
|
|
|
- route idRoute
|
|
|
- compile $ do
|
|
|
- posts <- recentFirst =<< loadAll "posts/*"
|
|
|
- let archiveCtx =
|
|
|
- listField "posts" postCtx (return posts) `mappend`
|
|
|
- constField "title" "Archives" `mappend`
|
|
|
- defaultContext
|
|
|
-
|
|
|
- makeItem ""
|
|
|
- >>= loadAndApplyTemplate "templates/archive.html" archiveCtx
|
|
|
- >>= loadAndApplyTemplate "templates/default.html" archiveCtx
|
|
|
- >>= relativizeUrls
|
|
|
-
|
|
|
-
|
|
|
- match "index.html" $ do
|
|
|
- route idRoute
|
|
|
- compile $ do
|
|
|
- posts <- recentFirst =<< loadAll "posts/*"
|
|
|
- let indexCtx =
|
|
|
- listField "posts" postCtx (return posts) `mappend`
|
|
|
- constField "title" "Home" `mappend`
|
|
|
- defaultContext
|
|
|
-
|
|
|
- getResourceBody
|
|
|
- >>= applyAsTemplate indexCtx
|
|
|
- >>= loadAndApplyTemplate "templates/default.html" indexCtx
|
|
|
- >>= relativizeUrls
|
|
|
-
|
|
|
- match "templates/*" $ compile templateBodyCompiler
|
|
|
+ match "images/*" $ do
|
|
|
+ route idRoute
|
|
|
+ compile copyFileCompiler
|
|
|
+
|
|
|
+ match "css/*" $ do
|
|
|
+ route idRoute
|
|
|
+ compile compressCssCompiler
|
|
|
+
|
|
|
+ match (fromList ["about.rst", "contact.markdown"]) $ do
|
|
|
+ route $ setExtension "html"
|
|
|
+ compile $ pandocCompiler
|
|
|
+ >>= loadAndApplyTemplate "templates/default.html" defaultContext
|
|
|
+ >>= relativizeUrls
|
|
|
+
|
|
|
+ tags <- buildTags "posts/*" (fromCapture "tags/*.html")
|
|
|
+ tagsRules tags $ \tag pattern -> do
|
|
|
+ let title = "Posts tagged \"" ++ tag ++ "\""
|
|
|
+ route idRoute
|
|
|
+ compile $ do
|
|
|
+ posts <- recentFirst =<< loadAll pattern
|
|
|
+ let ctx = constField "title" title
|
|
|
+ `mappend` listField "posts" postCtx (return posts)
|
|
|
+ `mappend` defaultContext
|
|
|
+
|
|
|
+ makeItem ""
|
|
|
+ >>= loadAndApplyTemplate "templates/tag.html" ctx
|
|
|
+ >>= loadAndApplyTemplate "templates/default.html" ctx
|
|
|
+ >>= relativizeUrls
|
|
|
+
|
|
|
+ match "posts/*" $ do
|
|
|
+ route $ setExtension "html"
|
|
|
+ compile $ pandocCompiler
|
|
|
+ >>= loadAndApplyTemplate "templates/post.html" postCtxWithTags
|
|
|
+ >>= loadAndApplyTemplate "templates/default.html" postCtxWithTags
|
|
|
+ >>= relativizeUrls
|
|
|
+
|
|
|
+ create ["archive.html"] $ do
|
|
|
+ route idRoute
|
|
|
+ compile $ do
|
|
|
+ posts <- recentFirst =<< loadAll "posts/*"
|
|
|
+ let archiveCtx =
|
|
|
+ listField "posts" postCtx (return posts) `mappend`
|
|
|
+ constField "title" "Archives" `mappend`
|
|
|
+ defaultContext
|
|
|
+
|
|
|
+ makeItem ""
|
|
|
+ >>= loadAndApplyTemplate "templates/archive.html" archiveCtx
|
|
|
+ >>= loadAndApplyTemplate "templates/default.html" archiveCtx
|
|
|
+ >>= relativizeUrls
|
|
|
+
|
|
|
+
|
|
|
+ match "index.html" $ do
|
|
|
+ route idRoute
|
|
|
+ compile $ do
|
|
|
+ posts <- recentFirst =<< loadAll "posts/*"
|
|
|
+ let indexCtx =
|
|
|
+ listField "posts" postCtx (return posts) `mappend`
|
|
|
+ constField "title" "Home" `mappend`
|
|
|
+ defaultContext
|
|
|
+
|
|
|
+ getResourceBody
|
|
|
+ >>= applyAsTemplate indexCtx
|
|
|
+ >>= loadAndApplyTemplate "templates/default.html" indexCtx
|
|
|
+ >>= relativizeUrls
|
|
|
+
|
|
|
+ match "templates/*" $ compile templateBodyCompiler
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
postCtx :: Context String
|
|
|
postCtx =
|
|
|
- dateField "date" "%B %e, %Y" `mappend`
|
|
|
- defaultContext
|
|
|
+ dateField "date" "%B %e, %Y" `mappend`
|
|
|
+ defaultContext
|
|
|
+
|
|
|
+postCtxWithTags :: Tags -> Context String
|
|
|
+postCtxWithTags tags = tagsField "tags" tags `mappend` postCtx
|
|
|
+
|