59 lines
1.8 KiB
Haskell
59 lines
1.8 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module Main where
|
|
|
|
import Prelude hiding (id)
|
|
import Control.Category (id)
|
|
import Control.Arrow ((>>>), (***), arr)
|
|
import Data.Monoid (mempty, mconcat)
|
|
|
|
import Hakyll
|
|
|
|
main :: IO ()
|
|
main = hakyll $ do
|
|
-- Compress CSS
|
|
route "css/*" idRoute
|
|
compile "css/*" compressCssCompiler
|
|
|
|
-- Render posts
|
|
route "posts/*" $ setExtension ".html"
|
|
compile "posts/*" $
|
|
pageCompiler
|
|
>>> applyTemplateCompiler "templates/post.html"
|
|
>>> applyTemplateCompiler "templates/default.html"
|
|
>>> relativizeUrlsCompiler
|
|
|
|
-- Render posts list
|
|
route "posts.html" $ idRoute
|
|
create "posts.html" $
|
|
constA mempty
|
|
>>> arr (setField "title" "All posts")
|
|
>>> requireAllA "posts/*" addPostList
|
|
>>> applyTemplateCompiler "templates/posts.html"
|
|
>>> applyTemplateCompiler "templates/default.html"
|
|
>>> relativizeUrlsCompiler
|
|
|
|
-- Index
|
|
route "index.html" idRoute
|
|
create "index.html" $
|
|
constA mempty
|
|
>>> arr (setField "title" "Home")
|
|
>>> requireAllA "posts/*" (id *** arr (take 3 . reverse . sortByBaseName) >>> addPostList)
|
|
>>> applyTemplateCompiler "templates/index.html"
|
|
>>> applyTemplateCompiler "templates/default.html"
|
|
>>> relativizeUrlsCompiler
|
|
|
|
-- Read templates
|
|
compile "templates/*" templateCompiler
|
|
|
|
-- End
|
|
return ()
|
|
|
|
-- | Auxiliary compiler: generate a post list from a list of given posts, and
|
|
-- add it to the current page under @$posts@
|
|
--
|
|
addPostList :: Compiler (Page String, [Page String]) (Page String)
|
|
addPostList = setFieldA "posts" $
|
|
arr (reverse . sortByBaseName)
|
|
>>> require "templates/postitem.html" (\p t -> map (applyTemplate t) p)
|
|
>>> arr mconcat
|
|
>>> arr pageBody
|