summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: 155688eda594d2b89246996403eaea2deacf0c9d (plain)
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
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
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" .||. "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/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 (FieldContext (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