@@ -2,15 +2,15 @@ module View.Drawer exposing (drawerView)
22
33import Html exposing (Html , a , div , h2 , input , option , p , section , select , span , text )
44import Html.Attributes exposing (class , href , id , selected , style , target , title , type_ , value )
5- import Html.Events exposing (onClick , onInput )
5+ import Html.Events exposing (onBlur , onClick , onInput )
66import ListWithCurrent
77import Svg exposing (path , svg )
88import Svg.Attributes as SvgAttr
99import Types exposing (Model , Msg (..) , SessionType (..) , Setting (..) , SettingTab (..) , SettingType (..) )
1010
1111
12- settingWrapper : String -> Msg -> Bool -> Html Msg
13- settingWrapper title msg settingActive =
12+ settingWrapperToggle : String -> Msg -> Bool -> Html Msg
13+ settingWrapperToggle title msg settingActive =
1414 div
1515 [ class " setting-wrapper"
1616 , onClick msg
@@ -366,7 +366,8 @@ timerSettingView model =
366366 [ type_ " text"
367367 , class " setting-input"
368368 , Html . Attributes . min " 1"
369- , Html . Attributes . max " 90"
369+ , Html . Attributes . step " 1"
370+ , Html . Attributes . max <| String . fromInt ( model. config. maxSessionDuration // 60 )
370371 , value <| String . fromFloat ( toFloat model. config. focusDuration / 60 )
371372 , onInput <| FocusTime >> UpdateSetting
372373 , style " width" <| String . fromInt ( String . length <| String . fromFloat ( toFloat model. config. focusDuration / 60 )) ++ " ch"
@@ -380,7 +381,7 @@ timerSettingView model =
380381 [ input
381382 [ type_ " range"
382383 , Html . Attributes . min " 1"
383- , Html . Attributes . max " 90 "
384+ , Html . Attributes . max <| String . fromInt ( model . config . maxSessionDuration // 60 )
384385 , Html . Attributes . step " 1"
385386 , class " slider slider--red"
386387 , value <| String . fromFloat ( toFloat model. config. focusDuration / 60 )
@@ -389,7 +390,7 @@ timerSettingView model =
389390 []
390391 , div
391392 [ class " slider-bar slider-bar--red"
392- , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. focusDuration / 60 ) / 90 ) - 0.5 ) ++ " %" )
393+ , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. focusDuration / 60 ) / ( toFloat model . config . maxSessionDuration / 60 ) ) - 0.5 ) ++ " %" )
393394 ]
394395 []
395396 ]
@@ -408,7 +409,7 @@ timerSettingView model =
408409 [ type_ " text"
409410 , class " setting-input"
410411 , Html . Attributes . min " 1"
411- , Html . Attributes . max " 90 "
412+ , Html . Attributes . max <| String . fromInt ( model . config . maxSessionDuration // 60 )
412413 , value <| String . fromFloat ( toFloat model. config. shortBreakDuration / 60 )
413414 , onInput <| ShortBreakTime >> UpdateSetting
414415 , style " width" <| String . fromInt ( String . length <| String . fromFloat ( toFloat model. config. shortBreakDuration / 60 )) ++ " ch"
@@ -422,7 +423,7 @@ timerSettingView model =
422423 [ input
423424 [ type_ " range"
424425 , Html . Attributes . min " 1"
425- , Html . Attributes . max " 90 "
426+ , Html . Attributes . max <| String . fromInt ( model . config . maxSessionDuration // 60 )
426427 , Html . Attributes . step " 1"
427428 , class " slider slider--green"
428429 , value <| String . fromFloat ( toFloat model. config. shortBreakDuration / 60 )
@@ -431,7 +432,7 @@ timerSettingView model =
431432 []
432433 , div
433434 [ class " slider-bar slider-bar--green"
434- , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. shortBreakDuration / 60 ) / 90 ) - 0.5 ) ++ " %" )
435+ , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. shortBreakDuration / 60 ) / ( toFloat model . config . maxSessionDuration / 60 ) ) - 0.5 ) ++ " %" )
435436 ]
436437 []
437438 ]
@@ -450,7 +451,7 @@ timerSettingView model =
450451 [ type_ " text"
451452 , class " setting-input"
452453 , Html . Attributes . min " 1"
453- , Html . Attributes . max " 90 "
454+ , Html . Attributes . max <| String . fromInt ( model . config . maxSessionDuration // 60 )
454455 , value <| String . fromFloat ( toFloat model. config. longBreakDuration / 60 )
455456 , onInput <| LongBreakTime >> UpdateSetting
456457 , style " width" <| String . fromInt ( String . length <| String . fromFloat ( toFloat model. config. longBreakDuration / 60 )) ++ " ch"
@@ -464,7 +465,7 @@ timerSettingView model =
464465 [ input
465466 [ type_ " range"
466467 , Html . Attributes . min " 1"
467- , Html . Attributes . max " 90 "
468+ , Html . Attributes . max <| String . fromInt ( model . config . maxSessionDuration // 60 )
468469 , Html . Attributes . step " 1"
469470 , class " slider slider--blue"
470471 , value <| String . fromFloat ( toFloat model. config. longBreakDuration / 60 )
@@ -473,7 +474,7 @@ timerSettingView model =
473474 []
474475 , div
475476 [ class " slider-bar slider-bar--blue"
476- , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. longBreakDuration / 60 ) / 90 ) - 0.5 ) ++ " %" )
477+ , style " width" ( String . fromFloat (( 100 * ( toFloat model. config. longBreakDuration / 60 ) / ( toFloat model . config . maxSessionDuration / 60 ) ) - 0.5 ) ++ " %" )
477478 ]
478479 []
479480 ]
@@ -539,15 +540,15 @@ settingsSettingView { config } =
539540 [ class " drawer-heading"
540541 ]
541542 [ text " General Settings" ]
542- , settingWrapper " Always On Top" ( UpdateSetting <| Toggle AlwaysOnTop ) config. alwaysOnTop
543- , settingWrapper " Auto-start Work Timer after Break" ( UpdateSetting <| Toggle AutoStartWorkTimer ) config. autoStartWorkTimer
544- , settingWrapper " Auto-start Work Timer at app startup" ( UpdateSetting <| Toggle AutoStartOnAppStartup ) config. autoStartOnAppStartup
545- , settingWrapper " Auto-start Break Timer after Work" ( UpdateSetting <| Toggle AutoStartBreakTimer ) config. autoStartBreakTimer
546- , settingWrapper " Auto-start the app on system startup" ( UpdateSetting <| Toggle SystemStartupAutoStart ) config. systemStartupAutoStart
543+ , settingWrapperToggle " Always On Top" ( UpdateSetting <| Toggle AlwaysOnTop ) config. alwaysOnTop
544+ , settingWrapperToggle " Auto-start Work Timer after Break" ( UpdateSetting <| Toggle AutoStartWorkTimer ) config. autoStartWorkTimer
545+ , settingWrapperToggle " Auto-start Work Timer at app startup" ( UpdateSetting <| Toggle AutoStartOnAppStartup ) config. autoStartOnAppStartup
546+ , settingWrapperToggle " Auto-start Break Timer after Work" ( UpdateSetting <| Toggle AutoStartBreakTimer ) config. autoStartBreakTimer
547+ , settingWrapperToggle " Auto-start the app on system startup" ( UpdateSetting <| Toggle SystemStartupAutoStart ) config. systemStartupAutoStart
547548 , div
548549 [ class " setting-wrapper"
549550 ]
550- [ p [ class " setting-title" , style " margin-top" " 0.3rem" ] [ text " Auto-quit app " ]
551+ [ p [ class " setting-title" , style " margin-top" " 0.3rem" ] [ text " Auto-quit App " ]
551552 , div
552553 []
553554 [ select [ onInput ( AutoQuit >> UpdateSetting ) ]
@@ -558,10 +559,31 @@ settingsSettingView { config } =
558559 ]
559560 ]
560561 ]
561- , settingWrapper " Desktop Notifications" ( UpdateSetting <| Toggle DesktopNotifications ) config. desktopNotifications
562- , settingWrapper " Minimize to Tray" ( UpdateSetting <| Toggle MinimizeToTray ) config. minimizeToTray
563- , settingWrapper " Minimize to Tray on Close" ( UpdateSetting <| Toggle MinimizeToTrayOnClose ) config. minimizeToTrayOnClose
564- , settingWrapper " Start minimized to Tray" ( UpdateSetting <| Toggle StartMinimized ) config. startMinimized
562+ , settingWrapperToggle " Desktop Notifications" ( UpdateSetting <| Toggle DesktopNotifications ) config. desktopNotifications
563+ , div
564+ [ class " setting-wrapper"
565+ ]
566+ [ p [ class " setting-title" , style " margin-top" " 0.3rem" ] [ text " Max Session Duration" ]
567+ , div
568+ [ class " setting-value setting-time-input-wrapper"
569+ ]
570+ [ input
571+ [ type_ " text"
572+ , class " setting-time-input"
573+ , Html . Attributes . min " 1"
574+ , Html . Attributes . step " 1"
575+ , value <| String . fromFloat ( toFloat config. maxSessionDuration / 60 )
576+ , onInput <| MaxSessionDuration >> UpdateSetting
577+ , onBlur <| UpdateSetting SaveMaxSessionDuration
578+ , style " width" <| String . fromInt ( String . length <| String . fromFloat ( toFloat config. maxSessionDuration / 60 )) ++ " ch"
579+ ]
580+ []
581+ , text " :00"
582+ ]
583+ ]
584+ , settingWrapperToggle " Minimize to Tray" ( UpdateSetting <| Toggle MinimizeToTray ) config. minimizeToTray
585+ , settingWrapperToggle " Minimize to Tray on Close" ( UpdateSetting <| Toggle MinimizeToTrayOnClose ) config. minimizeToTrayOnClose
586+ , settingWrapperToggle " Start minimized to Tray" ( UpdateSetting <| Toggle StartMinimized ) config. startMinimized
565587 ]
566588
567589
@@ -572,8 +594,8 @@ soundsSettingView model =
572594 [ class " drawer-heading"
573595 ]
574596 [ text " Sound Settings" ]
575- , settingWrapper " Tick Sounds - Break" ( UpdateSetting <| Toggle TickSoundsDuringBreak ) model. config. tickSoundsDuringBreak
576- , settingWrapper " Tick Sounds - Work" ( UpdateSetting <| Toggle TickSoundsDuringWork ) model. config. tickSoundsDuringWork
597+ , settingWrapperToggle " Tick Sounds - Break" ( UpdateSetting <| Toggle TickSoundsDuringBreak ) model. config. tickSoundsDuringBreak
598+ , settingWrapperToggle " Tick Sounds - Work" ( UpdateSetting <| Toggle TickSoundsDuringWork ) model. config. tickSoundsDuringWork
577599 , audioFileWrapper model. config. shortBreakAudio ShortBreak " Short break"
578600 , audioFileWrapper model. config. longBreakAudio LongBreak " Long break"
579601 , audioFileWrapper model. config. focusAudio Focus " Work session"
0 commit comments