1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
module Main where
import Prolog
import Hakyll
import Data.List qualified as L
import Data.Ord (Down (..))
import Hakyll.Alias
import Hakyll.Util
import Data.Alias (AliasMap)
import Data.Name (Name (..), Name_)
import Data.Person (Person_)
import Data.Journal (Journal_)
import Data.License (License_)
import Data.Paper (Paper (..))
import Hakyll.Aeson (yamlCompiler)
import Hakyll.Paper (papersCompiler, mkPaperContext, FieldContext (..))
import Hakyll.TeX.BibTeX (bibtexCompiler)
import Hakyll.Web.Sass
import Text.Jasmine (minify)
import WWW.Base (baseHakyll, domain, myHakyllWriterOptions, myHakyllReaderOptions)
import WWW.Templates (myContext, defaultTemplate)
main :: IO ()
main = baseHakyll domain $ do
match "templates/**" $ compile templateCompiler
-- match "data/*.bib" $ compile bibtexCompiler
match "data/papers.bib" $ compile papersCompiler
match "data/people.yaml" $ compile $ yamlCompiler @(AliasMap Name_ Person_)
match "data/licenses.yaml" $ compile $ yamlCompiler @(AliasMap StrictText License_)
match "data/journals.yaml" $ compile $ yamlCompiler @(AliasMap StrictText Journal_)
match ("www/css/*.scss" .||. "www/css/*.sass") $ do
route $ dropParentRoute 1 `composeRoutes` setExtension "css"
compile $ compressCss <<$>> sassCompiler
match "www/css/*.css" $ do
route $ dropParentRoute 1
compile compressCssCompiler
match "www/js/*.js" $ do
route $ dropParentRoute 1
compile $ minify <<$>> getResourceLBS
let baseCtxt :: Context String
baseCtxt = fold $
[ myContext
, personCtxt "data/people.yaml"
, licenseCtxt "data/licenses.yaml"
, journalCtxt "data/journals.yaml"
]
-- let baseCtxt :: Compiler (Context String)
-- baseCtxt = fold <$> sequence
-- [ pure myContext
-- , personCtxt @StrictText <$> loadBody "data/people.yaml"
-- , licenseCtxt @StrictText <$> loadBody "data/licenses.yaml"
-- , journalCtxt @StrictText <$> loadBody "data/journals.yaml"
-- ]
match "www/index.html" $ do
route $ dropParentRoute 1
compile $ do
getResourceBody >>= applyAsTemplate baseCtxt >>= applyTemplate defaultTemplate baseCtxt
match "www/research/index.html" $ do
route $ dropParentRoute 1
compile $ do
papers <- loadBody @[Paper String] "data/papers.bib"
let fixedPapers = L.sortOn Down $ papers <&> \p -> p
{ authors = (`filter` authors p) $ flip notElem
[ Name "Cox" "Christopher" Nothing
, Name "Wells" "Chris" Nothing
] -- Remove me from the author list
}
getResourceBody >>= applyAsTemplate (mkPaperContext (personCtxt "data/people.yaml" <> journalCtxt "data/journals.yaml") fixedPapers) >>= applyTemplate defaultTemplate baseCtxt
match "www/teaching/index.md" $ do
route $ dropParentRoute 1 `composeRoutes` setExtension ".html"
-- compile $ myPandocCompiler >>= applyAsTemplate baseCtxt >>= applyTemplate defaultTemplate baseCtxt
compile $ getResourceBody >>= applyAsTemplate baseCtxt >>= myRenderPandoc >>= applyTemplate defaultTemplate baseCtxt
match "www/links/index.md" $ do
route $ dropParentRoute 1 `composeRoutes` setExtension ".html"
compile $ getResourceBody >>= applyAsTemplate baseCtxt >>= myRenderPandoc >>= applyTemplate defaultTemplate baseCtxt
match "www/contact/*.html" $ do
route $ dropParentRoute 1
compile $ getResourceBody >>= applyAsTemplate baseCtxt >>= applyTemplate defaultTemplate baseCtxt
match "www/code/*.html" $ do
route $ dropParentRoute 1
compile $ getResourceBody >>= applyAsTemplate baseCtxt >>= applyTemplate defaultTemplate baseCtxt
match "www/credits/*.html" $ do
route $ dropParentRoute 1
compile $ myPandocCompiler >>= applyTemplate defaultTemplate baseCtxt
pure ()
myPandocCompiler :: Compiler (Item String)
myPandocCompiler = pandocCompilerWith myHakyllReaderOptions myHakyllWriterOptions
myRenderPandoc :: Item String -> Compiler (Item String)
myRenderPandoc = renderPandocWith myHakyllReaderOptions myHakyllWriterOptions
|