Initial experiments in hash routing.

[?]
Sep 3, 2020, 5:12 AM
SAESJLLYCQJUIHKFYFV53AWHFOSGI5SKLVS7DPTQO6BKGITPYPUQC

Dependencies

  • [2] OUR4PAOT Use local dates for display of intervals.
  • [3] 5R2Z7FSX Initial rendering for signup controls.
  • [4] QMEYU4MW Add display for prior intervals.
  • [5] BFZN4SUA Make timeline component work.
  • [6] QU5FW67R Add project selection to time tracker.
  • [7] ARX7SHY5 Begin work on login UI.
  • [8] TKGBRIQT Login component now raises LoginComplete message.
  • [9] TUA4HMUD Use real API capability for login.
  • [10] PT4276XC Add logout functionality.
  • [11] QQXR7DTO Rework login component to use more appropriate Bootstrap theme.
  • [12] JXG3FCXY Upgrade ps + halogen versions.
  • [13] WRPIYG3E Use project listing functionality to check for whether we have a cookie.
  • [14] EA5BFM5G Split Login component into its own module.
  • [15] 3LMXT7Z6 preventDefault on login form submission.
  • [16] HO2PFRAB Client login now handles response correctly.
  • [17] NJNMO72S Add zcash.com submodule and update client to modern halogen.
  • [*] RB2ETNIF Add skeletal PureScript client project.
  • [*] 5FLAK3ME Fix nginx mime types.

Change contents

  • replacement in client/dev/index.html at line 6
    [4.2573][4.2573:2649](),[4.2649][4.4:82]()
    <link rel="stylesheet" type="text/css" href="./assets/css/theme.css" />
    <link rel="stylesheet" type="text/css" href="./assets/css/spinner.css" />
    [4.2573]
    [4.2649]
    <link rel="stylesheet" type="text/css" href="/assets/css/theme.css" />
    <link rel="stylesheet" type="text/css" href="/assets/css/spinner.css" />
  • edit in client/spago.dhall at line 10
    [4.295116]
    [4.376]
    , "routing"
  • replacement in client/src/Aftok/Login.purs at line 51
    [4.596][4.409:470]()
    newtype LoginComplete = LoginComplete { username :: String }
    [4.596]
    [4.725]
    data LoginResult
    = LoginComplete { username :: String }
  • replacement in client/src/Aftok/Login.purs at line 54
    [4.726][4.295950:296009]()
    type Slot id = forall query. H.Slot query LoginComplete id
    [4.726]
    [4.832]
    type Slot id = forall query. H.Slot query LoginResult id
  • replacement in client/src/Aftok/Login.purs at line 67
    [4.132][4.296155:296208](),[4.296155][4.296155:296208]()
    -> H.Component HH.HTML query input LoginComplete m
    [4.132]
    [4.133]
    -> H.Component HH.HTML query input LoginResult m
  • edit in client/src/Aftok/Login.purs at line 160
    [4.300047]
    [4.300047]
    , HH.p
    [ P.classes (ClassName <$> ["mb-0", "font-size-sm", "text-center", "text-muted"]) ]
    [ HH.text "Need an account? "
    , HH.a
    [ P.href "./#signup" ]
    [ HH.text "Sign up" ]
    ]
  • replacement in client/src/Aftok/Login.purs at line 170
    [4.2139][4.300062:300147]()
    eval :: LoginAction -> H.HalogenM LoginState LoginAction () LoginComplete m Unit
    [4.2139]
    [4.300147]
    eval :: LoginAction -> H.HalogenM LoginState LoginAction () LoginResult m Unit
  • replacement in client/src/Aftok/Signup.purs at line 17
    [3.385][3.385:419]()
    -- import Halogen.HTML.CSS as CSS
    [3.385]
    [3.419]
    import Halogen.HTML.CSS as CSS
  • edit in client/src/Aftok/Signup.purs at line 24
    [3.590]
    [3.590]
    import CSS.Display (display, flex)
    import CSS.Flexbox (flexFlow, row, nowrap)
  • edit in client/src/Aftok/Signup.purs at line 61
    [3.1362][3.1362:1378]()
    | LoginSwitch
  • replacement in client/src/Aftok/Signup.purs at line 112
    [3.2920][3.2920:3025]()
    [ P.classes (ClassName <$> ["align-items-center", "justify-content-center", "no-gutters"]) ]
    [3.2920]
    [3.3025]
    [ P.classes (ClassName <$> ["row", "align-items-center", "justify-content-center", "no-gutters"]) ]
  • edit in client/src/Aftok/Signup.purs at line 182
    [3.6059]
    [3.6059]
    SetRecoveryType t -> H.modify_ (_ { recoveryType = t })
  • replacement in client/src/Aftok/Signup.purs at line 195
    [3.6420][3.6420:6479]()
    [ P.classes (ClassName <$> ["form-group", "mb-3"]) ]
    [3.6420]
    [3.6479]
    [ P.classes (ClassName <$> ["form-group", "mb-3"])
    , CSS.style do
    display flex
    flexFlow row nowrap
    ]
  • edit in client/src/Aftok/Signup.purs at line 211
    [3.7015]
    [3.7015]
    , HH.label [ P.classes (ClassName <$> [ "custom-control-label" ]), P.for "recoverySwitch" ] []
  • replacement in client/src/Aftok/Signup.purs at line 244
    [3.7987][3.7987:8072]()
    [ HH.img [ P.src "./assets/img/icons/duotone-icons/Code/Info-circle.svg" ]
    [3.7987]
    [3.8072]
    [ HH.img [ P.src "/assets/img/icons/duotone-icons/Code/Info-circle.svg" ]
  • edit in client/src/Aftok/Signup.purs at line 257
    [3.8398]
    mockCapability :: forall m. Applicative m => Capability m
    mockCapability =
    { signup: \_ _ -> pure OK
    }
  • edit in client/src/Aftok/Types.purs at line 33
    [4.11510]
    [4.7524]
    import Routing.Hash as H
  • edit in client/src/Aftok/Types.purs at line 39
    [4.11606]
    [4.11606]
    , getHash :: m String
  • edit in client/src/Aftok/Types.purs at line 50
    [4.11809]
    [4.11809]
    , getHash: liftEffect H.getHash
  • edit in client/src/Main.purs at line 24
    [4.307714]
    [4.307714]
    import Aftok.Signup as Signup
  • edit in client/src/Main.purs at line 33
    [4.1617]
    [4.7682]
    signup = Signup.mockCapability
  • replacement in client/src/Main.purs at line 36
    [4.3826][4.13621:13687]()
    mainComponent = component liveSystem login timeline project
    [4.3826]
    [4.1541]
    mainComponent = component liveSystem login signup timeline project
  • edit in client/src/Main.purs at line 38
    [4.1573]
    [4.1116]
    data MainView
    = VLoading
    | VSignup
    | VLogin
    | VTimeline
  • replacement in client/src/Main.purs at line 45
    [4.1487][4.308019:308035](),[4.308035][4.1574:1586](),[4.1586][4.308049:308063](),[4.308049][4.308049:308063](),[4.308063][4.1587:1601]()
    data MainState
    = Loading
    | LoggedOut
    | LoggedIn
    [4.1117]
    [4.308063]
    type MainState =
    { view :: MainView
    , config :: Signup.Config
    }
  • replacement in client/src/Main.purs at line 52
    [4.3913][4.3913:3951](),[4.3951][4.1602:1613]()
    | LoginComplete Login.LoginComplete
    | Logout
    [4.3913]
    [4.1118]
    | LoginAction Login.LoginResult
    | SignupAction Signup.SignupResult
    | LogoutAction
  • edit in client/src/Main.purs at line 58
    [4.1723]
    [4.1723]
    , signup :: Signup.Slot Unit
  • edit in client/src/Main.purs at line 63
    [4.308236]
    [4.308236]
    _signup = SProxy :: SProxy "signup"
  • edit in client/src/Main.purs at line 71
    [4.13772]
    [4.13772]
    -> Signup.Capability m
  • replacement in client/src/Main.purs at line 75
    [4.13871][4.13871:13925]()
    component system loginCap tlCap pCap = H.mkComponent
    [4.13871]
    [4.308429]
    component system loginCap signupCap tlCap pCap = H.mkComponent
  • replacement in client/src/Main.purs at line 84
    [4.308567][2.8276:8305]()
    initialState _ = Loading
    [4.308567]
    [4.308598]
    initialState _ = { view: VLoading, config: { recaptchaKey: "" } }
  • replacement in client/src/Main.purs at line 87
    [4.13988][2.8306:8329](),[2.8329][4.1614:1631](),[4.308688][4.1614:1631]()
    render = case _ of
    Loading ->
    [4.13988]
    [4.1631]
    render st = case st.view of
    VLoading ->
  • replacement in client/src/Main.purs at line 91
    [4.1703][4.308688:308708](),[4.308688][4.308688:308708]()
    LoggedOut ->
    [4.1703]
    [4.1704]
    VSignup ->
  • replacement in client/src/Main.purs at line 93
    [4.1721][4.13989:14087]()
    [ HH.slot _login unit (Login.component system loginCap) unit (Just <<< LoginComplete) ]
    [4.1721]
    [4.1812]
    [ HH.slot _signup unit (Signup.component system signupCap st.config) unit (Just <<< SignupAction) ]
  • replacement in client/src/Main.purs at line 95
    [4.377][4.308805:308824](),[4.1813][4.308805:308824](),[4.1929][4.308805:308824](),[4.308805][4.308805:308824]()
    LoggedIn ->
    [4.1813]
    [4.1814]
    VLogin ->
    HH.div_
    [ HH.slot _login unit (Login.component system loginCap) unit (Just <<< LoginAction) ]
    VTimeline ->
  • replacement in client/src/Main.purs at line 104
    [4.14255][4.309005:309026](),[4.309005][4.309005:309026]()
    eval = case _ of
    [4.14255]
    [4.4241]
    eval action = case action of
  • replacement in client/src/Main.purs at line 106
    [4.4264][4.1938:2080]()
    result <- lift loginCap.checkLogin
    case result of
    Login.Forbidden -> H.put LoggedOut
    _ -> H.put LoggedIn
    [4.4264]
    [4.4407]
    route <- lift system.getHash
    nextView <- case route of
    "login" -> pure VLogin
    "signup" -> pure VSignup
    other -> do
    result <- lift loginCap.checkLogin
    case result of
    Login.Forbidden -> pure VLogin
    _ -> pure VTimeline
    H.modify_ (_ { view = nextView })
  • replacement in client/src/Main.purs at line 117
    [4.4408][2.8330:8378](),[2.8378][4.4457:4480](),[4.4457][4.4457:4480]()
    LoginComplete (Login.LoginComplete _) ->
    H.put LoggedIn
    [4.4408]
    [4.2081]
    LoginAction (Login.LoginComplete _) ->
    H.modify_ (_ { view = VTimeline })
  • replacement in client/src/Main.purs at line 120
    [4.2082][4.2082:2101]()
    Logout -> do
    [4.2082]
    [4.2101]
    SignupAction (Signup.SignupComplete _) ->
    H.modify_ (_ { view = VTimeline })
    LogoutAction -> do
  • replacement in client/src/Main.purs at line 125
    [4.2130][4.2130:2154]()
    H.put LoggedOut
    [4.2130]
    [4.2154]
    H.modify_ (_ { view = VLogin })
  • replacement in client/src/Main.purs at line 151
    [4.2869][4.2869:2901]()
    ,E.onClick \_ -> Just Logout
    [4.2869]
    [4.2901]
    ,E.onClick \_ -> Just LogoutAction
  • edit in deploy/nginx/mime.types at line 11
    [20.434]
    [20.434]
    image/svg+xml svg;