github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/Keyboard.elm (about) 1 module Keyboard exposing 2 ( KeyCode(..) 3 , KeyEvent 4 , decodeKeyCode 5 , decodeKeyEvent 6 , hasControlModifier 7 ) 8 9 import Concourse 10 import Json.Decode 11 import Json.Encode 12 13 14 type alias KeyEvent = 15 { ctrlKey : Bool 16 , shiftKey : Bool 17 , metaKey : Bool 18 , code : KeyCode 19 } 20 21 22 decodeKeyEvent : Json.Decode.Decoder KeyEvent 23 decodeKeyEvent = 24 Json.Decode.map4 KeyEvent 25 (Json.Decode.field "ctrlKey" Json.Decode.bool) 26 (Json.Decode.field "shiftKey" Json.Decode.bool) 27 (Json.Decode.field "metaKey" Json.Decode.bool) 28 (Json.Decode.field "code" decodeKeyCode) 29 30 31 type KeyCode 32 = A 33 | T 34 | R 35 | G 36 | H 37 | J 38 | K 39 | L 40 | F 41 | Slash 42 | ArrowUp 43 | ArrowDown 44 | Enter 45 | Escape 46 47 48 decodeKeyCode : Json.Decode.Decoder KeyCode 49 decodeKeyCode = 50 Concourse.customDecoder Json.Decode.string <| 51 \code -> 52 case code of 53 "KeyA" -> 54 Ok A 55 56 "KeyT" -> 57 Ok T 58 59 "KeyR" -> 60 Ok R 61 62 "KeyG" -> 63 Ok G 64 65 "KeyH" -> 66 Ok H 67 68 "KeyJ" -> 69 Ok J 70 71 "KeyK" -> 72 Ok K 73 74 "KeyL" -> 75 Ok L 76 77 "KeyF" -> 78 Ok F 79 80 "Slash" -> 81 Ok Slash 82 83 "ArrowUp" -> 84 Ok ArrowUp 85 86 "ArrowDown" -> 87 Ok ArrowDown 88 89 "Enter" -> 90 Ok Enter 91 92 "Escape" -> 93 Ok Escape 94 95 unknown -> 96 Err <| 97 Json.Decode.Failure "unknown keycode" <| 98 Json.Encode.string unknown 99 100 101 hasControlModifier : KeyEvent -> Bool 102 hasControlModifier keyEvent = 103 keyEvent.ctrlKey || keyEvent.metaKey