1/*! taboverride.escape v0.1.0 | https://github.com/wjbryant/taboverride.escape
2Copyright (c) 2013 Bill Bryant | http://opensource.org/licenses/mit */
3
4/*jslint browser: true */
5/*global exports, require, define, tabOverride */
6
7/**
8 * The tabOverride namespace object
9 *
10 * @external tabOverride
11 */
12
13// use CommonJS or AMD if available
14(function (factory) {
15    'use strict';
16
17    if (typeof exports === 'object' && typeof require === 'function') {
18        // Node.js/CommonJS
19        factory(require('taboverride'));
20    } else if (typeof define === 'function' && define.amd) {
21        // AMD - register as an anonymous module
22        // files must be concatenated using an AMD-aware tool such as r.js
23        define(['taboverride'], factory);
24    } else {
25        // no module format - use global variable
26        factory(tabOverride);
27    }
28}(function (tabOverride) {
29    'use strict';
30
31    var escape = true,
32        listeners = tabOverride.utils.createListeners([
33            {
34                type: 'keydown',
35                handler: function (e) {
36                    e = e || event;
37                    if (escape && e.keyCode === 27) {
38                        tabOverride.utils.removeListeners(e.target || e.srcElement);
39                    }
40                }
41            },
42            {
43                type: 'blur',
44                handler: function (e) {
45                    e = e || event;
46                    tabOverride.utils.addListeners(e.target || e.srcElement);
47                }
48            }
49        ]);
50
51    /**
52     * Gets or sets whether the escape extension is enabled (true) or disabled
53     * (false).
54     *
55     * @param  {boolean}        [enable]  whether to enable the escape extension
56     * @return {boolean|Object}           whether the escape extension is
57     *                                    enabled or the tabOverride object
58     *
59     * @method external:tabOverride.escape
60     */
61    tabOverride.escape = function (enable) {
62        if (arguments.length) {
63            escape = enable ? true : false;
64            return this;
65        }
66        return escape;
67    };
68
69    tabOverride.addExtension('set', function (elem, enable) {
70        listeners[enable ? 'add' : 'remove'](elem);
71    });
72}));
73