-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFrontend.hs
94 lines (90 loc) · 3 KB
/
Frontend.hs
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
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Frontend where
import Common.Route (FrontendRoute (..))
import Data.Dependent.Sum (DSum (..))
import Home (home)
import Javascript (javascript)
import LocalStorage (localStorage)
import Obelisk.Frontend (Frontend (..))
import Obelisk.Generated.Static (static)
import Obelisk.Route (R)
import Obelisk.Route.Frontend (RouteToUrl, RoutedT, SetRoute, askRoute, subRoute_)
import Reflex.Dom.Core
import TicTacToe (ticTacToe)
import Tutorial1 (tutorial1)
import Tutorial10 (tutorial10)
import Tutorial11 (tutorial11)
import Tutorial2 (tutorial2)
import Tutorial3 (tutorial3)
import Tutorial4 (tutorial4)
import Tutorial5 (tutorial5)
import Tutorial6 (tutorial6)
import Tutorial7 (tutorial7)
import Tutorial8 (tutorial8)
import Tutorial9 (tutorial9)
import Utils (routeLink')
-- This runs in a monad that can be run on the client or the server.
-- To run code in a pure client or pure server context, use one of the
-- `prerender` functions.
frontend :: Frontend (R FrontendRoute)
frontend =
Frontend
{ _frontend_head = do
el "title" $ text "Reflex playground"
elAttr
"meta"
( "name" =: "viewport"
<> "contents" =: "width=device-width, initial-scale=1.0"
)
blank
elAttr
"script"
( "type" =: "application/javascript"
<> "src" =: $(static "js/lib.js")
)
blank
elAttr
"link"
( "href" =: $(static "css/styles.css")
<> "type" =: "text/css"
<> "rel" =: "stylesheet"
)
blank,
_frontend_body = do
elAttr "div" ("class" =: "mt-4 mb-4 mr-4 ml-4") $
subRoute_ $ \case
FrontendRoute_Home -> home
FrontendRoute_Tutorial1 -> tutorial1
FrontendRoute_Tutorial2 -> tutorial2
FrontendRoute_Tutorial3 -> tutorial3
FrontendRoute_Tutorial4 -> tutorial4
FrontendRoute_Tutorial5 -> tutorial5
FrontendRoute_Tutorial6 -> tutorial6
FrontendRoute_Tutorial7 -> tutorial7
FrontendRoute_Tutorial8 -> tutorial8
FrontendRoute_Tutorial9 -> tutorial9
FrontendRoute_Tutorial10 -> tutorial10
FrontendRoute_Tutorial11 -> tutorial11
FrontendRoute_TicTacToe -> ticTacToe
FrontendRoute_LocalStorage -> localStorage
FrontendRoute_Javascript -> javascript
}
homeLink ::
( DomBuilder t m,
PostBuild t m,
Prerender t m,
RouteToUrl (R FrontendRoute) m,
SetRoute t (R FrontendRoute) m
) =>
RoutedT t (R FrontendRoute) m ()
homeLink = dyn_ . fmap (unlessOnHome routeLinkHome) =<< askRoute
where
unlessOnHome :: DomBuilder t m => m () -> R FrontendRoute -> m ()
unlessOnHome _ (FrontendRoute_Home :=> _) = blank
unlessOnHome a _ = a
routeLinkHome = routeLink' FrontendRoute_Home