Show:
                            /**
                             * The Event Base.
                             *
                             * @module aui-event
                             * @submodule aui-event-base
                             */
                            
                            var aArray = A.Array,
                                DOMEventFacade = A.DOMEventFacade,
                                DOMEventFacadeProto = DOMEventFacade.prototype;
                            
                            var KeyMap = {
                                BACKSPACE: 8,
                                TAB: 9,
                                NUM_CENTER: 12,
                            
                                ENTER: 13,
                                RETURN: 13,
                            
                                SHIFT: 16,
                                CTRL: 17,
                                ALT: 18,
                            
                                PAUSE: 19,
                                CAPS_LOCK: 20,
                                ESC: 27,
                                SPACE: 32,
                            
                                PAGE_UP: 33,
                                PAGE_DOWN: 34,
                            
                                END: 35,
                                HOME: 36,
                            
                                LEFT: 37,
                                UP: 38,
                                RIGHT: 39,
                                DOWN: 40,
                            
                                PRINT_SCREEN: 44,
                                INSERT: 45,
                                DELETE: 46,
                            
                                ZERO: 48,
                                ONE: 49,
                                TWO: 50,
                                THREE: 51,
                                FOUR: 52,
                                FIVE: 53,
                                SIX: 54,
                                SEVEN: 55,
                                EIGHT: 56,
                                NINE: 57,
                            
                                A: 65,
                                B: 66,
                                C: 67,
                                D: 68,
                                E: 69,
                                F: 70,
                                G: 71,
                                H: 72,
                                I: 73,
                                J: 74,
                                K: 75,
                                L: 76,
                                M: 77,
                                N: 78,
                                O: 79,
                                P: 80,
                                Q: 81,
                                R: 82,
                                S: 83,
                                T: 84,
                                U: 85,
                                V: 86,
                                W: 87,
                                X: 88,
                                Y: 89,
                                Z: 90,
                            
                                CONTEXT_MENU: 93,
                            
                                NUM_ZERO: 96,
                                NUM_ONE: 97,
                                NUM_TWO: 98,
                                NUM_THREE: 99,
                                NUM_FOUR: 100,
                                NUM_FIVE: 101,
                                NUM_SIX: 102,
                                NUM_SEVEN: 103,
                                NUM_EIGHT: 104,
                                NUM_NINE: 105,
                            
                                NUM_MULTIPLY: 106,
                                NUM_PLUS: 107,
                                NUM_MINUS: 109,
                                NUM_PERIOD: 110,
                                NUM_DIVISION: 111,
                            
                                F1: 112,
                                F2: 113,
                                F3: 114,
                                F4: 115,
                                F5: 116,
                                F6: 117,
                                F7: 118,
                                F8: 119,
                                F9: 120,
                                F10: 121,
                                F11: 122,
                                F12: 123,
                            
                                NUM_LOCK: 144,
                            
                                WIN_KEY: 224,
                                WIN_IME: 229,
                            
                                NON_MODIFYING_KEYS: [
                                    'ALT',
                                    'CAPS_LOCK',
                                    'CTRL',
                                    'DOWN',
                                    'END',
                                    'ESC',
                                    'F1',
                                    'F10',
                                    'F11',
                                    'F12',
                                    'F2',
                                    'F3',
                                    'F4',
                                    'F5',
                                    'F6',
                                    'F7',
                                    'F8',
                                    'F9',
                                    'HOME',
                                    'LEFT',
                                    'NUM_LOCK',
                                    'PAGE_DOWN',
                                    'PAGE_UP',
                                    'PAUSE',
                                    'PRINT_SCREEN',
                                    'RIGHT',
                                    'SHIFT',
                                    'SPACE',
                                    'UP',
                                    'WIN_KEY'
                                ],
                            
                                hasModifier: function(event) {
                                    return event &&
                                        (event.ctrlKey ||
                                        event.altKey ||
                                        event.shiftKey ||
                                        event.metaKey);
                                },
                            
                                isKey: function(keyCode, name) {
                                    var instance = this;
                            
                                    return name && ((instance[name] || instance[name.toUpperCase()]) === keyCode);
                                },
                            
                                isKeyInRange: function(keyCode, start, end) {
                                    var instance = this;
                            
                                    var result = false;
                            
                                    if (start && end) {
                                        var startKey = instance[start] || instance[start.toUpperCase()];
                                        var endKey = instance[end] || instance[end.toUpperCase()];
                            
                                        result = startKey && endKey &&
                                            (keyCode >= startKey && keyCode <= endKey);
                                    }
                            
                                    return result;
                                },
                            
                                isKeyInSet: function(keyCode) {
                                    var instance = this;
                            
                                    var args = aArray(arguments, 1, true);
                            
                                    return instance._isKeyInSet(keyCode, args);
                                },
                            
                                isNavKey: function(keyCode) {
                                    var instance = this;
                            
                                    return instance.isKeyInRange(keyCode, 'PAGE_UP', 'DOWN') || instance.isKeyInSet(keyCode, 'ENTER', 'TAB', 'ESC');
                                },
                            
                                isSpecialKey: function(keyCode, eventType) {
                                    var instance = this;
                            
                                    var isCtrlPress = (eventType === 'keypress' && instance.ctrlKey);
                            
                                    return isCtrlPress ||
                                        instance.isNavKey(keyCode) ||
                                        instance.isKeyInRange(keyCode, 'SHIFT', 'CAPS_LOCK') ||
                                        instance.isKeyInSet(keyCode, 'BACKSPACE', 'PRINT_SCREEN', 'INSERT', 'WIN_IME');
                                },
                            
                                isModifyingKey: function(keyCode) {
                                    var instance = this;
                            
                                    return !instance._isKeyInSet(keyCode, instance.NON_MODIFYING_KEYS);
                                },
                            
                                _isKeyInSet: function(keyCode, arr) {
                                    var instance = this;
                            
                                    var i = arr.length;
                            
                                    var result = false;
                            
                                    var keyName;
                                    var key;
                            
                                    while (i--) {
                                        keyName = arr[i];
                                        key = keyName && (instance[keyName] || instance[String(keyName).toUpperCase()]);
                            
                                        if (keyCode === key) {
                                            result = true;
                            
                                            break;
                                        }
                                    }
                            
                                    return result;
                                }
                            };
                            
                            A.mix(
                                DOMEventFacadeProto, {
                                    /**
                                     * Checks if an event is triggered by a keyboard key like `CTRL`, `ALT`
                                     * or `SHIFT`.
                                     *
                                     * @method hasModifier
                                     * @return {Boolean}
                                     */
                                    hasModifier: function() {
                                        var instance = this;
                            
                                        return KeyMap.hasModifier(instance);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by a keyboard key.
                                     *
                                     * @method isKey
                                     * @param name
                                     * @return {Boolean}
                                     */
                                    isKey: function(name) {
                                        var instance = this;
                            
                                        return KeyMap.isKey(instance.keyCode, name);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by a keyboard key located between two
                                     * other keys.
                                     *
                                     * @method isKeyInRange
                                     * @param start
                                     * @param end
                                     * @return {Boolean}
                                     */
                                    isKeyInRange: function(start, end) {
                                        var instance = this;
                            
                                        return KeyMap.isKeyInRange(instance.keyCode, start, end);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by a keyboard key contained in the
                                     * key set.
                                     *
                                     * @method isKeyInSet
                                     * @return {Boolean}
                                     */
                                    isKeyInSet: function() {
                                        var instance = this;
                            
                                        var args = aArray(arguments, 0, true);
                            
                                        return KeyMap._isKeyInSet(instance.keyCode, args);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by `ENTER`, `TAB`, `ESC` keyboard
                                     * keys or by a key located between `PAGE UP` and `DOWN`.
                                     *
                                     * @method isModifyingKey
                                     */
                                    isModifyingKey: function() {
                                        var instance = this;
                            
                                        return KeyMap.isModifyingKey(instance.keyCode);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by navigation keys like `PAGE UP`
                                     * and `DOWN` keys.
                                     *
                                     * @method isNavKey
                                     * @return {Boolean}
                                     */
                                    isNavKey: function() {
                                        var instance = this;
                            
                                        return KeyMap.isNavKey(instance.keyCode);
                                    },
                            
                                    /**
                                     * Checks if an event is triggered by a special keyboard key like
                                     * `SHIFT`, `CAPS LOCK`, etc.
                                     *
                                     * @method isSpecialKey
                                     * @return {Boolean}
                                     */
                                    isSpecialKey: function() {
                                        var instance = this;
                            
                                        return KeyMap.isSpecialKey(instance.keyCode, instance.type);
                                    }
                                }
                            );
                            
                            A.Event.KeyMap = KeyMap;
                            
                            A.Event.supportsDOMEvent = A.supportsDOMEvent;