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
[]
[ 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" ] []

View File

@ -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" ]

View File

@ -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
}