diff options
Diffstat (limited to 'Hero/Node.hs')
-rw-r--r-- | Hero/Node.hs | 90 |
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 |