src/cm/media/js/lib/yui/yui3.0.0/build/event/event-key.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('event-key', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * Functionality to listen for one or more specific key combinations.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * @submodule event-key
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
 * Add a key listener.  The listener will only be notified if the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
 * keystroke detected meets the supplied specification.  The
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
 * spec consists of the key event type, followed by a colon,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
 * followed by zero or more comma separated key codes, followed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
 * by zero or more modifiers delimited by a plus sign.  Ex:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
 * press:12,65+shift+ctrl
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
 * @event key
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
 * @param type {string} 'key'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
 * @param fn {function} the function to execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
 * @param id {string|HTMLElement|collection} the element(s) to bind
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
 * @param spec {string} the keyCode and modifier specification
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
 * @param o optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
 * @param args 0..n additional arguments to provide to the listener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
 * @return {Event.Handle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
Y.Env.evt.plugins.key = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    on: function(type, fn, id, spec, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        var a = Y.Array(arguments, 0, true), parsed, etype, criteria, ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        parsed = spec && spec.split(':');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        if (!spec || spec.indexOf(':') == -1 || !parsed[1]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
            a[0] = 'key' + ((parsed && parsed[0]) || 'press');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        // key event type: 'down', 'up', or 'press'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        etype = parsed[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        // list of key codes optionally followed by modifiers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        criteria = (parsed[1]) ? parsed[1].split(/,|\+/) : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        // the name of the custom event that will be created for the spec
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        ename = (Y.Lang.isString(id) ? id : Y.stamp(id)) + spec;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        ename = ename.replace(/,/g, '_');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        if (!Y.getEvent(ename)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
            // subscribe spec validator to the DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
            Y.on(type + etype, function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
                var passed = false, failed = false, i, crit, critInt;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
                for (i=0; i<criteria.length; i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
                    crit = criteria[i]; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
                    critInt = parseInt(crit, 10);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
                    // pass this section if any supplied keyCode 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
                    // is found
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
                    if (Y.Lang.isNumber(critInt)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
                        if (e.charCode === critInt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
                            passed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
                            failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
                    // only check modifier if no keyCode was specified
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                    // or the keyCode check was successful.  pass only 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                    // if every modifier passes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                    } else if (passed || !failed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                        passed = (e[crit + 'Key']);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
                        failed = !passed;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                    }                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
                // fire spec custom event if spec if met
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                if (passed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                    Y.fire(ename, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
            }, id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
        // subscribe supplied listener to custom event for spec validator
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        // remove element and spec.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
        a.splice(2, 2);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        a[0] = ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
}, '3.0.0' ,{requires:['node-base']});