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