src/cm/media/js/lib/yui/yui_3.10.3/build/event-key/event-key-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('event-key', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
 * Functionality to listen for one or more specific key combinations.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 * @submodule event-key
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
var ALT      = "+alt",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
    CTRL     = "+ctrl",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    META     = "+meta",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    SHIFT    = "+shift",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    trim     = Y.Lang.trim,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    eventDef = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
        KEY_MAP: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
            enter    : 13,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            esc      : 27,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
            backspace: 8,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
            tab      : 9,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            pageup   : 33,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
            pagedown : 34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        _typeRE: /^(up|down|press):/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        _keysRE: /^(?:up|down|press):|\+(alt|ctrl|meta|shift)/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        processArgs: function (args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
            var spec = args.splice(3,1)[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
                mods = Y.Array.hash(spec.match(/\+(?:alt|ctrl|meta|shift)\b/g) || []),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
                config = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
                    type: this._typeRE.test(spec) ? RegExp.$1 : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
                    mods: mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
                    keys: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
                // strip type and modifiers from spec, leaving only keyCodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
                bits = spec.replace(this._keysRE, ''),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
                chr, uc, lc, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
            if (bits) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
                bits = bits.split(',');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
                config.keys = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
                // FIXME: need to support '65,esc' => keypress, keydown
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
                for (i = bits.length - 1; i >= 0; --i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
                    chr = trim(bits[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
                    // catch sloppy filters, trailing commas, etc 'a,,'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
                    if (!chr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
                        continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
                    // non-numerics are single characters or key names
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
                    if (+chr == chr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
                        config.keys[chr] = mods;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
                        lc = chr.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
                        if (this.KEY_MAP[lc]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
                            config.keys[this.KEY_MAP[lc]] = mods;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
                            // FIXME: '65,enter' defaults keydown for both
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
                            if (!config.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
                                config.type = "down"; // safest
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
                            // FIXME: Character mapping only works for keypress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
                            // events. Otherwise, it uses String.fromCharCode()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
                            // from the keyCode, which is wrong.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
                            chr = chr.charAt(0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
                            uc  = chr.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
                            if (mods["+shift"]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
                                chr = uc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
                            // FIXME: stupid assumption that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
                            // the keycode of the lower case == the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
                            // charCode of the upper case
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
                            // a (key:65,char:97), A (key:65,char:65)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
                            config.keys[chr.charCodeAt(0)] =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
                                (chr === uc) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
                                    // upper case chars get +shift free
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
                                    Y.merge(mods, { "+shift": true }) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
                                    mods;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            if (!config.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
                config.type = "press";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            return config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        on: function (node, sub, notifier, filter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
            var spec   = sub._extra,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                type   = "key" + spec.type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
                keys   = spec.keys,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                method = (filter) ? "delegate" : "on";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            // Note: without specifying any keyCodes, this becomes a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            // horribly inefficient alias for 'keydown' (et al), but I
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            // can't abort this subscription for a simple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
            // Y.on('keypress', ...);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
            // Please use keyCodes or just subscribe directly to keydown,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
            // keyup, or keypress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            sub._detach = node[method](type, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                var key = keys ? keys[e.which] : spec.mods;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                if (key &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
                    (!key[ALT]   || (key[ALT]   && e.altKey)) &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                    (!key[CTRL]  || (key[CTRL]  && e.ctrlKey)) &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
                    (!key[META]  || (key[META]  && e.metaKey)) &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
                    (!key[SHIFT] || (key[SHIFT] && e.shiftKey)))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
                {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                    notifier.fire(e);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            }, filter);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        detach: function (node, sub, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            sub._detach.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
eventDef.delegate = eventDef.on;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
eventDef.detachDelegate = eventDef.detach;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
 * <p>Add a key listener.  The listener will only be notified if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
 * keystroke detected meets the supplied specification.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
 * specification is a string that is defined as:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
 * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
 *   <dt>spec</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
 *   <dd><code>[{type}:]{code}[,{code}]*</code></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
 *   <dt>type</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
 *   <dd><code>"down", "up", or "press"</code></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
 *   <dt>code</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
 *   <dd><code>{keyCode|character|keyName}[+{modifier}]*</code></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
 *   <dt>modifier</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
 *   <dd><code>"shift", "ctrl", "alt", or "meta"</code></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
 *   <dt>keyName</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
 *   <dd><code>"enter", "backspace", "esc", "tab", "pageup", or "pagedown"</code></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
 * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
 * <p>Examples:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
 * <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
 *   <li><code>Y.on("key", callback, "press:12,65+shift+ctrl", "#my-input");</code></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
 *   <li><code>Y.delegate("key", preventSubmit, "#forms", "enter", "input[type=text]");</code></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
 *   <li><code>Y.one("doc").on("key", viNav, "j,k,l,;");</code></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
 * </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
 * @event key
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
 * @param type {string} 'key'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
 * @param fn {function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
 * @param id {string|HTMLElement|collection} the element(s) to bind
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
 * @param spec {string} the keyCode and modifier specification
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
 * @param o optional context object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
 * @param args 0..n additional arguments to provide to the listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
 * @return {Event.Handle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
Y.Event.define('key', eventDef, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
}, '3.10.3', {"requires": ["event-synthetic"]});