From b9e24e5adb155434974ae9662419c9d91edcd9d2 Mon Sep 17 00:00:00 2001 From: Yad Smood Date: Mon, 9 Dec 2013 15:37:55 +0800 Subject: [PATCH 1/3] add: A getter & setter to support iframe. --- keymaster.js | 9 +++++++-- package.json | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/keymaster.js b/keymaster.js index 95ba980..fda60a8 100644 --- a/keymaster.js +++ b/keymaster.js @@ -4,6 +4,7 @@ ;(function(global){ var k, + _document = document, _handlers = {}, _mods = { 16: false, 18: false, 17: false, 91: false }, _scope = 'all', @@ -219,6 +220,10 @@ // initialize key. to false for(k in _MODIFIERS) assignKey[k] = false; + // set the context, useful when binding the key events to an iframe. + function setDocument(doc) { _document = doc; } + function getDocument(doc) { return _document; } + // set current scope (default 'all') function setScope(scope){ _scope = scope || 'all' }; function getScope(){ return _scope || 'all' }; @@ -264,8 +269,8 @@ }; // set the handlers globally on document - addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 - addEvent(document, 'keyup', clearModifier); + addEvent(_document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + addEvent(_document, 'keyup', clearModifier); // reset modifiers to false whenever the window is (re)focused. addEvent(window, 'focus', resetModifiers); diff --git a/package.json b/package.json index 5e6598a..f0d9a7e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "keymaster", + "name": "ys-keymaster", "description": "library for defining and dispatching keyboard shortcuts", "version": "1.6.1", "author": "Thomas Fuchs (http://mir.aculo.us)", From 2baff2bb2e71ca1cd1f2ce7e2c03b23cd3aa52a0 Mon Sep 17 00:00:00 2001 From: Yad Smood Date: Mon, 9 Dec 2013 17:15:26 +0800 Subject: [PATCH 2/3] Optimize the scope operation. --- keymaster.js | 56 ++++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/keymaster.js b/keymaster.js index fda60a8..1464e07 100644 --- a/keymaster.js +++ b/keymaster.js @@ -2,9 +2,11 @@ // (c) 2011-2013 Thomas Fuchs // keymaster.js may be freely distributed under the MIT license. -;(function(global){ +keymaster = function(win) { var k, - _document = document, + key, + _window = win || window, + _document, _handlers = {}, _mods = { 16: false, 18: false, 17: false, 91: false }, _scope = 'all', @@ -76,7 +78,7 @@ if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko if(key in _mods) { _mods[key] = true; - // 'assignKey' from inside this closure is exported to window.key + // 'assignKey' from inside this closure is exported to _window.key for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; return; } @@ -220,10 +222,6 @@ // initialize key. to false for(k in _MODIFIERS) assignKey[k] = false; - // set the context, useful when binding the key events to an iframe. - function setDocument(doc) { _document = doc; } - function getDocument(doc) { return _document; } - // set current scope (default 'all') function setScope(scope){ _scope = scope || 'all' }; function getScope(){ return _scope || 'all' }; @@ -265,37 +263,43 @@ if (object.addEventListener) object.addEventListener(event, method, false); else if(object.attachEvent) - object.attachEvent('on'+event, function(){ method(window.event) }); + object.attachEvent('on'+event, function(){ method(_window.event) }); }; - // set the handlers globally on document - addEvent(_document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + // set the handlers _windowly on document + // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 + _document = _window.document; + addEvent(_document, 'keydown', function(event) { dispatch(event) }); addEvent(_document, 'keyup', clearModifier); - // reset modifiers to false whenever the window is (re)focused. - addEvent(window, 'focus', resetModifiers); + // reset modifiers to false whenever the _window is (re)focused. + addEvent(_window, 'focus', resetModifiers); // store previously defined key - var previousKey = global.key; + var previousKey = _window.key; // restore previously defined key and return reference to our key object function noConflict() { - var k = global.key; - global.key = previousKey; + var k = _window.key; + _window.key = previousKey; return k; } - // set window.key and window.key.set/get/deleteScope, and the default filter - global.key = assignKey; - global.key.setScope = setScope; - global.key.getScope = getScope; - global.key.deleteScope = deleteScope; - global.key.filter = filter; - global.key.isPressed = isPressed; - global.key.getPressedKeyCodes = getPressedKeyCodes; - global.key.noConflict = noConflict; - global.key.unbind = unbindKey; + // set _window.key and _window.key.set/get/deleteScope, and the default filter + key = assignKey; + key.setScope = setScope; + key.getScope = getScope; + key.deleteScope = deleteScope; + key.filter = filter; + key.isPressed = isPressed; + key.getPressedKeyCodes = getPressedKeyCodes; + key.noConflict = noConflict; + key.unbind = unbindKey; + + // export key to the global scope + _window.key = key if(typeof module !== 'undefined') module.exports = key; +} -})(this); +keymaster(this); From 24e98300b30af68f34ed3b3ea12bf0f16d234cb5 Mon Sep 17 00:00:00 2001 From: Yad Smood Date: Wed, 11 Dec 2013 15:21:40 +0800 Subject: [PATCH 3/3] del: ys prefix. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0d9a7e..5e6598a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ys-keymaster", + "name": "keymaster", "description": "library for defining and dispatching keyboard shortcuts", "version": "1.6.1", "author": "Thomas Fuchs (http://mir.aculo.us)",