Blame view

bower_components/iron-a11y-keys/iron-a11y-keys.html 4.49 KB
c5169e0e   Renato De Donato   a new hope
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  <!--

  @license

  Copyright (c) 2015 The Polymer Project Authors. All rights reserved.

  This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE

  The complete set of authors may be found at http://polymer.github.io/AUTHORS

  The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS

  Code distributed by Google as part of the polymer project is also

  subject to an additional IP rights grant found at http://polymer.github.io/PATENTS

  -->

  

  <link rel="import" href="../polymer/polymer.html">

  <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">

  

  

  <script>

  

  /*

  `iron-a11y-keys` provides a normalized interface for processing keyboard commands that pertain to [WAI-ARIA best

  practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). The element takes care of browser differences

  with respect to Keyboard events and uses an expressive syntax to filter key presses.

  

  Use the `keys` attribute to express what combination of keys will trigger the event to fire.

  

  Use the `target` attribute to set up event handlers on a specific node.

  The `keys-pressed` event will fire when one of the key combinations set with the `keys` attribute is pressed.

  

  Example:

  

  This element will call `arrowHandler` on all arrow keys:

  

      <iron-a11y-keys target="{{}}" keys="up down left right" on-keys-pressed="{{arrowHandler}}"></iron-a11y-keys>

  

  Keys Syntax:

  

  The `keys` attribute can accepts a space seprated, `+` concatenated set of modifier keys and some common keyboard keys.

  

  The common keys are `a-z`, `0-9` (top row and number pad), `*` (shift 8 and number pad), `F1-F12`, `Page Up`, `Page

  Down`, `Left Arrow`, `Right Arrow`, `Down Arrow`, `Up Arrow`, `Home`, `End`, `Escape`, `Space`, `Tab`, and `Enter` keys.

  

  The modifier keys are `Shift`, `Control`, and `Alt`.

  

  All keys are expected to be lowercase and shortened:

  `Left Arrow` is `left`, `Page Down` is `pagedown`, `Control` is `ctrl`, `F1` is `f1`, `Escape` is `esc` etc.

  

  Keys Syntax Example:

  

  Given the `keys` attribute value "ctrl+shift+f7 up pagedown esc space alt+m", the `<iron-a11y-keys>` element will send

  the `keys-pressed` event if any of the follow key combos are pressed: Control and Shift and F7 keys, Up Arrow key, Page

  Down key, Escape key, Space key, Alt and M key.

  

  Slider Example:

  

  The following is an example of the set of keys that fulfil the WAI-ARIA "slider" role [best

  practices](http://www.w3.org/TR/wai-aria-practices/#slider):

  

      <iron-a11y-keys target="{{}}" keys="left pagedown down" on-keys-pressed="{{decrement}}"></iron-a11y-keys>

      <iron-a11y-keys target="{{}}" keys="right pageup up" on-keys-pressed="{{increment}}"></iron-a11y-keys>

      <iron-a11y-keys target="{{}}" keys="home" on-keys-pressed="{{setMin}}"></iron-a11y-keys>

      <iron-a11y-keys target="{{}}" keys="end" on-keys-pressed="{{setMax}}"></iron-a11y-keys>

  

  The `increment` function will move the slider a set amount toward the maximum value.

  The `decrement` function will move the slider a set amount toward the minimum value.

  The `setMin` function will move the slider to the minimum value.

  The `setMax` function will move the slider to the maximum value.

  

  Keys Syntax Grammar:

  

  [EBNF](http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form) Grammar of the `keys` attribute.

  

      modifier = "shift" | "ctrl" | "alt";

      ascii = ? /[a-z0-9]/ ? ;

      fnkey = ? f1 through f12 ? ;

      arrow = "up" | "down" | "left" | "right" ;

      key = "tab" | "esc" | "space" | "*" | "pageup" | "pagedown" | "home" | "end" | arrow | ascii | fnkey ;

      keycombo = { modifier, "+" }, key ;

      keys = keycombo, { " ", keycombo } ;

  

  @demo demo/index.html

  */

  

  

    Polymer({

      is: 'iron-a11y-keys',

  

      behaviors: [

        Polymer.IronA11yKeysBehavior

      ],

  

      properties: {

        /** @type {?Node} */

        target: {

          type: Object,

          observer: '_targetChanged'

        },

  

        keys: {

          type: String,

          reflectToAttribute: true,

          observer: '_keysChanged'

        }

      },

  

      attached: function() {

        if (!this.target) {

          this.target = this.parentNode;

        }

      },

  

      _targetChanged: function(target) {

        this.keyEventTarget = target;

      },

  

      _keysChanged: function() {

        this.removeOwnKeyBindings();

        this.addOwnKeyBinding(this.keys, '_fireKeysPressed');

      },

  

      _fireKeysPressed: function(event) {

        this.fire('keys-pressed', event.detail, {});

      }

    });

  </script>