The cssMap now contains the rendered css together with its hash. That way there is no need to give a component a name, and css is rendered along the way and carried as a string.
77 lines
2 KiB
Haskell
77 lines
2 KiB
Haskell
module Main
|
|
( main
|
|
) where
|
|
|
|
import Data.Hashable ( hash )
|
|
import Data.String
|
|
|
|
import Hakyll
|
|
|
|
import Components
|
|
import Core.Compilers
|
|
import Core.Render ( )
|
|
import Routes
|
|
import Utils.FileTree
|
|
import Utils.Routes
|
|
|
|
import Kit.Templates.Archive
|
|
import Kit.Templates.Index
|
|
import Kit.Templates.Post ( postTemplate )
|
|
import Kit.Templates.Sitemap
|
|
|
|
resources :: Component ()
|
|
resources = do
|
|
mconcat [postTemplate, indexTemplate, archiveTemplate]
|
|
return ()
|
|
|
|
assets :: [FilePath]
|
|
assets = map tail . getPaths . getAssets $ resources
|
|
|
|
allCss :: String
|
|
allCss = getCss resources
|
|
|
|
css :: Compiler (Item String)
|
|
css = makeItem allCss
|
|
|
|
cssHash :: Identifier
|
|
cssHash = fromString . show . hash $ allCss
|
|
|
|
main :: IO ()
|
|
main = hakyll $ do
|
|
|
|
tags <- buildTags (patrn $ Post "*.md") (fromCapture . patrn $ Tag "*")
|
|
|
|
match (patrn $ Post "*.md") $ do
|
|
route $ setExtension "html"
|
|
compile $ do
|
|
pandocCompiler
|
|
>>= saveSnapshot "content"
|
|
>>= componentTemplate postTemplate defaultContext
|
|
. fmap demoteHeaders
|
|
|
|
create ["index.html"] $ do
|
|
route idRoute
|
|
compile $ do
|
|
pages <- recentFirst =<< loadAllSnapshots "posts/*.md" "content"
|
|
makeItem "" >>= componentTemplate indexTemplate (indexCtx tags pages)
|
|
|
|
create ["tags/index.html"] $ do
|
|
route idRoute
|
|
compile $ makeItem "" >>= componentTemplate archiveTemplate
|
|
(archiveCtx tags)
|
|
|
|
create [cssHash] $ do
|
|
route $ constRoute . tail . path $ DefaultStylesheet
|
|
compile css
|
|
|
|
match (fromList . map fromFilePath $ assets) $ do
|
|
route idRoute
|
|
compile copyFileCompiler
|
|
|
|
create ["sitemap.xml"] $ do
|
|
route idRoute
|
|
compile $ do
|
|
posts <- recentFirst =<< loadAll "posts/*.md"
|
|
let pages = posts
|
|
sitemapCtx = listField "pages" defaultContext (return pages)
|
|
makeItem "" >>= componentTemplate (pure sitemapTemplate) sitemapCtx
|