3a30fb8a07
Don't break urls. 1. New Route function which generates routes compatible with old blog. 2. Renamed posts folder to blog.
87 lines
2.8 KiB
Haskell
87 lines
2.8 KiB
Haskell
--------------------------------------------------------------------------------
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
import Data.Monoid (mappend)
|
|
import Hakyll
|
|
import Hakyll.Core.Identifier (toFilePath)
|
|
import System.FilePath
|
|
import Text.Regex (splitRegex, mkRegex)
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
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 "blog/*" $ do
|
|
route $ octopressRoute
|
|
compile $ pandocCompiler
|
|
>>= loadAndApplyTemplate "templates/post.html" postCtx
|
|
>>= loadAndApplyTemplate "templates/default.html" postCtx
|
|
>>= relativizeUrls
|
|
|
|
create ["archive.html"] $ do
|
|
route idRoute
|
|
compile $ do
|
|
posts <- recentFirst =<< loadAll "blog/*"
|
|
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 "blog/*"
|
|
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
|
|
|
|
-- octopress compatible routes
|
|
octopressRoute :: Routes
|
|
octopressRoute = customRoute $ octoMangaling
|
|
|
|
octoMangaling :: Identifier -> FilePath
|
|
octoMangaling pathId = base </> year </> month </> day </> post </> "index.html"
|
|
where
|
|
p = toFilePath pathId
|
|
base = takeDirectory p
|
|
seps = splitRegex (mkRegex "-") $ takeBaseName p
|
|
year:month:day:xs = seps
|
|
post = tail $ foldl (\a b -> a ++ "-" ++ b) "" xs
|
|
|
|
|