From 02a0343e55aa2c7c94081beae3c9018de54bad4e Mon Sep 17 00:00:00 2001 From: Eike Kettner <eike.kettner@posteo.de> Date: Tue, 22 Sep 2020 22:33:21 +0200 Subject: [PATCH] Allow to enable/disable keyboard navigation in user settings --- .../src/main/elm/Comp/ItemDetail/View.elm | 44 ++++++++++++++----- .../src/main/elm/Comp/UiSettingsForm.elm | 25 +++++++++++ .../webapp/src/main/elm/Data/UiSettings.elm | 5 +++ 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm index 4be58ea3..348f52a4 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/View.elm @@ -41,7 +41,7 @@ view inav settings model = div [] [ renderItemInfo settings model - , renderDetailMenu inav model + , renderDetailMenu settings inav model , renderMailForm settings model , renderAddFilesForm model , div [ class "ui grid" ] @@ -90,8 +90,16 @@ view inav settings model = --- Helper -renderDetailMenu : ItemNav -> Model -> Html Msg -renderDetailMenu inav model = +renderDetailMenu : UiSettings -> ItemNav -> Model -> Html Msg +renderDetailMenu settings inav model = + let + keyDescr name = + if settings.itemDetailShortcuts && model.menuOpen then + " Key '" ++ name ++ "'." + + else + "" + in div [ classList [ ( "ui ablue-comp menu", True ) @@ -112,7 +120,7 @@ renderDetailMenu inav model = , Maybe.map ItemDetailPage inav.prev |> Maybe.map Page.href |> Maybe.withDefault (href "#") - , title "Previous item. Key 'Ctrl-,'" + , title ("Previous item." ++ keyDescr "Ctrl-,") ] [ i [ class "caret square left outline icon" ] [] ] @@ -124,7 +132,7 @@ renderDetailMenu inav model = , Maybe.map ItemDetailPage inav.next |> Maybe.map Page.href |> Maybe.withDefault (href "#") - , title "Next item. Key 'Ctrl-.'" + , title ("Next item." ++ keyDescr "Ctrl-.") ] [ i [ class "caret square right outline icon" ] [] ] @@ -708,22 +716,36 @@ renderTags settings model = renderEditMenu : UiSettings -> Model -> List (Html Msg) renderEditMenu settings model = [ Html.map ModalEditMsg (Comp.DetailEdit.viewModal settings model.modalEdit) - , div (Comp.KeyInput.eventsM KeyInputMsg) - [ renderEditButtons model + , div + (if settings.itemDetailShortcuts then + Comp.KeyInput.eventsM KeyInputMsg + + else + [] + ) + [ renderEditButtons settings model , renderEditForm settings model ] ] -renderEditButtons : Model -> Html Msg -renderEditButtons model = +renderEditButtons : UiSettings -> Model -> Html Msg +renderEditButtons settings model = + let + keyDescr name = + if settings.itemDetailShortcuts then + " Key '" ++ name ++ "'." + + else + "" + in div [ class "ui top attached icon ablue-comp menu" ] [ a [ classList [ ( "borderless item", True ) , ( "invisible", model.item.state /= "created" ) ] - , title "Confirm metadata. Key 'Ctrl-c'." + , title ("Confirm metadata." ++ keyDescr "Ctrl-c") , href "#" , onClick ConfirmItem ] @@ -735,7 +757,7 @@ renderEditButtons model = , ( "invisible", model.item.state /= "confirmed" ) ] , href "#" - , title "Unconfirm metadata. Key 'Ctrl-c'." + , title ("Unconfirm metadata." ++ keyDescr "Ctrl-c") , onClick UnconfirmItem ] [ i [ class "eye slash outline icon" ] [] diff --git a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm index 129c2f1a..7a4a29dc 100644 --- a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm +++ b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm @@ -39,6 +39,7 @@ type alias Model = , searchMenuTagCatCount : Maybe Int , searchMenuTagCatCountModel : Comp.IntField.Model , formFields : List Field + , itemDetailShortcuts : Bool } @@ -87,6 +88,7 @@ init flags settings = False "Number of categories in search menu" , formFields = settings.formFields + , itemDetailShortcuts = settings.itemDetailShortcuts } , Api.getTags flags "" GetTagsResp ) @@ -103,6 +105,7 @@ type Msg | SearchMenuTagMsg Comp.IntField.Msg | SearchMenuTagCatMsg Comp.IntField.Msg | FieldListMsg Comp.FieldListSelect.Msg + | ToggleItemDetailShortcuts @@ -261,6 +264,15 @@ update sett msg model = Nothing ) + ToggleItemDetailShortcuts -> + let + flag = + not model.itemDetailShortcuts + in + ( { model | itemDetailShortcuts = flag } + , Just { sett | itemDetailShortcuts = flag } + ) + --- View @@ -342,6 +354,19 @@ view flags _ model = ] ] ] + , div [ class "field" ] + [ div [ class "ui checkbox" ] + [ input + [ type_ "checkbox" + , onCheck (\_ -> ToggleItemDetailShortcuts) + , checked model.itemDetailShortcuts + ] + [] + , label [] + [ text "Use keyboard shortcuts for navigation and confirm/unconfirm with open edit menu." + ] + ] + ] , div [ class "grouped fields" ] [ label [] [ text "Position of item notes" ] , div [ class "field" ] diff --git a/modules/webapp/src/main/elm/Data/UiSettings.elm b/modules/webapp/src/main/elm/Data/UiSettings.elm index 2369b04a..16c978b1 100644 --- a/modules/webapp/src/main/elm/Data/UiSettings.elm +++ b/modules/webapp/src/main/elm/Data/UiSettings.elm @@ -40,6 +40,7 @@ type alias StoredUiSettings = , searchMenuTagCount : Maybe Int , searchMenuTagCatCount : Maybe Int , formFields : Maybe (List String) + , itemDetailShortcuts : Bool } @@ -60,6 +61,7 @@ type alias UiSettings = , searchMenuTagCount : Int , searchMenuTagCatCount : Int , formFields : List Field + , itemDetailShortcuts : Bool } @@ -102,6 +104,7 @@ defaults = , searchMenuTagCount = 6 , searchMenuTagCatCount = 3 , formFields = Data.Fields.all + , itemDetailShortcuts = False } @@ -134,6 +137,7 @@ merge given fallback = choose (Maybe.map Data.Fields.fromList given.formFields) fallback.formFields + , itemDetailShortcuts = given.itemDetailShortcuts } @@ -157,6 +161,7 @@ toStoredUiSettings settings = , formFields = List.map Data.Fields.toString settings.formFields |> Just + , itemDetailShortcuts = settings.itemDetailShortcuts }