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