summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2020-03-16 16:20:45 +0100
committerYorhel <git@yorhel.nl>2020-03-16 16:20:55 +0100
commite81d9db2bcb50952cc079e6af82e549c66109b2b (patch)
tree6f9150dd1bbdf714b40ada7a6bda8d477705f12f
parent0e788f5667cb565326ff11dcd863a9a2fe434f6c (diff)
imgflag: Add keyboard shortcuts
Image flagging has now been made 100% more convenient.
-rw-r--r--elm/ImageFlagging.elm47
1 files changed, 37 insertions, 10 deletions
diff --git a/elm/ImageFlagging.elm b/elm/ImageFlagging.elm
index 6c9a5816..3a1f2163 100644
--- a/elm/ImageFlagging.elm
+++ b/elm/ImageFlagging.elm
@@ -6,6 +6,7 @@ import Html.Events exposing (..)
import Array
import Dict
import Browser
+import Browser.Events as EV
import Task
import Process
import Json.Decode as JD
@@ -18,13 +19,12 @@ import Gen.Images as GI
import Gen.ImageVote as GIV
--- TODO: Keyboard shortcuts
main : Program () Model Msg
main = Browser.element
{ init = \e -> (init e, Cmd.none)
, view = view
, update = update
- , subscriptions = always Sub.none
+ , subscriptions = \m -> if m.warn then Sub.none else EV.onKeyDown (keymap m)
}
@@ -54,6 +54,33 @@ init _ =
}
+-- TODO: Document keyboard shortcuts somewhere
+keymap : Model -> JD.Decoder Msg
+keymap model =
+ let (s,v) = Maybe.withDefault (Nothing,Nothing) <| Maybe.map (\i -> (i.my_sexual, i.my_violence)) <| Array.get model.index model.images
+ in JD.andThen (\k ->
+ case k of
+ "ArrowLeft" -> JD.succeed Prev
+ "ArrowRight" -> JD.succeed Next
+ "1" -> JD.succeed (Vote (Just 0) (Just 0) True)
+ "2" -> JD.succeed (Vote (Just 1) (Just 0) True)
+ "3" -> JD.succeed (Vote (Just 2) (Just 0) True)
+ "4" -> JD.succeed (Vote (Just 0) (Just 1) True)
+ "5" -> JD.succeed (Vote (Just 1) (Just 1) True)
+ "6" -> JD.succeed (Vote (Just 2) (Just 1) True)
+ "7" -> JD.succeed (Vote (Just 0) (Just 2) True)
+ "8" -> JD.succeed (Vote (Just 1) (Just 2) True)
+ "9" -> JD.succeed (Vote (Just 2) (Just 2) True)
+ "s" -> JD.succeed (Vote (Just 0) v True)
+ "d" -> JD.succeed (Vote (Just 1) v True)
+ "f" -> JD.succeed (Vote (Just 2) v True)
+ "j" -> JD.succeed (Vote s (Just 0) True)
+ "k" -> JD.succeed (Vote s (Just 1) True)
+ "l" -> JD.succeed (Vote s (Just 2) True)
+ _ -> JD.fail ""
+ ) (JD.field "key" JD.string)
+
+
type Msg
= SkipWarn
| Desc (Maybe Int) (Maybe Int)
@@ -130,10 +157,10 @@ view model =
(Just a, Just s) -> Ffi.fmtFloat a 2 ++ " σ " ++ Ffi.fmtFloat s 2
_ -> "-"
- but i name s v lbl =
+ but i s v lbl =
let sel = i.my_sexual == s && i.my_violence == v
in li [ classList [("sel", sel)] ]
- [ label [ onMouseOver (Desc s v), onMouseOut (Desc i.my_sexual i.my_violence) ] [ inputRadio name sel (Vote s v), text lbl ]
+ [ label [ onMouseOver (Desc s v), onMouseOut (Desc i.my_sexual i.my_violence) ] [ inputRadio "" sel (Vote s v), text lbl ]
]
imgView i =
@@ -177,9 +204,9 @@ view model =
[ div []
[ ul []
[ li [] [ span [] [ text "Sexual" ] ]
- , but i "sexual" (Just 0) i.my_violence " Safe"
- , but i "sexual" (Just 1) i.my_violence " Suggestive"
- , but i "sexual" (Just 2) i.my_violence " Explicit"
+ , but i (Just 0) i.my_violence " Safe"
+ , but i (Just 1) i.my_violence " Suggestive"
+ , but i (Just 2) i.my_violence " Explicit"
]
, p [] <|
case Tuple.first model.desc of
@@ -199,9 +226,9 @@ view model =
, div []
[ ul []
[ li [] [ span [] [ text "Violence" ] ]
- , but i "violence" i.my_sexual (Just 0) " Tame"
- , but i "violence" i.my_sexual (Just 1) " Violent"
- , but i "violence" i.my_sexual (Just 2) " Brutal"
+ , but i i.my_sexual (Just 0) " Tame"
+ , but i i.my_sexual (Just 1) " Violent"
+ , but i i.my_sexual (Just 2) " Brutal"
]
, p [] <|
case Tuple.second model.desc of