summaryrefslogtreecommitdiff
path: root/Hero/Node.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hero/Node.hs')
-rw-r--r--Hero/Node.hs90
1 files changed, 45 insertions, 45 deletions
diff --git a/Hero/Node.hs b/Hero/Node.hs
index 55bc4b0..9934fd3 100644
--- a/Hero/Node.hs
+++ b/Hero/Node.hs
@@ -26,13 +26,13 @@ import qualified Data.Set as Set
import qualified GHC.Show as Legacy
import GHCJS.Types (JSVal)
import Hero.Core
- ( Action (..),
+ ( Move (..),
AudioState (..),
Comic (..),
ComicReaderState (..),
ComicReaderView (..),
LoginForm (..),
- Model (..),
+ Form (..),
User (..),
audioId,
chooseExperienceLink,
@@ -41,7 +41,7 @@ import Hero.Core
comicVideoLink,
discoverLink,
handlers,
- initModel,
+ initForm,
routes,
the404,
)
@@ -57,7 +57,7 @@ import Protolude
-- | Entry point for a miso application
main :: IO ()
-main = miso $ \currentURI -> App {model = initModel currentURI, ..}
+main = miso $ \currentURI -> App {model = initForm currentURI, ..}
where
update = move
view = see
@@ -73,18 +73,18 @@ main = miso $ \currentURI -> App {model = initModel currentURI, ..}
(∈) = Set.member
-- | Keyboard navigation - maps keys to actions.
-keynav :: Set Int -> Action
+keynav :: Set Int -> Move
keynav ks
| 37 ∈ ks = PrevPage -- ←
| 39 ∈ ks = NextPage -- →
- | 191 ∈ ks = DumpModel -- ?
+ | 191 ∈ ks = Dumpform -- ?
| 32 ∈ ks = ToggleAudio audioId -- SPC
| otherwise = NoOp
-see :: Model -> View Action
-see model =
- case runRoute routes handlers uri model of
- Left _ -> the404 model
+see :: Form -> View Move
+see form =
+ case runRoute routes handlers uri form of
+ Left _ -> the404 form
Right v -> v
-- | Console-logging
@@ -94,38 +94,38 @@ foreign import javascript unsafe "console.log($1);"
foreign import javascript unsafe "$1.value"
getValue :: JSVal -> IO MisoString
--- | Updates model, optionally introduces side effects
-move :: Action -> Model -> Effect Action Model
-move NoOp model = noEff model
-move DumpModel model = model <# do
- jslog $ ms $ Legacy.show model
+-- | Updates form, optionally introduces side effects
+move :: Move -> Form -> Effect Move Form
+move NoOp form = noEff form
+move Dumpform form = form <# do
+ jslog $ ms $ Legacy.show form
pure NoOp
-move (SelectExperience comic) model = model {cpState = ChooseExperience (comicId comic) 1}
+move (SelectExperience comic) form = form {cpState = ChooseExperience (comicId comic) 1}
<# do pure $ ChangeURI $ chooseExperienceLink (comicId comic) 1
-move (StartReading comic) model = model {cpState = Reading Spread (comicId comic) 1}
+move (StartReading comic) form = form {cpState = Reading Spread (comicId comic) 1}
<# do pure $ ChangeURI $ comicReaderSpreadLink (comicId comic) 1
-move (StartWatching comic) model = model {cpState = Watching (comicId comic)}
+move (StartWatching comic) form = form {cpState = Watching (comicId comic)}
<# do pure $ ChangeURI $ comicVideoLink (comicId comic) 1
-move NextPage model = case cpState model of
+move NextPage form = case cpState form of
Reading Spread id pg ->
- model {cpState = Reading Spread id (pg + 2)} <# do
+ form {cpState = Reading Spread id (pg + 2)} <# do
pure $ ChangeURI $ comicReaderSpreadLink id (pg + 2)
Reading Full id pg ->
- model {cpState = Reading Full id (pg + 1)} <# do
+ form {cpState = Reading Full id (pg + 1)} <# do
pure $ ChangeURI $ comicReaderFullLink id (pg + 1)
Cover id ->
- model {cpState = Reading Spread id 1} <# do
+ form {cpState = Reading Spread id 1} <# do
pure $ ChangeURI $ comicReaderSpreadLink id 1
- _ -> noEff model
-move PrevPage model = case cpState model of
+ _ -> noEff form
+move PrevPage form = case cpState form of
Reading Spread id pg ->
- model {cpState = Reading Spread id (pg -2)} <# do
+ form {cpState = Reading Spread id (pg -2)} <# do
pure $ ChangeURI $ comicReaderSpreadLink id (pg -2)
Reading Full id pg ->
- model {cpState = Reading Full id (pg -1)} <# do
+ form {cpState = Reading Full id (pg -1)} <# do
pure $ ChangeURI $ comicReaderFullLink id (pg -1)
- Cover _ -> noEff model
- _ -> noEff model
+ Cover _ -> noEff form
+ _ -> noEff form
move (ToggleZoom c pg) m = m {cpState = newState} <# pure act
where
goto lnk = ChangeURI $ lnk (comicId c) pg
@@ -134,52 +134,52 @@ move (ToggleZoom c pg) m = m {cpState = newState} <# pure act
Reading Full _ _ -> (reading Spread, goto comicReaderSpreadLink)
Reading Spread _ _ -> (reading Full, goto comicReaderFullLink)
x -> (x, NoOp)
-move (ToggleInLibrary c) model = model {user = newUser} <# pure NoOp
+move (ToggleInLibrary c) form = form {user = newUser} <# pure NoOp
where
- newUser = (user model) {userLibrary = newLib}
+ newUser = (user form) {userLibrary = newLib}
newLib
- | c `elem` (userLibrary $ user model) =
- Protolude.filter (/= c) $ userLibrary $ user model
- | otherwise = c : (userLibrary $ user model)
-move (HandleURI u) model = model {uri = u} <# pure NoOp
-move (ChangeURI u) model = model <# do
+ | c `elem` (userLibrary $ user form) =
+ Protolude.filter (/= c) $ userLibrary $ user form
+ | otherwise = c : (userLibrary $ user form)
+move (HandleURI u) form = form {uri = u} <# pure NoOp
+move (ChangeURI u) form = form <# do
pushURI u
pure NoOp
-move FetchComics model = model <# (SetComics <$> fetchComics)
-move (SetComics cs) model = noEff model {appComics = cs}
-move (ToggleAudio i) model = model {cpAudioState = newState} <# do
+move FetchComics form = form <# (SetComics <$> fetchComics)
+move (SetComics cs) form = noEff form {appComics = cs}
+move (ToggleAudio i) form = form {cpAudioState = newState} <# do
el <- Document.getElementById i
toggle el
pure NoOp
where
- (newState, toggle) = case cpAudioState model of
+ (newState, toggle) = case cpAudioState form of
Playing -> (Paused, Audio.pause)
Paused -> (Playing, Audio.play)
-move ToggleFullscreen model = model {cpState = newState} <# do
+move ToggleFullscreen form = form {cpState = newState} <# do
el <- Document.querySelector "body"
-- TODO: check Document.fullscreenEnabled
-- https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenEnabled
_ <- toggle el
pure NoOp
where
- (toggle, newState) = case cpState model of
+ (toggle, newState) = case cpState form of
Reading Full c n -> (const Fullscreen.exit, Reading Full c n)
Reading Spread c n -> (Fullscreen.request, Reading Spread c n)
-- otherwise, do nothing:
x -> (pure, x)
-move (SetMediaInfo x) model = model {dMediaInfo = x}
+move (SetMediaInfo x) form = form {dMediaInfo = x}
<# case x of
Just Comic {comicId = id} ->
pure $ ScrollIntoView $ "comic-" <> ms id
Nothing ->
pure NoOp
-move (ScrollIntoView id) model = model <# do
+move (ScrollIntoView id) form = form <# do
jslog $ ms $ Legacy.show id
scrollIntoView id
pure NoOp
-move ValidateUserPassword model =
+move ValidateUserPassword form =
batchEff
- model
+ form
[doLogin, pure FetchComics, pure <| ChangeURI discoverLink]
where
doLogin = do