rsence 2.1.5 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.6
|
data/js/core/elem/elem.js
CHANGED
@@ -12,6 +12,12 @@
|
|
12
12
|
var//RSence.Core
|
13
13
|
BROWSER_TYPE = {
|
14
14
|
|
15
|
+
/* Any browser on Mac OS X */
|
16
|
+
mac: false,
|
17
|
+
|
18
|
+
/* Any browser on Windows */
|
19
|
+
win: false,
|
20
|
+
|
15
21
|
/* Any version of Microsoft Internet Explorer */
|
16
22
|
ie: false,
|
17
23
|
|
@@ -1289,6 +1295,9 @@ ELEM = {
|
|
1289
1295
|
_browserType.ie8 = _isIE && (_ua.indexOf("MSIE 8") !== -1);
|
1290
1296
|
_browserType.ie9 = _isIE && (_ua.indexOf("MSIE 9") !== -1);
|
1291
1297
|
|
1298
|
+
_browserType.mac = (_ua.indexOf("Macintosh") !== -1);
|
1299
|
+
_browserType.win = (_ua.indexOf("Windows") !== -1);
|
1300
|
+
|
1292
1301
|
// Experimental; don't treat IE9 as an IE at all.
|
1293
1302
|
// NOTE: IE9 Beta does still not behave like a standard web browser.
|
1294
1303
|
// It will probably require as much tuning as earlier IE versions.
|
@@ -118,6 +118,8 @@ HEventResponder = HClass.extend({
|
|
118
118
|
* method for it is +keyDown+ and it receives the ascii key
|
119
119
|
* code whenever a keyboard key is pressed. Can also be
|
120
120
|
* toggled separately by using the +setKeyDown+ method.
|
121
|
+
* Also supports special mode 'repeat', when listening to
|
122
|
+
* key repetitions is needed.
|
121
123
|
* +keyUp+:: The local +keyUp+ event state. The component receives
|
122
124
|
* this event only if it's focused. The event responder
|
123
125
|
* method for it is +keyUp+ and it receives the ascii key
|
@@ -361,7 +363,8 @@ HEventResponder = HClass.extend({
|
|
361
363
|
*
|
362
364
|
* = Parameters
|
363
365
|
* +_flag+:: Set the keyDown event listening on/off (true/false) for
|
364
|
-
* the component instance.
|
366
|
+
* the component instance. Also supports special mode 'repeat',
|
367
|
+
* when listening to key repetitions is needed.
|
365
368
|
*
|
366
369
|
* = Returns
|
367
370
|
* +self+
|
@@ -149,7 +149,10 @@ EVENT = {
|
|
149
149
|
Event.observe( _globalEventTargetElement, 'click', _this.click );
|
150
150
|
Event.observe( _globalEventTargetElement, 'keyup', _this.keyUp );
|
151
151
|
Event.observe( _globalEventTargetElement, 'keydown', _this.keyDown );
|
152
|
-
|
152
|
+
// IE and WebKit browsers don't need keyPress for repeat
|
153
|
+
if( !BROWSER_TYPE.safari && !BROWSER_TYPE.ie){
|
154
|
+
Event.observe( _globalEventTargetElement, 'keypress', _this.keyPress );
|
155
|
+
}
|
153
156
|
Event.observe( _globalEventTargetElement, 'contextmenu', _this.contextMenu );
|
154
157
|
Event.observe( _globalEventTargetElement, 'resize', _this.resize );
|
155
158
|
Event.observe( _globalEventTargetElement, 'mousewheel', _this.mouseWheel );
|
@@ -857,36 +860,85 @@ EVENT = {
|
|
857
860
|
},
|
858
861
|
|
859
862
|
|
863
|
+
/** Mid-level mouse scroll wheel event manager.
|
864
|
+
* Delegates mouseWheel calls to the high-level event receivers of all
|
865
|
+
* controls registered for that event.
|
866
|
+
**/
|
867
|
+
mouseWheel: function(e) {
|
868
|
+
var _this = EVENT,
|
869
|
+
_delta = 0,
|
870
|
+
i = 0;
|
871
|
+
if (!e) {
|
872
|
+
e = window.event;
|
873
|
+
}
|
874
|
+
if (e.wheelDelta) {
|
875
|
+
_delta = 0 - (e.wheelDelta / 120);
|
876
|
+
}
|
877
|
+
else if (e.detail) {
|
878
|
+
_delta = 0 - (e.detail / 3);
|
879
|
+
}
|
880
|
+
if (BROWSER_TYPE.opera || BROWSER_TYPE.safari) {
|
881
|
+
_delta = 0 - _delta;
|
882
|
+
}
|
883
|
+
for (; i !== _this.focused.length; i++) {
|
884
|
+
if (_this.focused[i] === true) {
|
885
|
+
if (_this.focusOptions[i].mouseWheel === true) {
|
886
|
+
Event.stop(e);
|
887
|
+
_this.focusOptions[i].ctrl.mouseWheel(_delta);
|
888
|
+
}
|
889
|
+
}
|
890
|
+
}
|
891
|
+
},
|
892
|
+
|
893
|
+
/* Alternative right button detection, wrapper for the mouseDown method */
|
894
|
+
contextMenu: function(e) {
|
895
|
+
// EVENT.mouseDown(e, false);
|
896
|
+
Event.stop(e);
|
897
|
+
|
898
|
+
/***
|
899
|
+
|
900
|
+
IMPLEMENT SEPARATE CONTEXT-MENU EVENT HANDLING HERE
|
901
|
+
|
902
|
+
***/
|
903
|
+
|
904
|
+
// if(Event.isLeftClick(e)){
|
905
|
+
// EVENT.status[EVENT.button2] = false;
|
906
|
+
// }
|
907
|
+
},
|
908
|
+
|
909
|
+
|
860
910
|
/** Mid-level key press manager.
|
861
911
|
* Gets called on the onKeyDown event.
|
862
912
|
* Delegates keyDown calls to the high-level event receivers of all
|
863
913
|
* controls registered for that event.
|
864
914
|
**/
|
865
915
|
keyDown: function(e) {
|
866
|
-
var
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
916
|
+
var
|
917
|
+
_this = EVENT,
|
918
|
+
_keyCode = _this.translateKeyCodes(e.keyCode),
|
919
|
+
_keyDownStateForActiveControl = _this.activeControl?(_this.focusOptions[_this.activeControl.elemId]?_this.focusOptions[_this.activeControl.elemId].keyDown:false):false,
|
920
|
+
_repeat = (_keyDownStateForActiveControl === 'repeat'),
|
921
|
+
_stopEvent = false;
|
871
922
|
_this._modifiers(e);
|
872
|
-
|
923
|
+
_this._lastKeyPressTime = new Date().getTime();
|
924
|
+
if(!_this.status[_this.cmdKeyDown] && _this._detectCmdKey(_keyCode)){
|
873
925
|
_this.status[_this.cmdKeyDown] = true;
|
874
926
|
}
|
875
927
|
if (_this.activeControl && _keyDownStateForActiveControl) {
|
876
|
-
if ((_this._lastKeyDown !==
|
877
|
-
if(_this.activeControl.keyDown(
|
928
|
+
if ((_this._lastKeyDown !== _keyCode) || _repeat) {
|
929
|
+
if(_this.activeControl.keyDown(_keyCode)){
|
878
930
|
_stopEvent = true;
|
879
931
|
}
|
880
932
|
}
|
881
933
|
}
|
882
934
|
// Insert key to the realtime array, remove in keyUp
|
883
|
-
if (_this.status[_this.keysDown].indexOf(
|
884
|
-
_this.status[_this.keysDown].push(
|
935
|
+
if (_this.status[_this.keysDown].indexOf(_keyCode) === -1) {
|
936
|
+
_this.status[_this.keysDown].push(_keyCode);
|
885
937
|
}
|
886
938
|
if (!_this.status[_this.cmdKeyDown] && _stopEvent){
|
887
939
|
Event.stop(e);
|
888
940
|
}
|
889
|
-
_this._lastKeyDown =
|
941
|
+
_this._lastKeyDown = _keyCode;
|
890
942
|
},
|
891
943
|
|
892
944
|
|
@@ -898,17 +950,18 @@ EVENT = {
|
|
898
950
|
* registered for that event.
|
899
951
|
**/
|
900
952
|
keyUp: function(e) {
|
901
|
-
var
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
953
|
+
var
|
954
|
+
_this = EVENT,
|
955
|
+
_keyCode = _this.translateKeyCodes(e.keyCode),
|
956
|
+
_keyCodeIndex,
|
957
|
+
i = 0,
|
958
|
+
_stopEvent = false,
|
959
|
+
_ctrlId,
|
960
|
+
_ctrl;
|
908
961
|
_this._modifiers(e);
|
909
962
|
_this._lastKeyDown = null;
|
910
963
|
if (_this.activeControl && _this.activeControl.elemId && _this.focusOptions[_this.activeControl.elemId].keyUp === true) {
|
911
|
-
if(_this.activeControl.keyUp(
|
964
|
+
if(_this.activeControl.keyUp(_keyCode)){
|
912
965
|
_stopEvent = true;
|
913
966
|
}
|
914
967
|
}
|
@@ -924,81 +977,136 @@ EVENT = {
|
|
924
977
|
if (!_this.status[_this.cmdKeyDown] && _stopEvent){
|
925
978
|
Event.stop(e);
|
926
979
|
}
|
927
|
-
if(_this.status[_this.cmdKeyDown] && _this._detectCmdKey(
|
980
|
+
if(_this.status[_this.cmdKeyDown] && _this._detectCmdKey(_keyCode)){
|
928
981
|
_this.status[_this.cmdKeyDown] = false;
|
929
982
|
}
|
930
983
|
// Remove the key from the realtime array, inserted in keyDown
|
931
|
-
_keyCodeIndex = _this.status[_this.keysDown].indexOf(
|
984
|
+
_keyCodeIndex = _this.status[_this.keysDown].indexOf(_keyCode);
|
932
985
|
if (_keyCodeIndex !== -1) {
|
933
986
|
_this.status[_this.keysDown].splice(_keyCodeIndex, 1);
|
934
987
|
}
|
935
988
|
},
|
936
989
|
|
937
|
-
/*
|
990
|
+
/* The keyPress itself is ignored per se and used only as a repetition event for the last keyDown. */
|
938
991
|
keyPress: function(e) {
|
939
|
-
var
|
940
|
-
_this
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
* controls registered for that event.
|
947
|
-
**/
|
948
|
-
mouseWheel: function(e) {
|
949
|
-
var _this = EVENT,
|
950
|
-
_delta = 0,
|
951
|
-
i = 0;
|
952
|
-
if (!e) {
|
953
|
-
e = window.event;
|
954
|
-
}
|
955
|
-
if (e.wheelDelta) {
|
956
|
-
_delta = 0 - (e.wheelDelta / 120);
|
957
|
-
}
|
958
|
-
else if (e.detail) {
|
959
|
-
_delta = 0 - (e.detail / 3);
|
960
|
-
}
|
961
|
-
if (BROWSER_TYPE.opera || BROWSER_TYPE.safari) {
|
962
|
-
_delta = 0 - _delta;
|
992
|
+
var
|
993
|
+
_this = EVENT,
|
994
|
+
_timeNow = new Date().getTime();
|
995
|
+
_this._modifiers(e);
|
996
|
+
// Prevent non-repeat behaviour by waiting at least 100ms before repeating
|
997
|
+
if(_this._lastKeyPressTime > (_timeNow-100)){
|
998
|
+
return;
|
963
999
|
}
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
1000
|
+
if(_this._lastKeyDown !== null){
|
1001
|
+
var
|
1002
|
+
_keyCode = _this.translateKeyCodes(_this._lastKeyDown),
|
1003
|
+
_keyDownStateForActiveControl = _this.activeControl?(_this.focusOptions[_this.activeControl.elemId]?_this.focusOptions[_this.activeControl.elemId].keyDown:false):false,
|
1004
|
+
_repeat = (_keyDownStateForActiveControl === 'repeat'),
|
1005
|
+
_stopEvent = false;
|
1006
|
+
if (_this.activeControl && _keyDownStateForActiveControl && _repeat) {
|
1007
|
+
if(_this.activeControl.keyDown(_keyCode)){
|
1008
|
+
_stopEvent = true;
|
969
1009
|
}
|
970
1010
|
}
|
1011
|
+
if(_stopEvent){
|
1012
|
+
Event.stop(e);
|
1013
|
+
}
|
971
1014
|
}
|
972
1015
|
},
|
973
1016
|
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
Event.stop(e);
|
1017
|
+
|
1018
|
+
// Normalization map of keyCodes for Opera specifically
|
1019
|
+
_operaKeyCodeTranslations: {
|
978
1020
|
|
979
|
-
|
1021
|
+
// Symbol keys:
|
1022
|
+
59: 186, // [;:]
|
1023
|
+
61: 187, // [=+]
|
1024
|
+
44: 188, // [,<]
|
1025
|
+
45: 189, // [-_]
|
1026
|
+
46: 190, // [.>]
|
1027
|
+
47: 191, // [/?]
|
1028
|
+
96: 192, // [`~]
|
1029
|
+
91: 219, // [[{]
|
1030
|
+
92: 220, // [\|]
|
1031
|
+
93: 221, // []}]
|
1032
|
+
39: 222, // ['"]
|
980
1033
|
|
981
|
-
|
1034
|
+
// Numeric keypad keys can't be mapped on Opera, because Opera
|
1035
|
+
// doesn't differentiate between the keys on the numeric keypad
|
1036
|
+
// versus the functionally same keys elsewhere on the keyboard.
|
982
1037
|
|
983
|
-
|
1038
|
+
// Branded keys:
|
1039
|
+
// Apple Command keys are same as ctrl, but ctrl is 0; Can't be re-mapped reliably.
|
1040
|
+
// The Windows Menu key also return 0, so it can't be re-mapped either.
|
1041
|
+
219: 91, // Left Windows key (Start)
|
1042
|
+
220: 92 // Right Windows key (Start)
|
1043
|
+
},
|
1044
|
+
|
1045
|
+
// Normalization map of keyCodes for Gecko (Mozilla) browsers specifically
|
1046
|
+
_mozillaKeyCodeTranslations: {
|
984
1047
|
|
985
|
-
//
|
986
|
-
//
|
1048
|
+
// Symbol keys:
|
1049
|
+
59: 186, // [;:]
|
1050
|
+
61: 187, // [=+]
|
1051
|
+
109: 189, // [-_]
|
1052
|
+
|
1053
|
+
// Branded keys:
|
1054
|
+
224: 91 // Apple Command key to left windows key mapping
|
1055
|
+
|
1056
|
+
},
|
1057
|
+
|
1058
|
+
/** Translates keyCodes to the normalized pseudo-ascii used by IE and WebKit browsers.
|
1059
|
+
* Opera and Mozilla browsers use different codes, so they'll need translations.
|
1060
|
+
**/
|
1061
|
+
translateKeyCodes: function(_keyCode){
|
1062
|
+
var
|
1063
|
+
_this = EVENT,
|
1064
|
+
_transCode;
|
1065
|
+
|
1066
|
+
// We use the WebKit and IE browsers as the normalization base, because
|
1067
|
+
// there is no variance between in these. Returns the keyCode as-is for
|
1068
|
+
// browsers in this category.
|
1069
|
+
if(BROWSER_TYPE.safari || BROWSER_TYPE.ie){
|
1070
|
+
return _keyCode;
|
1071
|
+
}
|
1072
|
+
// Opera has its own keyCodes, which are different from all others.
|
1073
|
+
else if(BROWSER_TYPE.opera){
|
1074
|
+
_transCode = _this._operaKeyCodeTranslations[_keyCode];
|
1075
|
+
}
|
1076
|
+
// The assumption is that the other browsers do what mozille does.
|
1077
|
+
else {
|
1078
|
+
_transCode = _this._mozillaKeyCodeTranslations[_keyCode];
|
1079
|
+
}
|
1080
|
+
if(_transCode === undefined || _transCode === null){
|
1081
|
+
return _keyCode;
|
1082
|
+
}
|
1083
|
+
// else {
|
1084
|
+
// console.log('key map from:',_keyCode,' to:',_transCode);
|
987
1085
|
// }
|
1086
|
+
return _transCode;
|
988
1087
|
},
|
989
1088
|
|
990
1089
|
_cmdKeys: [
|
991
|
-
|
992
|
-
219, // Opera Left Windows Key
|
993
|
-
220, // Opera Right Windows Key
|
994
|
-
0, // Opera Menu Key or Linux Gecko: any Windows Key
|
995
|
-
17, // Opera
|
1090
|
+
17, // Ctrl
|
996
1091
|
91, // Others (Left Start Key or Left Command Key)
|
997
1092
|
92, // Others (Right Start Key)
|
998
1093
|
93 // Others (Menu Key or Right Command Key)
|
999
1094
|
],
|
1000
1095
|
_detectCmdKey: function( _keyCode ) {
|
1001
|
-
|
1096
|
+
|
1097
|
+
// On Opera, return true on any of the keycodes
|
1098
|
+
if(BROWSER_TYPE.opera){
|
1099
|
+
return (EVENT._cmdKeys.indexOf(_keyCode) !== -1);
|
1100
|
+
}
|
1101
|
+
// Any mac browser (except opera, above) uses left or right windows key
|
1102
|
+
// equivalent as the Command key.
|
1103
|
+
else if(BROWSER_TYPE.mac){
|
1104
|
+
return ((_keyCode === 91) || (_keyCode === 93));
|
1105
|
+
}
|
1106
|
+
// Other platforms use CTRL as the command key.
|
1107
|
+
else {
|
1108
|
+
return (_keyCode === 17);
|
1109
|
+
}
|
1002
1110
|
},
|
1003
1111
|
|
1004
1112
|
/* Handle the event modifiers. */
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 2.1.
|
9
|
+
- 6
|
10
|
+
version: 2.1.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Riassence Inc.
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-16 00:00:00 +02:00
|
19
19
|
default_executable: rsence
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|