blob: 9578298b608d72351fb02852c6ee3cdc70381cfe [file] [log] [blame]
/**
* This KeyStroke works as "catch all" on the top-most DOM element of the Scout application.
* It prevents that key-strokes from the Scout application (like F5 for reload) 'leak' into the
* browser which typically happens when the glasspane/busy-indicator is visible. Thus this
* key-stroke only accepts the event when busy-indicator is active.
*/
scout.DesktopKeyStroke = function(session) {
scout.DesktopKeyStroke.parent.call(this);
var keys = scout.keys;
this.preventDefault = false;
this.session = session;
// this key-stroke handles key-shortcuts with and without Ctrl key
this.whiteListCtrlKeys = [keys.N, keys.R, keys.T, keys.PAGE_UP, keys.PAGE_DOWN];
this.whiteListKeys = [keys.F11, keys.F12];
// Never delegate these keys to the browser (F5 is used to reload tables or forms, ctrl-r may be used to reload the browser)
this.blackListKeys = [keys.F5];
};
scout.inherits(scout.DesktopKeyStroke, scout.KeyStroke);
/**
* @override KeyStroke.js
*/
scout.DesktopKeyStroke.prototype._accept = function(event) {
if (scout.isOneOf(event.which, this.blackListKeys)) {
this.preventDefault = true;
return true;
}
// only apply "catch-all" when busy indicator is displayed
if (this.session._busyIndicator) {
var whiteList, delegateToBrowser;
if (event.ctrlKey || event.metaKey) {
whiteList = this.whiteListCtrlKeys;
} else {
whiteList = this.whiteListKeys;
}
delegateToBrowser = scout.isOneOf(event.which, whiteList);
this.preventDefault = !delegateToBrowser;
// return true since we want to catch all keys and we rely on the _applyPropagationFlags
// which is executed later and interprets the preventDefault property
return true;
}
return false;
};
/**
* @override KeyStroke.js
*/
scout.DesktopKeyStroke.prototype.handle = function(event) {
// NOP
};