summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: bce890baed71d48089dfcbdedc340ad0d5378e97 (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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)

import GHC.IO.Encoding qualified as E



main :: IO ()
main = do
  E.setLocaleEncoding E.utf8
  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 "assets/**" $ do
        route $ dropParentRoute 1
        compile copyFileCompiler
    -- 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

    match "www/img/**" $ do
        route $ dropParentRoute 1
        compile copyFileCompiler

    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