mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 16:48:49 +01:00
Shotcuts are now generated on the server side, made key codes class constans
This commit is contained in:
parent
6b084b40f9
commit
49e6780f07
@ -11,75 +11,139 @@
|
|||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define("EGW_KEY_BACKSPACE", 8);
|
|
||||||
define("EGW_KEY_TAB", 9);
|
|
||||||
define("EGW_KEY_ENTER", 13);
|
|
||||||
define("EGW_KEY_ESCAPE", 27);
|
|
||||||
define("EGW_KEY_DELETE", 46);
|
|
||||||
|
|
||||||
define("EGW_KEY_SPACE", 32);
|
|
||||||
|
|
||||||
define("EGW_KEY_PAGE_UP", 33);
|
|
||||||
define("EGW_KEY_PAGE_DOWN", 34);
|
|
||||||
|
|
||||||
define("EGW_KEY_ARROW_LEFT", 37);
|
|
||||||
define("EGW_KEY_ARROW_UP", 38);
|
|
||||||
define("EGW_KEY_ARROW_RIGHT", 39);
|
|
||||||
define("EGW_KEY_ARROW_DOWN", 40);
|
|
||||||
|
|
||||||
define("EGW_KEY_0", 48);
|
|
||||||
define("EGW_KEY_1", 49);
|
|
||||||
define("EGW_KEY_2", 50);
|
|
||||||
define("EGW_KEY_3", 51);
|
|
||||||
define("EGW_KEY_4", 52);
|
|
||||||
define("EGW_KEY_5", 53);
|
|
||||||
define("EGW_KEY_6", 54);
|
|
||||||
define("EGW_KEY_7", 55);
|
|
||||||
define("EGW_KEY_8", 56);
|
|
||||||
define("EGW_KEY_9", 57);
|
|
||||||
|
|
||||||
define("EGW_KEY_A", 65);
|
|
||||||
define("EGW_KEY_B", 66);
|
|
||||||
define("EGW_KEY_C", 67);
|
|
||||||
define("EGW_KEY_D", 68);
|
|
||||||
define("EGW_KEY_E", 69);
|
|
||||||
define("EGW_KEY_F", 70);
|
|
||||||
define("EGW_KEY_G", 71);
|
|
||||||
define("EGW_KEY_H", 72);
|
|
||||||
define("EGW_KEY_I", 73);
|
|
||||||
define("EGW_KEY_J", 74);
|
|
||||||
define("EGW_KEY_K", 75);
|
|
||||||
define("EGW_KEY_L", 76);
|
|
||||||
define("EGW_KEY_M", 77);
|
|
||||||
define("EGW_KEY_N", 78);
|
|
||||||
define("EGW_KEY_O", 79);
|
|
||||||
define("EGW_KEY_P", 80);
|
|
||||||
define("EGW_KEY_Q", 81);
|
|
||||||
define("EGW_KEY_R", 82);
|
|
||||||
define("EGW_KEY_S", 83);
|
|
||||||
define("EGW_KEY_T", 84);
|
|
||||||
define("EGW_KEY_U", 85);
|
|
||||||
define("EGW_KEY_V", 86);
|
|
||||||
define("EGW_KEY_W", 87);
|
|
||||||
define("EGW_KEY_X", 88);
|
|
||||||
define("EGW_KEY_Y", 89);
|
|
||||||
define("EGW_KEY_Z", 90);
|
|
||||||
|
|
||||||
define("EGW_KEY_F1", 112);
|
|
||||||
define("EGW_KEY_F2", 113);
|
|
||||||
define("EGW_KEY_F3", 114);
|
|
||||||
define("EGW_KEY_F4", 115);
|
|
||||||
define("EGW_KEY_F5", 116);
|
|
||||||
define("EGW_KEY_F6", 117);
|
|
||||||
define("EGW_KEY_F7", 118);
|
|
||||||
define("EGW_KEY_F8", 119);
|
|
||||||
define("EGW_KEY_F9", 120);
|
|
||||||
define("EGW_KEY_F10", 121);
|
|
||||||
define("EGW_KEY_F11", 122);
|
|
||||||
define("EGW_KEY_F12", 123);
|
|
||||||
|
|
||||||
class egw_keymanager
|
class egw_keymanager
|
||||||
{
|
{
|
||||||
|
const BACKSPACE = 8;
|
||||||
|
const TAB = 9;
|
||||||
|
const ENTER = 13;
|
||||||
|
const ESCAPE = 27;
|
||||||
|
const DELETE = 46;
|
||||||
|
|
||||||
|
const SPACE = 32;
|
||||||
|
|
||||||
|
const PAGE_UP = 33;
|
||||||
|
const PAGE_DOWN = 34;
|
||||||
|
|
||||||
|
const ARROW_LEFT = 37;
|
||||||
|
const ARROW_UP = 38;
|
||||||
|
const ARROW_RIGHT = 39;
|
||||||
|
const ARROW_DOWN = 40;
|
||||||
|
|
||||||
|
const _0 = 48;
|
||||||
|
const _1 = 49;
|
||||||
|
const _2 = 50;
|
||||||
|
const _3 = 51;
|
||||||
|
const _4 = 52;
|
||||||
|
const _5 = 53;
|
||||||
|
const _6 = 54;
|
||||||
|
const _7 = 55;
|
||||||
|
const _8 = 56;
|
||||||
|
const _9 = 57;
|
||||||
|
|
||||||
|
const A = 65;
|
||||||
|
const B = 66;
|
||||||
|
const C = 67;
|
||||||
|
const D = 68;
|
||||||
|
const E = 69;
|
||||||
|
const F = 70;
|
||||||
|
const G = 71;
|
||||||
|
const H = 72;
|
||||||
|
const I = 73;
|
||||||
|
const J = 74;
|
||||||
|
const K = 75;
|
||||||
|
const L = 76;
|
||||||
|
const M = 77;
|
||||||
|
const N = 78;
|
||||||
|
const O = 79;
|
||||||
|
const P = 80;
|
||||||
|
const Q = 81;
|
||||||
|
const R = 82;
|
||||||
|
const S = 83;
|
||||||
|
const T = 84;
|
||||||
|
const U = 85;
|
||||||
|
const V = 86;
|
||||||
|
const W = 87;
|
||||||
|
const X = 88;
|
||||||
|
const Y = 89;
|
||||||
|
const Z = 90;
|
||||||
|
|
||||||
|
const F1 = 112;
|
||||||
|
const F2 = 113;
|
||||||
|
const F3 = 114;
|
||||||
|
const F4 = 115;
|
||||||
|
const F5 = 116;
|
||||||
|
const F6 = 117;
|
||||||
|
const F7 = 118;
|
||||||
|
const F8 = 119;
|
||||||
|
const F9 = 120;
|
||||||
|
const F10 = 121;
|
||||||
|
const F11 = 122;
|
||||||
|
const F12 = 123;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the given key codes into translated key names.
|
||||||
|
*/
|
||||||
|
public static function key_name($keyCode)
|
||||||
|
{
|
||||||
|
// Keys which can be directly translated into ASCII chars
|
||||||
|
if (($keyCode >= self::_0 && $keyCode <= self::_9) ||
|
||||||
|
($keyCode >= self::A && $keyCode <= self::Z))
|
||||||
|
{
|
||||||
|
return chr($keyCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function keys
|
||||||
|
if ($keyCode >= self::F1 && $keyCode <= self::F12)
|
||||||
|
{
|
||||||
|
return "F".($keyCode - EGW_KEY_F1 + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special keys
|
||||||
|
switch ($keyCode) {
|
||||||
|
case self::BACKSPACE:
|
||||||
|
return lang("Back");
|
||||||
|
case self::TAB:
|
||||||
|
return lang("Tab");
|
||||||
|
case self::DELETE:
|
||||||
|
return lang("Del");
|
||||||
|
case self::SPACE:
|
||||||
|
return lang("Space");
|
||||||
|
case self::PAGE_UP:
|
||||||
|
return lang("Pg up");
|
||||||
|
case self::PAGE_DOWN:
|
||||||
|
return lang("Pg down");
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the caption of the given shortcut and returns it
|
||||||
|
*/
|
||||||
|
public static function shortcut_caption($keyCode, $shift = false, $ctrl = false, $alt = false)
|
||||||
|
{
|
||||||
|
$elems = array();
|
||||||
|
|
||||||
|
if ($shift)
|
||||||
|
{
|
||||||
|
$elems[] = lang("Shift");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ctrl)
|
||||||
|
{
|
||||||
|
$elems[] = lang("Ctrl");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($alt)
|
||||||
|
{
|
||||||
|
$elems[] = lang("Alt");
|
||||||
|
}
|
||||||
|
|
||||||
|
$elems[] = self::key_name($keyCode);
|
||||||
|
|
||||||
|
return implode(" + ", $elems);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a shortcut structure which can be JSON encoded and send to the
|
* Generates a shortcut structure which can be JSON encoded and send to the
|
||||||
* egw action system. This function and class could later be used to provide
|
* egw action system. This function and class could later be used to provide
|
||||||
@ -87,16 +151,12 @@ class egw_keymanager
|
|||||||
*/
|
*/
|
||||||
public static function shortcut($keyCode, $shift = false, $ctrl = false, $alt = false)
|
public static function shortcut($keyCode, $shift = false, $ctrl = false, $alt = false)
|
||||||
{
|
{
|
||||||
if ($shift == false && $ctrl == false && $alt == false)
|
|
||||||
{
|
|
||||||
return $keyCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
"keyCode" => $keyCode,
|
"keyCode" => $keyCode,
|
||||||
"shift" => (boolean)$shift,
|
"shift" => (boolean)$shift,
|
||||||
"ctrl" => (boolean)$ctrl,
|
"ctrl" => (boolean)$ctrl,
|
||||||
"alt" => (boolean)$alt
|
"alt" => (boolean)$alt,
|
||||||
|
"caption" => self::shortcut_caption($keyCode, $shift, $ctrl, $alt)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,14 +71,11 @@ function egwPopupAction(_id, _handler, _caption, _icon, _onExecute, _allowOnMult
|
|||||||
"alt": false
|
"alt": false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof _value == "number")
|
if (typeof _value == "object" && _value.keyCode != "undefined" &&
|
||||||
{
|
_value.caption != "undefined")
|
||||||
sc.keyCode = _value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof _value == "object" && _value.keyCode != "undefined")
|
|
||||||
{
|
{
|
||||||
sc.keyCode = _value.keyCode;
|
sc.keyCode = _value.keyCode;
|
||||||
|
sc.caption = _value.caption;
|
||||||
sc.shift = (typeof _value.shift == "undefined") ? false : _value.shift;
|
sc.shift = (typeof _value.shift == "undefined") ? false : _value.shift;
|
||||||
sc.ctrl = (typeof _value.ctrl == "undefined") ? false : _value.ctrl;
|
sc.ctrl = (typeof _value.ctrl == "undefined") ? false : _value.ctrl;
|
||||||
sc.alt = (typeof _value.alt == "undefined") ? false : _value.alt;
|
sc.alt = (typeof _value.alt == "undefined") ? false : _value.alt;
|
||||||
@ -440,8 +437,7 @@ function egwPopupActionImplementation()
|
|||||||
if (link.actionObj.shortcut)
|
if (link.actionObj.shortcut)
|
||||||
{
|
{
|
||||||
var sc = link.actionObj.shortcut;
|
var sc = link.actionObj.shortcut;
|
||||||
item.set_shortcutCaption(egw_shortcutCaption(
|
item.set_shortcutCaption(sc.caption);
|
||||||
sc.keyCode, sc.shift, sc.ctrl, sc.alt));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,92 +172,6 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Default key tranlation table - do not override this variable when doing
|
|
||||||
* an translation, but set the EGW_LANG_KEYS assoc array!
|
|
||||||
*/
|
|
||||||
var _egw_lang_keys_default = {
|
|
||||||
"ctrl": "Ctrl",
|
|
||||||
"alt": "Alt",
|
|
||||||
"shift": "Shift"
|
|
||||||
}
|
|
||||||
|
|
||||||
_egw_lang_keys_default[EGW_KEY_DELETE] = "Del";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_TAB] = "Tab";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_ESCAPE] = "Esc";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_BACKSPACE] = "Back";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_PAGE_UP] = "Pg Up";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_PAGE_DOWN] = "Pg Down";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_ARROW_LEFT] = "Left";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_ARROW_RIGHT] = "Right";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_ARROW_DOWN] = "Down";
|
|
||||||
_egw_lang_keys_default[EGW_KEY_ARROW_UP] = "Up";
|
|
||||||
|
|
||||||
function egw_lang_keys_lookup(_keyCode) {
|
|
||||||
// Special keys - search for the key translation table - if not found,
|
|
||||||
// return default names
|
|
||||||
if (typeof EGW_LANG_KEYS != "undefined")
|
|
||||||
{
|
|
||||||
return EGW_LANG_KEYS[_keyCode];
|
|
||||||
}
|
|
||||||
|
|
||||||
return _egw_lang_keys_default[_keyCode];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tranlates the given key into the an string
|
|
||||||
*/
|
|
||||||
function egw_keyName(_keyCode)
|
|
||||||
{
|
|
||||||
// Force the keyCode to be valid
|
|
||||||
_keyCode = egw_keycode_makeValid(_keyCode);
|
|
||||||
if (_keyCode == -1)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keys which can be directly translated into ASCII chars
|
|
||||||
if ((_keyCode >= EGW_KEY_0 && _keyCode <= EGW_KEY_9) ||
|
|
||||||
(_keyCode >= EGW_KEY_A && _keyCode <= EGW_KEY_Z))
|
|
||||||
{
|
|
||||||
return String.fromCharCode(_keyCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function keys
|
|
||||||
if (_keyCode >= EGW_KEY_F1 && _keyCode <= EGW_KEY_F12)
|
|
||||||
{
|
|
||||||
return "F" + (_keyCode - EGW_KEY_F1 + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return egw_lang_keys_lookup(_keyCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Assembles the caption of a shortcut and returns it
|
|
||||||
*/
|
|
||||||
function egw_shortcutCaption(_keyCode, _shift, _ctrl, _alt)
|
|
||||||
{
|
|
||||||
var elems = [];
|
|
||||||
|
|
||||||
if (_shift)
|
|
||||||
{
|
|
||||||
elems.push(egw_lang_keys_lookup("shift"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_ctrl)
|
|
||||||
{
|
|
||||||
elems.push(egw_lang_keys_lookup("ctrl"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_alt)
|
|
||||||
{
|
|
||||||
elems.push(egw_lang_keys_lookup("alt"));
|
|
||||||
}
|
|
||||||
|
|
||||||
elems.push(egw_keyName(_keyCode));
|
|
||||||
|
|
||||||
return elems.join(" + ");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an unique key for the given shortcut
|
* Creates an unique key for the given shortcut
|
||||||
|
Loading…
Reference in New Issue
Block a user