site kinda works
This commit is contained in:
commit
a6148fdb91
12
pagedeploy.cabal
Normal file
12
pagedeploy.cabal
Normal file
|
@ -0,0 +1,12 @@
|
|||
name: pagedeploy
|
||||
version: 0.1.0.0
|
||||
build-type: Simple
|
||||
cabal-version: >= 1.10
|
||||
|
||||
executable site
|
||||
main-is: site.hs
|
||||
build-depends: base == 4.*
|
||||
, hakyll == 4.16.*
|
||||
, filepath
|
||||
ghc-options: -threaded -rtsopts -with-rtsopts=-N
|
||||
default-language: Haskell2010
|
57
site.hs
Normal file
57
site.hs
Normal file
|
@ -0,0 +1,57 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Hakyll
|
||||
|
||||
import Control.Monad ((>=>))
|
||||
import Data.Foldable (traverse_)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import System.FilePath ((</>), dropTrailingPathSeparator, normalise)
|
||||
|
||||
import Debug.Trace
|
||||
|
||||
getMount :: Metadata -> Routes
|
||||
getMount = maybe idRoute constRoute . lookupString "mount"
|
||||
|
||||
indexInDir :: Routes -> Routes
|
||||
indexInDir = flip composeRoutes . customRoute $ (</> "index.html") . toFilePath
|
||||
|
||||
extractRedirs :: Identifier -> Rules (Identifier, [Identifier])
|
||||
extractRedirs ident = do
|
||||
md <- getMetadata ident
|
||||
let to = fromMaybe ident $ fromFilePath <$> lookupString "mount" md
|
||||
froms =
|
||||
fromMaybe [] $
|
||||
map (fromFilePath . dropTrailingPathSeparator . normalise) <$>
|
||||
lookupStringList "redirects" md
|
||||
pure (to, froms)
|
||||
|
||||
makePage :: Rules ()
|
||||
makePage = do
|
||||
route $ indexInDir (metadataRoute getMount)
|
||||
compile $
|
||||
pandocCompiler >>= loadAndApplyTemplate "templates/page.html" pageCtx >>=
|
||||
loadAndApplyTemplate "templates/default.html" pageCtx >>=
|
||||
relativizeUrls
|
||||
|
||||
makeRedirects :: Identifier -> [Identifier] -> Rules ()
|
||||
makeRedirects to froms =
|
||||
create froms $ do
|
||||
route $ indexInDir idRoute
|
||||
compile . makeItem . Redirect . ('/' :) . toFilePath $ to
|
||||
|
||||
spawnRedirects :: [Identifier] -> Rules ()
|
||||
spawnRedirects = traverse_ (extractRedirs >=> uncurry makeRedirects)
|
||||
|
||||
main :: IO ()
|
||||
main =
|
||||
hakyll $
|
||||
{- Source the pages -}
|
||||
do
|
||||
match "external/**/*.md" makePage
|
||||
{- Source and process the redirects -}
|
||||
getMatches "external/**/*.md" >>= spawnRedirects
|
||||
{- Compile the templates (no routing, cache-only) -}
|
||||
match "templates/*" $ compile templateBodyCompiler
|
||||
|
||||
pageCtx :: Context String
|
||||
pageCtx = defaultContext
|
Loading…
Reference in a new issue