summaryrefslogtreecommitdiff
path: root/Hero
diff options
context:
space:
mode:
Diffstat (limited to 'Hero')
-rw-r--r--Hero/Core.hs178
-rw-r--r--Hero/Host.hs66
-rw-r--r--Hero/Look/Typography.hs6
-rw-r--r--Hero/Node.hs2
-rw-r--r--Hero/Prod.nix31
5 files changed, 152 insertions, 131 deletions
diff --git a/Hero/Core.hs b/Hero/Core.hs
index bc53503..8f865da 100644
--- a/Hero/Core.hs
+++ b/Hero/Core.hs
@@ -129,14 +129,14 @@ data Button
class Elemental v where el :: v -> View Move
-- TODO: what if I just did this on all actions?
--- then I could e.g. `el $ ToggleAudio audioId audioState`
+-- then I could e.g. `el <| ToggleAudio audioId audioState`
instance Elemental Button where
el (PlayPause id form) =
button_
[ class_ "button is-large icon",
- onClick $ ToggleAudio id
+ onClick <| ToggleAudio id
]
- [i_ [class_ $ "fa " <> icon] []]
+ [i_ [class_ <| "fa " <> icon] []]
where
icon = case form of
Paused -> "fa-play-circle"
@@ -144,7 +144,7 @@ instance Elemental Button where
el (Arrow act) =
button_
[class_ "button is-large turn-page", onClick act]
- [img_ [src_ $ ms $ Pack.demo <> image <> ".png"]]
+ [img_ [src_ <| ms <| Pack.demo <> image <> ".png"]]
where
image = case act of
PrevPage -> "prev-page"
@@ -154,15 +154,15 @@ instance Elemental Button where
if c `elem` userLibrary u -- in library
then
a_
- [class_ "wrs-button saved", onClick $ ToggleInLibrary c]
- [ img_ [src_ $ ms $ Pack.icon <> "save.svg"],
+ [class_ "wrs-button saved", onClick <| ToggleInLibrary c]
+ [ img_ [src_ <| ms <| Pack.icon <> "save.svg"],
span_ [] [text "saved"]
]
else-- not in library
a_
- [class_ "wrs-button", onClick $ ToggleInLibrary c]
- [ img_ [src_ $ ms $ Pack.icon <> "save.svg"],
+ [class_ "wrs-button", onClick <| ToggleInLibrary c]
+ [ img_ [src_ <| ms <| Pack.icon <> "save.svg"],
span_ [] [text "save"]
]
el (SaveIcon c u) =
@@ -170,46 +170,46 @@ instance Elemental Button where
then
button_
[ class_ "button is-large has-background-black",
- onClick $ ToggleInLibrary c
+ onClick <| ToggleInLibrary c
]
- [img_ [src_ $ ms $ Pack.demo <> "library-add.png"]]
+ [img_ [src_ <| ms <| Pack.demo <> "library-add.png"]]
else-- not in library
button_
[ class_ "button is-large has-background-black-bis",
- onClick $ ToggleInLibrary c
+ onClick <| ToggleInLibrary c
]
- [img_ [src_ $ ms $ Pack.demo <> "library-add.png"]]
+ [img_ [src_ <| ms <| Pack.demo <> "library-add.png"]]
el (ZoomIcon zform comic page) =
button_
[ id_ "zoom-button",
class_ "button is-large",
- onClick $ ToggleZoom comic page
+ onClick <| ToggleZoom comic page
]
- [ img_ [src_ $ ms $ Pack.demo <> "zoom.png"],
+ [ img_ [src_ <| ms <| Pack.demo <> "zoom.png"],
input_
[ type_ "range",
min_ "0",
max_ "100",
disabled_ True,
- value_ $ ms (show zform :: String),
+ value_ <| ms (show zform :: String),
class_ "ctrl",
id_ "zoom"
],
label_
[class_ "ctrl", Miso.for_ "zoom"]
- [text $ ms $ (show zform :: String) ++ "%"]
+ [text <| ms <| (show zform :: String) ++ "%"]
]
el (Read c) =
a_
- [class_ "wrs-button", onClick $ SelectExperience c]
- [ img_ [src_ $ ms $ Pack.icon <> "read.svg"],
+ [class_ "wrs-button", onClick <| SelectExperience c]
+ [ img_ [src_ <| ms <| Pack.icon <> "read.svg"],
span_ [] [text "read"]
]
el (Watch c) =
a_
- [class_ "wrs-button", onClick $ StartWatching c]
- [ img_ [src_ $ ms $ Pack.icon <> "watch.svg"],
+ [class_ "wrs-button", onClick <| StartWatching c]
+ [ img_ [src_ <| ms <| Pack.icon <> "watch.svg"],
span_ [] [text "watch"]
]
@@ -257,12 +257,12 @@ initForm uri_ =
-- | Hacky way to initialize the 'ComicReaderState' from the Api.URI.
detectPlayerState :: Api.URI -> ComicReaderState
-detectPlayerState u = case List.splitOn "/" $ Api.uriPath u of
+detectPlayerState u = case List.splitOn "/" <| Api.uriPath u of
["", "comic", id, pg, "experience"] -> ChooseExperience (ComicId id) (toPage pg)
- ["", "comic", id, _, "video"] -> Watching $ ComicId id
+ ["", "comic", id, _, "video"] -> Watching <| ComicId id
["", "comic", id, pg, "full"] -> Reading Full (ComicId id) (toPage pg)
["", "comic", id, pg] -> Reading Spread (ComicId id) (toPage pg)
- ["", "comic", id] -> Cover $ ComicId id
+ ["", "comic", id] -> Cover <| ComicId id
_ -> NotReading
where
toPage pg = fromMaybe 1 (readMaybe pg :: Maybe PageNumber)
@@ -344,7 +344,7 @@ homeProxy :: Proxy Home
homeProxy = Proxy
homeLink :: Api.URI
-homeLink = linkURI $ Api.safeLink front homeProxy
+homeLink = linkURI <| Api.safeLink front homeProxy
where
front = Proxy :: Proxy Home
@@ -367,7 +367,7 @@ loginProxy :: Proxy Login
loginProxy = Proxy
loginLink :: Api.URI
-loginLink = linkURI $ Api.safeLink pubRoutes loginProxy
+loginLink = linkURI <| Api.safeLink pubRoutes loginProxy
login :: form -> View Move
login _ =
@@ -377,7 +377,7 @@ login _ =
[id_ "login-inner"]
[ img_
[ class_ fadeIn,
- src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/hero-large.png"
+ src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/hero-large.png"
],
hr_ [class_ fadeIn],
form_
@@ -398,14 +398,14 @@ login _ =
],
hr_ [class_ fadeIn],
p_
- [class_ $ "help " <> fadeIn]
+ [class_ <| "help " <> fadeIn]
[ a_ [href_ "#"] [text "Forgot your username or password?"],
a_ [href_ "#"] [text "Don't have an account? Sign Up"]
],
img_
[ id_ "hero-logo",
class_ "blur-out",
- src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/success-her-image.png"
+ src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/success-her-image.png"
]
]
]
@@ -418,7 +418,7 @@ login _ =
type Discover = "discover" :> View Move
discoverLink :: Api.URI
-discoverLink = linkURI $ Api.safeLink routes discoverProxy
+discoverLink = linkURI <| Api.safeLink routes discoverProxy
discoverProxy :: Proxy Discover
discoverProxy = Proxy
@@ -428,7 +428,7 @@ discover form@Form {user = u} =
template
"discover"
[ topbar,
- main_ [id_ "app-body"] $ case appComics form of
+ main_ [id_ "app-body"] <| case appComics form of
NotAsked -> [loading]
Loading -> [loading]
Failure _ -> [nocomics]
@@ -436,7 +436,7 @@ discover form@Form {user = u} =
Success (comic : rest) ->
[ feature comic u,
shelf "Recent Releases" (comic : rest),
- maybeView (`info` u) $ dMediaInfo form
+ maybeView (`info` u) <| dMediaInfo form
],
appmenu,
discoverFooter
@@ -452,11 +452,11 @@ discoverFooter =
[id_ "app-foot-social", css euro]
[ div_
[class_ "row is-marginless"]
- [ smallImg "facebook.png" $ Just "https://www.facebook.com/musicmeetscomics",
- smallImg "twitter.png" $ Just "https://twitter.com/musicmeetscomic",
- smallImg "instagram.png" $ Just "https://www.instagram.com/musicmeetscomics/",
- smallImg "spotify.png" $ Just "https://open.spotify.com/user/i4ntfg6ganjgxdsylinigcjlq?si=ymWsSkwsT9iaLw2LeAJNNg",
- smallImg "youtube.png" $ Just "https://www.youtube.com/channel/UCnNPLiuJ1ueo1KTPgHDE7lA/"
+ [ smallImg "facebook.png" <| Just "https://www.facebook.com/musicmeetscomics",
+ smallImg "twitter.png" <| Just "https://twitter.com/musicmeetscomic",
+ smallImg "instagram.png" <| Just "https://www.instagram.com/musicmeetscomics/",
+ smallImg "spotify.png" <| Just "https://open.spotify.com/user/i4ntfg6ganjgxdsylinigcjlq?si=ymWsSkwsT9iaLw2LeAJNNg",
+ smallImg "youtube.png" <| Just "https://www.youtube.com/channel/UCnNPLiuJ1ueo1KTPgHDE7lA/"
],
div_ [class_ "row"] [text "Team | Contact Us | Privacy Policy"]
],
@@ -467,7 +467,7 @@ discoverFooter =
],
div_
[css euro, id_ "app-foot-logo", onClick Dumpform]
- [ a_ [class_ "social-icon", href_ "#"] [img_ [src_ $ ms $ Pack.icon <> "hero-logo.svg"]],
+ [ a_ [class_ "social-icon", href_ "#"] [img_ [src_ <| ms <| Pack.icon <> "hero-logo.svg"]],
span_ [] [text "© Hero Records, Inc. All Rights Reserved"]
]
]
@@ -477,7 +477,7 @@ discoverFooter =
smallImg x lnk =
a_
(attrs lnk)
- [img_ [src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/" <> x]]
+ [img_ [src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/" <> x]]
-- ** comic
@@ -504,12 +504,12 @@ instance IsMediaObject Comic where
[]
[ a_
[ class_ "comic grow clickable",
- id_ $ "comic-" <> ms comicId,
- onClick $ SetMediaInfo $ Just c
+ id_ <| "comic-" <> ms comicId,
+ onClick <| SetMediaInfo <| Just c
]
- [ img_ [src_ $ ms $ Pack.demo <> comicSlug c <> ".png"],
- span_ [] [text $ "Issue #" <> ms comicIssue],
- span_ [] [text $ ms comicName]
+ [ img_ [src_ <| ms <| Pack.demo <> comicSlug c <> ".png"],
+ span_ [] [text <| "Issue #" <> ms comicIssue],
+ span_ [] [text <| ms comicName]
]
]
feature comic lib =
@@ -517,7 +517,7 @@ instance IsMediaObject Comic where
[id_ "featured-comic"]
[ img_
[ id_ "featured-banner",
- src_ $ ms $ Pack.demo <> "feature-banner.png"
+ src_ <| ms <| Pack.demo <> "feature-banner.png"
],
div_
[id_ "featured-content"]
@@ -530,15 +530,15 @@ instance IsMediaObject Comic where
[class_ "comic-logo"]
[ img_
[ src_
- $ ms
- $ Pack.demo <> comicSlug comic <> "-logo.png"
+ <| ms
+ <| Pack.demo <> comicSlug comic <> "-logo.png"
]
],
- div_ [class_ "comic-action-menu"] $
- el <$> [Watch comic, Read comic, Save comic lib],
+ div_ [class_ "comic-action-menu"] <|
+ el </ [Watch comic, Read comic, Save comic lib],
p_
[class_ "description"]
- [ text . ms $ comicDescription comic
+ [ text . ms <| comicDescription comic
]
]
]
@@ -547,22 +547,22 @@ instance IsMediaObject Comic where
[class_ "media-info", css euro]
[ div_
[class_ "media-info-meta"]
- [ column [img_ [src_ $ ms $ Pack.demo <> "dmc-widethumb.png"]],
+ [ column [img_ [src_ <| ms <| Pack.demo <> "dmc-widethumb.png"]],
column
- [ span_ [style_ title] [text $ ms comicName],
- span_ [style_ subtitle] [text $ "Issue #" <> ms comicIssue],
+ [ span_ [style_ title] [text <| ms comicName],
+ span_ [style_ subtitle] [text <| "Issue #" <> ms comicIssue],
span_ [] [text "Released: "],
- span_ [] [text $ "Pages: " <> ms (show comicPages :: String)]
+ span_ [] [text <| "Pages: " <> ms (show comicPages :: String)]
]
],
div_
[class_ "media-info-summary"]
[ p_
- [style_ $ uppercase <> bold <> Look.expanded <> "font-size" =: ".8rem"]
+ [style_ <| uppercase <> bold <> Look.expanded <> "font-size" =: ".8rem"]
[text "Summary"],
- p_ [] [text $ ms comicDescription]
+ p_ [] [text <| ms comicDescription]
],
- div_ [class_ "media-info-actions"] $ el <$> [Save c lib, Read c, Watch c]
+ div_ [class_ "media-info-actions"] <| el </ [Save c lib, Read c, Watch c]
-- , row [ text "credits" ]
]
where
@@ -586,7 +586,7 @@ comicCover :: ComicId -> Form -> View Move
comicCover comicId_ = comicReader comicId_ 1
comicLink :: ComicId -> Api.URI
-comicLink comicId_ = linkURI $ Api.safeLink routes comicProxy comicId_
+comicLink comicId_ = linkURI <| Api.safeLink routes comicProxy comicId_
-- ** chooseExperience
@@ -602,7 +602,7 @@ chooseExperienceProxy = Proxy
chooseExperienceLink :: ComicId -> PageNumber -> Api.URI
chooseExperienceLink id page =
- linkURI $ Api.safeLink routes chooseExperienceProxy id page
+ linkURI <| Api.safeLink routes chooseExperienceProxy id page
chooseExperiencePage :: Comic -> PageNumber -> Form -> View Move
chooseExperiencePage comic page form =
@@ -613,7 +613,7 @@ chooseExperiencePage comic page form =
[id_ "app-body"]
[ h2_ [] [text "Choose Your Musical Experience"],
p_ [] [text experienceBlurb],
- ul_ [] $ li comic </ experiences
+ ul_ [] <| li comic </ experiences
],
appmenu,
comicControls comic page form
@@ -621,14 +621,14 @@ chooseExperiencePage comic page form =
where
li c (name, artist, track) =
li_
- [onClick $ StartReading c]
+ [onClick <| StartReading c]
[ div_
[]
- [ img_ [src_ $ ms $ Pack.demo <> name <> ".png"],
- span_ [] [text $ ms name]
+ [ img_ [src_ <| ms <| Pack.demo <> name <> ".png"],
+ span_ [] [text <| ms name]
],
- span_ [css thicc] [text $ ms artist],
- span_ [] [text $ ms track]
+ span_ [css thicc] [text <| ms artist],
+ span_ [] [text <| ms track]
]
experiences :: [(Text, Text, Text)]
experiences =
@@ -703,7 +703,7 @@ comicReaderSpreadProxy = Proxy
comicReaderSpreadLink :: ComicId -> PageNumber -> Api.URI
comicReaderSpreadLink id page =
- linkURI $ Api.safeLink routes comicReaderSpreadProxy id page
+ linkURI <| Api.safeLink routes comicReaderSpreadProxy id page
comicSpread :: Comic -> PageNumber -> Form -> View Move
comicSpread comic page form =
@@ -740,7 +740,7 @@ comicSpread comic page form =
closeButton :: View Move
closeButton =
a_
- [id_ "close-button", onClick $ ChangeURI discoverLink]
+ [id_ "close-button", onClick <| ChangeURI discoverLink]
[text "x"]
-- * comicReaderFull
@@ -757,7 +757,7 @@ comicReaderFullProxy = Proxy
comicReaderFullLink :: ComicId -> PageNumber -> Api.URI
comicReaderFullLink id page =
- linkURI $ Api.safeLink routes comicReaderFullProxy id page
+ linkURI <| Api.safeLink routes comicReaderFullProxy id page
-- * comicVideo
@@ -773,7 +773,7 @@ comicVideoProxy = Proxy
comicVideoLink :: ComicId -> PageNumber -> Api.URI
comicVideoLink id page =
- linkURI $ Api.safeLink routes comicVideoProxy id page
+ linkURI <| Api.safeLink routes comicVideoProxy id page
frameborder_ :: MisoString -> Attribute action
frameborder_ = textProp "frameborder"
@@ -812,7 +812,7 @@ mediaInfo (Just comic) user =
div_ [class_ "media-info"] [info comic user]
appmenu :: View Move
-appmenu = aside_ [id_ "appmenu"] $ btn </ links
+appmenu = aside_ [id_ "appmenu"] <| btn </ links
where
links =
-- these extra 'discoverLink's are just dummies
@@ -825,9 +825,9 @@ appmenu = aside_ [id_ "appmenu"] $ btn </ links
btn (lnk, img, label) =
a_
[ class_ "button",
- onPreventClick $ ChangeURI lnk
+ onPreventClick <| ChangeURI lnk
]
- [ img_ [src_ $ ms $ Pack.icon <> img],
+ [ img_ [src_ <| ms <| Pack.icon <> img],
span_ [] [text label]
]
@@ -844,7 +844,7 @@ shelf title comics =
div_
[class_ "shelf"]
[ div_ [class_ "shelf-head"] [text title],
- ul_ [class_ "shelf-body"] $ thumbnail </ comics
+ ul_ [class_ "shelf-body"] <| thumbnail </ comics
]
viewOr404 ::
@@ -865,7 +865,7 @@ template id = div_ [id_ id, class_ "app is-black"]
padLeft :: Int -> MisoString
padLeft n
| n < 10 = ms ("0" <> Legacy.show n)
- | otherwise = ms $ Legacy.show n
+ | otherwise = ms <| Legacy.show n
comicControls :: Comic -> PageNumber -> Form -> View Move
comicControls comic page form =
@@ -877,31 +877,31 @@ comicControls comic page form =
]
[ audio_
[id_ audioId, loop_ True, crossorigin_ "anonymous"]
- [source_ [src_ $ ms $ Pack.demo <> "stars-instrumental.mp3"]],
- el $ PlayPause audioId $ cpAudioState form,
+ [source_ [src_ <| ms <| Pack.demo <> "stars-instrumental.mp3"]],
+ el <| PlayPause audioId <| cpAudioState form,
span_
- [css $ euro <> thicc <> smol <> wide]
+ [css <| euro <> thicc <> smol <> wide]
[text "Experiencing: Original"]
],
div_
[class_ "comic-controls-pages", css euro]
- [ el $ Arrow PrevPage,
- span_ [] [text $ leftPage <> "-" <> rightPage <> " of " <> totalpages],
- el $ Arrow NextPage
+ [ el <| Arrow PrevPage,
+ span_ [] [text <| leftPage <> "-" <> rightPage <> " of " <> totalpages],
+ el <| Arrow NextPage
],
div_
[class_ "comic-controls-share"]
- [ el $ SaveIcon comic $ user form,
- el $ ZoomIcon (magnification form) comic page,
+ [ el <| SaveIcon comic <| user form,
+ el <| ZoomIcon (magnification form) comic page,
button_
[class_ "button icon is-large", onClick ToggleFullscreen]
[i_ [class_ "fa fa-expand"] []]
]
]
where
- leftPage = ms . Legacy.show $ page
- rightPage = ms . Legacy.show $ 1 + page
- totalpages = ms . Legacy.show $ comicPages comic
+ leftPage = ms . Legacy.show <| page
+ rightPage = ms . Legacy.show <| 1 + page
+ totalpages = ms . Legacy.show <| comicPages comic
topbar :: View Move
topbar =
@@ -909,9 +909,9 @@ topbar =
[id_ "app-head", class_ "is-black", css euro]
[ a_
[ class_ "button is-medium is-black",
- onClick $ ChangeURI discoverLink
+ onClick <| ChangeURI discoverLink
]
- [img_ [src_ $ ms $ Pack.icon <> "hero-logo.svg"]],
+ [img_ [src_ <| ms <| Pack.icon <> "hero-logo.svg"]],
div_
[id_ "app-head-right"]
[ button_
@@ -919,7 +919,7 @@ topbar =
[i_ [class_ "fas fa-search"] []],
button_
[ class_ "button is-medium is-black is-size-7",
- css $ euro <> wide <> thicc
+ css <| euro <> wide <> thicc
]
[text "News"],
span_
@@ -930,10 +930,10 @@ topbar =
]
row :: [View Move] -> View Move
-row = div_ [css $ Clay.display Clay.flex <> Clay.flexDirection Clay.row]
+row = div_ [css <| Clay.display Clay.flex <> Clay.flexDirection Clay.row]
column :: [View Move] -> View Move
-column = div_ [css $ Clay.display Clay.flex <> Clay.flexDirection Clay.column]
+column = div_ [css <| Clay.display Clay.flex <> Clay.flexDirection Clay.column]
-- | Links
the404 :: form -> View Move
diff --git a/Hero/Host.hs b/Hero/Host.hs
index 326738b..d547fa5 100644
--- a/Hero/Host.hs
+++ b/Hero/Host.hs
@@ -14,7 +14,7 @@
-- | Hero web app
--
--- : exe mmc
+-- : out mmc
--
-- : dep acid-state
-- : dep aeson
@@ -90,10 +90,10 @@ main = bracket startup shutdown run
keep <- Keep.open (heroKeep cfg)
skey <- upsertKey (heroSkey cfg)
say "hero"
- prn $ "port: " ++ show (heroPort cfg)
- prn $ "keep: " ++ heroKeep cfg
- prn $ "node: " ++ heroNode cfg
- prn $ "skey: " ++ heroSkey cfg
+ prn <| "port: " ++ show (heroPort cfg)
+ prn <| "keep: " ++ heroKeep cfg
+ prn <| "node: " ++ heroNode cfg
+ prn <| "skey: " ++ heroSkey cfg
let jwts = Auth.defaultJWTSettings skey
cs =
Auth.defaultCookieSettings
@@ -103,7 +103,7 @@ main = bracket startup shutdown run
}
ctx = cs :. jwts :. EmptyContext
proxy = Proxy @(AllRoutes '[Auth.JWT, Auth.Cookie])
- static = serveDirectoryWith $ defaultWebAppSettings $ heroNode cfg
+ static = serveDirectoryWith <| defaultWebAppSettings <| heroNode cfg
server =
-- assets, auth, and the homepage is public
static
@@ -200,13 +200,13 @@ wrapAuth f authResult = case authResult of
Auth.Indefinite -> Auth.throwAll err422
jsonHandlers :: AcidState Keep.HeroKeep -> User -> Server JsonApi
-jsonHandlers keep _ = Acid.query' keep $ Keep.GetComics 10
+jsonHandlers keep _ = Acid.query' keep <| Keep.GetComics 10
type CssRoute = "css" :> "main.css" :> Get '[CSS] Text
cssHandlers :: Server CssRoute
cssHandlers =
- return . Lazy.toStrict . Clay.render $ Typography.main <> Look.main
+ return . Lazy.toStrict . Clay.render <| Typography.main <> Look.main
type AuthRoute =
"auth"
@@ -241,16 +241,16 @@ authHandler ::
authHandler cookieSettings jwtSettings loginForm =
case loginForm of
(LoginForm "ben@bsima.me" "test") ->
- applyCreds $ User "ben@bsima.me" "ben" []
+ applyCreds <| User "ben@bsima.me" "ben" []
(LoginForm "mcovino@heroprojects.io" "test") ->
- applyCreds $ User "mcovino@heroprojects.io" "mike" []
+ applyCreds <| User "mcovino@heroprojects.io" "mike" []
_ -> throwError err401
where
applyCreds usr = do
- mApplyCookies <- liftIO $ Auth.acceptLogin cookieSettings jwtSettings usr
+ mApplyCookies <- liftIO <| Auth.acceptLogin cookieSettings jwtSettings usr
case mApplyCookies of
Nothing -> throwError err401
- Just applyCookies -> return $ applyCookies usr
+ Just applyCookies -> return <| applyCookies usr
-- | See also 'server' above
type AllRoutes auths =
@@ -282,8 +282,8 @@ instance L.ToHtml a => L.ToHtml (Templated a) where
toHtmlRaw = L.toHtml
toHtml (Templated x) = do
L.doctype_
- L.html_ [L.lang_ "en"] $ do
- L.head_ $ do
+ L.html_ [L.lang_ "en"] <| do
+ L.head_ <| do
L.title_ "Hero [alpha]"
L.link_ [L.rel_ "manifest", L.href_ "/manifest.json"]
L.link_ [L.rel_ "icon", L.type_ ""]
@@ -291,7 +291,7 @@ instance L.ToHtml a => L.ToHtml (Templated a) where
L.link_
[ L.rel_ "apple-touch-icon",
L.sizes_ "180x180",
- L.href_ $
+ L.href_ <|
Pack.cdnEdge
<> "/old-assets/images/favicons/apple-touch-icon.png"
]
@@ -299,7 +299,7 @@ instance L.ToHtml a => L.ToHtml (Templated a) where
[ L.rel_ "icon",
L.type_ "image/png",
L.sizes_ "32x32",
- L.href_ $
+ L.href_ <|
Pack.cdnEdge
<> "/old-assets/images/favicons/favicon-32x32.png"
]
@@ -307,19 +307,19 @@ instance L.ToHtml a => L.ToHtml (Templated a) where
[ L.rel_ "icon",
L.type_ "image/png",
L.sizes_ "16x16",
- L.href_ $
+ L.href_ <|
Pack.cdnEdge
<> "/old-assets/images/favicons/favicon-16x16.png"
]
L.link_
[ L.rel_ "manifest",
- L.href_ $
+ L.href_ <|
Pack.cdnEdge
<> "/old-assets/images/favicons/manifest.json"
]
L.link_
[ L.rel_ "mask-icon",
- L.href_ $
+ L.href_ <|
Pack.cdnEdge
<> "/old-assets/images/favicons/safari-pinned-tab.svg"
]
@@ -351,12 +351,12 @@ instance L.ToHtml a => L.ToHtml (Templated a) where
handle404 :: Application
handle404 _ respond =
respond
- $ responseLBS status404 [("Content-Type", "text/html")]
- $ renderBS
- $ toHtml
- $ Templated
- $ the404
- $ initForm homeLink
+ <| responseLBS status404 [("Content-Type", "text/html")]
+ <| renderBS
+ <| toHtml
+ <| Templated
+ <| the404
+ <| initForm homeLink
fontAwesomeRef :: MisoString
fontAwesomeRef = "https://use.fontawesome.com/releases/v5.7.2/css/all.css"
@@ -373,30 +373,30 @@ bulmaRef =
"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"
homeHandler :: Handler (Templated (View Move))
-homeHandler = pure . Templated . home $ initForm homeLink
+homeHandler = pure . Templated . home <| initForm homeLink
comicCoverHandler :: ComicId -> Handler (Templated (View Move))
comicCoverHandler id =
- pure . Templated . comicCover id . initForm $ comicLink id
+ pure . Templated . comicCover id . initForm <| comicLink id
comicPageHandler :: ComicId -> PageNumber -> Handler (Templated (View Move))
comicPageHandler id n =
- pure . Templated . comicReader id n . initForm $ comicReaderSpreadLink id n
+ pure . Templated . comicReader id n . initForm <| comicReaderSpreadLink id n
comicPageFullHandler :: ComicId -> PageNumber -> Handler (Templated (View Move))
comicPageFullHandler id n =
- pure . Templated . comicReader id n . initForm $ comicReaderFullLink id n
+ pure . Templated . comicReader id n . initForm <| comicReaderFullLink id n
comicVideoHandler :: ComicId -> PageNumber -> Handler (Templated (View Move))
comicVideoHandler id n =
- pure . Templated . comicReader id n . initForm $ comicVideoLink id n
+ pure . Templated . comicReader id n . initForm <| comicVideoLink id n
discoverHandler :: Handler (Templated (View Move))
-discoverHandler = pure . Templated . discover $ initForm discoverLink
+discoverHandler = pure . Templated . discover <| initForm discoverLink
chooseExperienceHandler :: ComicId -> PageNumber -> Handler (Templated (View Move))
chooseExperienceHandler id n =
- pure . Templated . comicReader id n . initForm $ chooseExperienceLink id n
+ pure . Templated . comicReader id n . initForm <| chooseExperienceLink id n
loginHandler :: Handler (Templated (View Move))
-loginHandler = pure . Templated . login $ initForm loginLink
+loginHandler = pure . Templated . login <| initForm loginLink
diff --git a/Hero/Look/Typography.hs b/Hero/Look/Typography.hs
index d51cdbc..9e35ef5 100644
--- a/Hero/Look/Typography.hs
+++ b/Hero/Look/Typography.hs
@@ -52,7 +52,7 @@ fontRoot = Pack.cdnEdge <> "/old-assets/fonts/eurostile/Eurostile"
-- | font faces
fonts :: Css
fonts =
- mconcat $
+ mconcat <|
mkEuro
</ [ ("-Reg.otf", OpenType, fontWeight normal <> fontStyle normal),
("LTStd-Bold.otf", OpenType, thicc <> norm),
@@ -63,9 +63,9 @@ fonts =
]
where
mkEuro :: (Text, FontFaceFormat, Css) -> Css
- mkEuro (sufx, fmt, extra) = fontFace $ do
+ mkEuro (sufx, fmt, extra) = fontFace <| do
fontFamily ["Eurostile"] []
- fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) $ Just fmt]
+ fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) <| Just fmt]
extra
-- TODO: add the below to Clay.Font upstream
diff --git a/Hero/Node.hs b/Hero/Node.hs
index 9934fd3..70b8217 100644
--- a/Hero/Node.hs
+++ b/Hero/Node.hs
@@ -5,7 +5,7 @@
-- | Hero app frontend
--
--- : exe mmc.js
+-- : out mmc.js
--
-- : dep aeson
-- : dep clay
diff --git a/Hero/Prod.nix b/Hero/Prod.nix
index d7ab1fe..cc54f95 100644
--- a/Hero/Prod.nix
+++ b/Hero/Prod.nix
@@ -1,5 +1,16 @@
-{ config, pkgs, lib, ... }:
-{
+{ bild, lib }:
+
+# Production server for herocomics.app
+
+bild.os {
+ imports = [
+ ../Biz/OsBase.nix
+ ../Biz/Packages.nix
+ ../Biz/Users.nix
+ ./Service.nix
+ ];
+ networking.hostName = "prod-herocomics";
+ networking.domain = "herocomics.app";
boot.loader.grub.device = "/dev/vda";
fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; };
networking = {
@@ -27,8 +38,18 @@
};
};
- services.udev.extraRules = ''
- ATTR{address}=="b2:63:c4:e5:d6:36", NAME="eth0"
- '';
+ services = {
+ herocomics = {
+ enable = true;
+ port = 3000;
+ host = bild.ghc ./Host.hs;
+ node = bild.ghcjs ./Node.hs;
+ keep = "/var/lib/hero";
+ };
+
+ udev.extraRules = ''
+ ATTR{address}=="b2:63:c4:e5:d6:36", NAME="eth0"
+ '';
+ };
}