Allow to enable/disable keyboard navigation in user settings

This commit is contained in:
Eike Kettner 2020-09-22 22:33:21 +02:00
parent 5b56ea881c
commit 02a0343e55
3 changed files with 63 additions and 11 deletions

View File

@ -41,7 +41,7 @@ view inav settings model =
div div
[] []
[ renderItemInfo settings model [ renderItemInfo settings model
, renderDetailMenu inav model , renderDetailMenu settings inav model
, renderMailForm settings model , renderMailForm settings model
, renderAddFilesForm model , renderAddFilesForm model
, div [ class "ui grid" ] , div [ class "ui grid" ]
@ -90,8 +90,16 @@ view inav settings model =
--- Helper --- Helper
renderDetailMenu : ItemNav -> Model -> Html Msg renderDetailMenu : UiSettings -> ItemNav -> Model -> Html Msg
renderDetailMenu inav model = renderDetailMenu settings inav model =
let
keyDescr name =
if settings.itemDetailShortcuts && model.menuOpen then
" Key '" ++ name ++ "'."
else
""
in
div div
[ classList [ classList
[ ( "ui ablue-comp menu", True ) [ ( "ui ablue-comp menu", True )
@ -112,7 +120,7 @@ renderDetailMenu inav model =
, Maybe.map ItemDetailPage inav.prev , Maybe.map ItemDetailPage inav.prev
|> Maybe.map Page.href |> Maybe.map Page.href
|> Maybe.withDefault (href "#") |> Maybe.withDefault (href "#")
, title "Previous item. Key 'Ctrl-,'" , title ("Previous item." ++ keyDescr "Ctrl-,")
] ]
[ i [ class "caret square left outline icon" ] [] [ i [ class "caret square left outline icon" ] []
] ]
@ -124,7 +132,7 @@ renderDetailMenu inav model =
, Maybe.map ItemDetailPage inav.next , Maybe.map ItemDetailPage inav.next
|> Maybe.map Page.href |> Maybe.map Page.href
|> Maybe.withDefault (href "#") |> Maybe.withDefault (href "#")
, title "Next item. Key 'Ctrl-.'" , title ("Next item." ++ keyDescr "Ctrl-.")
] ]
[ i [ class "caret square right outline icon" ] [] [ i [ class "caret square right outline icon" ] []
] ]
@ -708,22 +716,36 @@ renderTags settings model =
renderEditMenu : UiSettings -> Model -> List (Html Msg) renderEditMenu : UiSettings -> Model -> List (Html Msg)
renderEditMenu settings model = renderEditMenu settings model =
[ Html.map ModalEditMsg (Comp.DetailEdit.viewModal settings model.modalEdit) [ Html.map ModalEditMsg (Comp.DetailEdit.viewModal settings model.modalEdit)
, div (Comp.KeyInput.eventsM KeyInputMsg) , div
[ renderEditButtons model (if settings.itemDetailShortcuts then
Comp.KeyInput.eventsM KeyInputMsg
else
[]
)
[ renderEditButtons settings model
, renderEditForm settings model , renderEditForm settings model
] ]
] ]
renderEditButtons : Model -> Html Msg renderEditButtons : UiSettings -> Model -> Html Msg
renderEditButtons model = renderEditButtons settings model =
let
keyDescr name =
if settings.itemDetailShortcuts then
" Key '" ++ name ++ "'."
else
""
in
div [ class "ui top attached icon ablue-comp menu" ] div [ class "ui top attached icon ablue-comp menu" ]
[ a [ a
[ classList [ classList
[ ( "borderless item", True ) [ ( "borderless item", True )
, ( "invisible", model.item.state /= "created" ) , ( "invisible", model.item.state /= "created" )
] ]
, title "Confirm metadata. Key 'Ctrl-c'." , title ("Confirm metadata." ++ keyDescr "Ctrl-c")
, href "#" , href "#"
, onClick ConfirmItem , onClick ConfirmItem
] ]
@ -735,7 +757,7 @@ renderEditButtons model =
, ( "invisible", model.item.state /= "confirmed" ) , ( "invisible", model.item.state /= "confirmed" )
] ]
, href "#" , href "#"
, title "Unconfirm metadata. Key 'Ctrl-c'." , title ("Unconfirm metadata." ++ keyDescr "Ctrl-c")
, onClick UnconfirmItem , onClick UnconfirmItem
] ]
[ i [ class "eye slash outline icon" ] [] [ i [ class "eye slash outline icon" ] []

View File

@ -39,6 +39,7 @@ type alias Model =
, searchMenuTagCatCount : Maybe Int , searchMenuTagCatCount : Maybe Int
, searchMenuTagCatCountModel : Comp.IntField.Model , searchMenuTagCatCountModel : Comp.IntField.Model
, formFields : List Field , formFields : List Field
, itemDetailShortcuts : Bool
} }
@ -87,6 +88,7 @@ init flags settings =
False False
"Number of categories in search menu" "Number of categories in search menu"
, formFields = settings.formFields , formFields = settings.formFields
, itemDetailShortcuts = settings.itemDetailShortcuts
} }
, Api.getTags flags "" GetTagsResp , Api.getTags flags "" GetTagsResp
) )
@ -103,6 +105,7 @@ type Msg
| SearchMenuTagMsg Comp.IntField.Msg | SearchMenuTagMsg Comp.IntField.Msg
| SearchMenuTagCatMsg Comp.IntField.Msg | SearchMenuTagCatMsg Comp.IntField.Msg
| FieldListMsg Comp.FieldListSelect.Msg | FieldListMsg Comp.FieldListSelect.Msg
| ToggleItemDetailShortcuts
@ -261,6 +264,15 @@ update sett msg model =
Nothing Nothing
) )
ToggleItemDetailShortcuts ->
let
flag =
not model.itemDetailShortcuts
in
( { model | itemDetailShortcuts = flag }
, Just { sett | itemDetailShortcuts = flag }
)
--- View --- 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" ] , div [ class "grouped fields" ]
[ label [] [ text "Position of item notes" ] [ label [] [ text "Position of item notes" ]
, div [ class "field" ] , div [ class "field" ]

View File

@ -40,6 +40,7 @@ type alias StoredUiSettings =
, searchMenuTagCount : Maybe Int , searchMenuTagCount : Maybe Int
, searchMenuTagCatCount : Maybe Int , searchMenuTagCatCount : Maybe Int
, formFields : Maybe (List String) , formFields : Maybe (List String)
, itemDetailShortcuts : Bool
} }
@ -60,6 +61,7 @@ type alias UiSettings =
, searchMenuTagCount : Int , searchMenuTagCount : Int
, searchMenuTagCatCount : Int , searchMenuTagCatCount : Int
, formFields : List Field , formFields : List Field
, itemDetailShortcuts : Bool
} }
@ -102,6 +104,7 @@ defaults =
, searchMenuTagCount = 6 , searchMenuTagCount = 6
, searchMenuTagCatCount = 3 , searchMenuTagCatCount = 3
, formFields = Data.Fields.all , formFields = Data.Fields.all
, itemDetailShortcuts = False
} }
@ -134,6 +137,7 @@ merge given fallback =
choose choose
(Maybe.map Data.Fields.fromList given.formFields) (Maybe.map Data.Fields.fromList given.formFields)
fallback.formFields fallback.formFields
, itemDetailShortcuts = given.itemDetailShortcuts
} }
@ -157,6 +161,7 @@ toStoredUiSettings settings =
, formFields = , formFields =
List.map Data.Fields.toString settings.formFields List.map Data.Fields.toString settings.formFields
|> Just |> Just
, itemDetailShortcuts = settings.itemDetailShortcuts
} }