372
372
toggleSortMode();
373
373
});
374
374
375
- var keyHandler = function(event) {
375
+ var keydownHandler = function(event) {
376
376
var ele = event.target || event.srcElement;
377
377
var keyCode = event.keyCode || event.charCode;
378
378
@@ -392,12 +392,10 @@ EOF
392
392
if (keyCode === 80) {
393
393
togglePinHandler();
394
394
}
395
-
396
- // console.log(keyCode);
397
395
};
398
396
399
397
return {
400
- keyHandler: keyHandler ,
398
+ keydownHandler: keydownHandler ,
401
399
get sortMode() {
402
400
return sortModes[sortModeIndex];
403
401
},
@@ -836,11 +834,10 @@ EOF
836
834
setMode(mode, true);
837
835
}
838
836
839
- var keyHandler = function(event) {
837
+ var keydownHandler = function(event) {
840
838
var ele = event.target || event.srcElement;
841
839
var keyCode = event.keyCode || event.charCode;
842
840
var key = event.key;
843
- console.log('keyCode: ' + keyCode + ', key: ' + key);
844
841
845
842
// LEFT arrow key
846
843
if (keyCode === 37) {
945
942
946
943
// console.log(keyCode);
947
944
};
948
-
949
945
return {
946
+ get keyEnabled() {
947
+ return keyEnabled;
948
+ },
950
949
get mode() {
951
950
return mode;
952
951
},
@@ -965,14 +964,96 @@ EOF
965
964
}
966
965
},
967
966
sort: sort,
968
- keyHandler: keyHandler
967
+ keydownHandler: keydownHandler
969
968
};
970
969
})(imageObjects);
971
970
971
+ var keyController = (function() {
972
+ var keyEnabled = true;
973
+ var shiftKeyDown = false;
974
+ var ctrlKeyDown = false;
975
+ var altKeyDown = false;
976
+
977
+ var keydownHandler = function(event) {
978
+ var ele = event.target || event.srcElement;
979
+ var keyCode = event.keyCode || event.charCode;
980
+ var key = event.key;
981
+ console.log('[keydownHandler] keyCode: ' + keyCode + ', key: ' + key);
982
+
983
+ // Disable hotkeys when any of SHIFT, CTRL, ALT keys are pressed
984
+ if (keyCode == 16) {
985
+ shiftKeyDown = true;
986
+ }
987
+ if (keyCode == 17) {
988
+ ctrlKeyDown = true;
989
+ }
990
+ if (keyCode == 18) {
991
+ altKeyDown = true;
992
+ }
993
+ if (shiftKeyDown || ctrlKeyDown || altKeyDown) {
994
+ console.log('[keydownHandler] Disabling hotkeys');
995
+ keyEnabled = false;
996
+ }
997
+
998
+ if (!keyEnabled) {
999
+ return;
1000
+ }
1001
+ menu.keydownHandler(event);
1002
+ gallery.keydownHandler(event);
1003
+ }
1004
+
1005
+ var keyupHandler = function(event) {
1006
+ var ele = event.target || event.srcElement;
1007
+ var keyCode = event.keyCode || event.charCode;
1008
+ var key = event.key;
1009
+ console.log('[keyupHandler] keyCode: ' + keyCode + ', key: ' + key);
1010
+
1011
+ // Enable hotkeys only when SHIFT, CTRL, and ALT keys are not pressed
1012
+ if (keyCode == 16) {
1013
+ shiftKeyDown = false;
1014
+ }
1015
+ if (keyCode == 17) {
1016
+ ctrlKeyDown = false;
1017
+ }
1018
+ if (keyCode == 18) {
1019
+ altKeyDown = false;
1020
+ }
1021
+ // If pressing SHIFT+TAB, CTRL+TAB, ALT+TAB, consider keys as not pressed
1022
+ // if (keyCode == 9) {
1023
+ // console.log('[keydownHandler] TAB detected, considering all keys as not pressed');
1024
+ // shiftKeyDown = false;
1025
+ // ctrlKeyDown = false;
1026
+ // altKeyDown = false;
1027
+ // }
1028
+ if (!shiftKeyDown && !ctrlKeyDown && !altKeyDown) {
1029
+ console.log('[keydownHandler] Enabling hotkeys');
1030
+ keyEnabled = true;
1031
+ }
1032
+ }
1033
+
1034
+ var visibilityChangeHandler = function(event) {
1035
+ console.log('[visibilitychange] visbilityState: ' + document.hidden);
1036
+ console.log('[visibilitychange] Considering all keys as not pressed');
1037
+ shiftKeyDown = false;
1038
+ ctrlKeyDown = false;
1039
+ altKeyDown = false;
1040
+ }
1041
+ return {
1042
+ keydownHandler: keydownHandler,
1043
+ keyupHandler: keyupHandler,
1044
+ visibilityChangeHandler: visibilityChangeHandler
1045
+ };
1046
+ }());
1047
+
972
1048
// App Events
973
1049
window.addEventListener("keydown", function (event) {
974
- menu.keyHandler(event);
975
- gallery.keyHandler(event);
1050
+ keyController.keydownHandler(event);
1051
+ });
1052
+ window.addEventListener("keyup", function (event) {
1053
+ keyController.keyupHandler(event);
1054
+ });
1055
+ document.addEventListener("visibilitychange", function (event) {
1056
+ keyController.visibilityChangeHandler(event);
976
1057
});
977
1058
</script>
978
1059
</body>
0 commit comments