Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
101
gaia/shared/js/smart-screen/key_navigation_adapter.js
Executable file
101
gaia/shared/js/smart-screen/key_navigation_adapter.js
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
/* global KeyEvent, evt */
|
||||
(function(exports) {
|
||||
'use strict';
|
||||
// KeyNavigationAdapter files event with '-keyup' as postfix. All behaviors
|
||||
// which no need to have multple events while holding the key should use
|
||||
// keyup.
|
||||
// If we choose to listen to mozbrowser key events, before- and after- prefix
|
||||
// will be attached on filed events.
|
||||
function KeyNavigationAdapter() {
|
||||
}
|
||||
|
||||
KeyNavigationAdapter.prototype = evt({
|
||||
KEY_EVENTS: Object.freeze([
|
||||
'keydown',
|
||||
'keyup'
|
||||
]),
|
||||
|
||||
MOZ_BROWSER_KEY_EVENTS: [
|
||||
'mozbrowserbeforekeydown',
|
||||
'mozbrowserbeforekeyup',
|
||||
'mozbrowserafterkeydown',
|
||||
'mozbrowserafterkeyup'
|
||||
],
|
||||
|
||||
init: function kna_init(targetElement, options) {
|
||||
this._targetElement = targetElement || window;
|
||||
options = options || {};
|
||||
|
||||
// Pick required event listeners and add them
|
||||
this._evtNames = [].concat(this.KEY_EVENTS);
|
||||
if (options.useMozBrowserKeyEvents) {
|
||||
this._evtNames = this._evtNames.concat(this.MOZ_BROWSER_KEY_EVENTS);
|
||||
}
|
||||
this._evtNames.forEach(
|
||||
name => this._targetElement.addEventListener(name, this));
|
||||
|
||||
},
|
||||
uninit: function kna_uninit() {
|
||||
this._evtNames.foreach(
|
||||
name => this._targetElement.removeEventListener(name, this));
|
||||
},
|
||||
|
||||
handleEvent: function kna_handleEvent(evt) {
|
||||
if(this._evtNames.indexOf(evt.type) !== -1) {
|
||||
this.handleKeyEvent(this.convertKeyToString(evt.keyCode), evt.type);
|
||||
}
|
||||
},
|
||||
|
||||
handleKeyEvent: function kna_handleKeyEvent(key, eventType) {
|
||||
// XXX : It's better to use KeyEvent.Key and use "ArrowUp", "ArrowDown",
|
||||
// "ArrowLeft", "ArrowRight" for switching after Gecko synced with W3C
|
||||
// KeyboardEvent.Key standard. Here we still use KeyCode and customized
|
||||
// string of "up", "down", "left", "right" for the moment.
|
||||
var evtPostfix = 'keyup' === eventType ? '-keyup' : '';
|
||||
|
||||
var prefixMatch = /mozbrowser(before|after)/.exec(eventType);
|
||||
var evtPrefix = prefixMatch ? prefixMatch[1] + '-' : '';
|
||||
|
||||
switch (key) {
|
||||
case 'up':
|
||||
case 'down':
|
||||
case 'left':
|
||||
case 'right':
|
||||
this.fire(evtPrefix + 'move' + evtPostfix, key);
|
||||
break;
|
||||
case 'enter':
|
||||
this.fire(evtPrefix + 'enter' + evtPostfix);
|
||||
break;
|
||||
case 'back':
|
||||
this.fire(evtPrefix + 'back' + evtPostfix);
|
||||
break;
|
||||
case 'esc':
|
||||
this.fire(evtPrefix + 'esc' + evtPostfix);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
convertKeyToString: function kna_convertKeyToString(keyCode) {
|
||||
switch (keyCode) {
|
||||
case KeyEvent.DOM_VK_UP:
|
||||
return 'up';
|
||||
case KeyEvent.DOM_VK_RIGHT:
|
||||
return 'right';
|
||||
case KeyEvent.DOM_VK_DOWN:
|
||||
return 'down';
|
||||
case KeyEvent.DOM_VK_LEFT:
|
||||
return 'left';
|
||||
case KeyEvent.DOM_VK_RETURN:
|
||||
return 'enter';
|
||||
case KeyEvent.DOM_VK_ESCAPE:
|
||||
return 'esc';
|
||||
case KeyEvent.DOM_VK_BACK_SPACE:
|
||||
return 'back';
|
||||
default:// we don't consume other keys.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
exports.KeyNavigationAdapter = KeyNavigationAdapter;
|
||||
|
||||
}(window));
|
||||
Loading…
Reference in a new issue