Added keyboard shortcuts (part 1) (#70)

Scrolling in message view (#109)
This commit is contained in:
RainLoop Team 2014-04-08 01:03:58 +04:00
parent 3936a818b7
commit 8979687f88
37 changed files with 2095 additions and 333 deletions

View file

@ -27,6 +27,18 @@ Enums.StateType = {
'Admin': 1
};
/**
* @enum {string}
*/
Enums.KeyState = {
'None': 'none',
'ContactList': 'contact-list',
'MessageList': 'message-list',
'MessageView': 'message-view',
'Compose': 'compose',
'PopupAsk': 'popup-ask'
};
/**
* @enum {number}
*/

View file

@ -137,10 +137,12 @@ Selector.prototype.goUp = function ()
this.newSelectPosition(Enums.EventKeyCode.Up, false);
};
Selector.prototype.init = function (oContentVisible, oContentScrollable)
Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeyScope)
{
this.oContentVisible = oContentVisible;
this.oContentScrollable = oContentScrollable;
sKeyScope = sKeyScope || 'all';
if (this.oContentVisible && this.oContentScrollable)
{
@ -183,27 +185,43 @@ Selector.prototype.init = function (oContentVisible, oContentScrollable)
})
;
$(window.document).on('keydown', function (oEvent) {
var bResult = true;
if (oEvent && self.bUseKeyboard && !Utils.inFocus())
key('space, enter', sKeyScope, function () {
return false;
});
key('up, shift+up, down, shift+down, insert, home, end, pageup, pagedown', sKeyScope, function (event, handler) {
if (event && handler && handler.shortcut)
{
if (-1 < Utils.inArray(oEvent.keyCode, [Enums.EventKeyCode.Up, Enums.EventKeyCode.Down, Enums.EventKeyCode.Insert,
Enums.EventKeyCode.Home, Enums.EventKeyCode.End, Enums.EventKeyCode.PageUp, Enums.EventKeyCode.PageDown]))
var iKey = 0, aCodes = null;
switch (handler.shortcut)
{
self.newSelectPosition(oEvent.keyCode, oEvent.shiftKey);
bResult = false;
case 'up':
case 'shift+up':
iKey = Enums.EventKeyCode.Up;
break;
case 'down':
case 'shift+down':
iKey = Enums.EventKeyCode.Down;
break;
case 'insert':
case 'home':
case 'end':
case 'pageup':
case 'pagedown':
aCodes = key.getPressedKeyCodes();
if (aCodes && aCodes[0])
{
iKey = aCodes[0];
}
break;
}
else if (Enums.EventKeyCode.Delete === oEvent.keyCode && !oEvent.ctrlKey && !oEvent.shiftKey)
if (0 < iKey)
{
if (self.oCallbacks['onDelete'])
{
self.oCallbacks['onDelete']();
}
bResult = false;
self.newSelectPosition(iKey, key.shift);
return false;
}
}
return bResult;
});
}
};

View file

@ -1719,3 +1719,31 @@ Utils.selectElement = function (element)
}
/* jshint onevar: true */
};
Utils.disableKeyFilter = function ()
{
if (window.key)
{
key.filter = function () {
return true;
};
}
};
Utils.restoreKeyFilter = function ()
{
if (window.key)
{
key.filter = function (event) {
var
element = event.target || event.srcElement,
tagName = element ? element.tagName : ''
;
tagName = tagName.toUpperCase();
return !(tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA' ||
(element && tagName === 'DIV' && 'editorHtmlArea' === element.className && element.contentEditable)
);
};
}
};