diff options
Diffstat (limited to 'packages/code/kleidi-ca/app')
| -rw-r--r-- | packages/code/kleidi-ca/app/Main.hs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/packages/code/kleidi-ca/app/Main.hs b/packages/code/kleidi-ca/app/Main.hs new file mode 100644 index 0000000..406bbaf --- /dev/null +++ b/packages/code/kleidi-ca/app/Main.hs @@ -0,0 +1,71 @@ +{-# LANGUAGE OverloadedStrings #-} + +{-| +Site layout: + +Index: + - short intro to site? + - recent posts +-} + +import Hakyll +import System.FilePath (replaceExtension, takeFileName) + +postCtx :: Context String +postCtx = dateField "date" "%B %e, %Y" <> defaultContext + +-- | Static pages in the content/ directory are passed through, keeping their +-- layout. +staticContent :: Rules () +staticContent = match "content/*" $ do + route $ customRoute ((`replaceExtension` ".html") . takeFileName . toFilePath) + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + >>= relativizeUrls + +postsContent :: Rules () +postsContent = do + create ["posts/index.html"] $ do + route idRoute + compile $ do + posts <- loadAll "posts/*.markdown" >>= recentFirst + let archiveCtx = listField "posts" postCtx (pure posts) + <> constField "title" "Posts" + <> defaultContext + makeItem "" + >>= loadAndApplyTemplate "templates/post-list.html" archiveCtx + >>= loadAndApplyTemplate "templates/default.html" archiveCtx + >>= relativizeUrls + + match "posts/*.markdown" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/post.html" postCtx + >>= loadAndApplyTemplate "templates/default.html" postCtx + >>= relativizeUrls + +main :: IO () +main = hakyll $ do + match "images/*" $ do + route idRoute + compile copyFileCompiler + + match "css/*" $ do + route idRoute + compile compressCssCompiler + + staticContent + postsContent + + match "index.html" $ do + route idRoute + compile $ do + posts <- fmap (take 3) . recentFirst =<< loadAll "posts/*.markdown" + let indexCtx = listField "posts" postCtx (return posts) `mappend` defaultContext + + getResourceBody + >>= applyAsTemplate indexCtx + >>= loadAndApplyTemplate "templates/default.html" indexCtx + >>= relativizeUrls + + match "templates/*" $ compile templateBodyCompiler |
