summaryrefslogtreecommitdiff
path: root/src/Pages.hs
blob: 4efd8fe84907cbd23c3f05e23166ea308bdf969d (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
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Pages (
  renderPageLog, LogData(..),
  renderPageCalendarDay, CalendarDayData(..),
  PickerData(..), EventData(..),
) where

import Control.Monad.IO.Class (liftIO)
import Data.Text (Text)
import Data.Text.IO qualified as T
import Language.Haskell.TH.Syntax (addDependentFile)
import System.Directory (makeAbsolute)
import Text.Mustache.Compile qualified as M

import Pages.TH


data LogData = LogData
  { network :: Text
  , channel :: Text
  , alias :: Text
  , totalevents :: Text
  , picker :: PickerData
  , events :: [EventData () Text]
  }

data CalendarDayData = CalendarDayData
  { network :: Text
  , channel :: Text
  , alias :: Text
  , date :: Text
  , events :: [EventData Text ()]
  }

data PickerData = PickerData
  { prevpage :: Maybe Int
  , nextpage :: Maybe Int
  , firstpage :: Bool
  , leftdots :: Bool
  , rightdots :: Bool
  , lastpage :: Bool
  , leftnums :: [Int]
  , curnum :: Int
  , rightnums :: [Int]
  , npages :: Int
  }

data EventData tm dttm = EventData
  { classlist :: Maybe Text
  , time :: tm
  , datetime :: dttm
  , linkid :: Text
  , nickwrap1 :: Maybe Text
  , nick :: Text
  , nickwrap2 :: Maybe Text
  , message :: Text
  }

$(do let readTemplate name = do
           path <- liftIO $ makeAbsolute ("pages/" ++ name ++ ".mustache")
           tplSrc <- liftIO $ T.readFile path
           addDependentFile path
           case M.compileTemplate name tplSrc of
             Right tpl -> return tpl
             Left err -> fail $ "Reading " ++ path ++ ": " ++ show err
     concat <$> mapM (\(name, ty) -> (`makeRender` ty) =<< readTemplate name)
       [("log", ''LogData)
       ,("calendar-day", ''CalendarDayData)])