summaryrefslogtreecommitdiffstats
path: root/apps/files/js/keyboardshortcuts.js
blob: 95e1ce428c964b133957ec8c3b488290348a17c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// your file
var Files = Files || {};

function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax = arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}

Files.bindKeyboardShortcuts = function (document, $) {
	var keys = [];
	var keyCodes = {
		shift: 16,
		n: 78,
		cmdFirefox: 224,
		cmdOpera: 17,
		leftCmdWebKit: 91,
		rightCmdWebKit: 93,
		ctrl: 16,
		esc: 27,
		downArrow: 40,
		upArrow: 38,
		enter: 13
	};

	$(document).keydown(function(event){//check for modifier keys
		if($.inArray(event.keyCode, keys) === -1)
			keys.push(event.keyCode);
		console.log(event.keyCode);
		
		if($.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1)){
			event.preventDefault(); //Prevent web browser from responding
			event.stopPropagation();
			return false;
		}
	});
	
	$(document).keyup(function(event){
       // do your event.keyCode checks in here
		
		console.log(JSON.stringify(keys));
		
		if($.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1)){
			if($.inArray(keyCodes.shift, keys) !== -1){ //16=shift, New File
				$("#new").addClass("active");
				$(".popup.popupTop").toggle(true);
				$('#new li[data-type="file"]').trigger('click');
				console.log("new file");
				removeA(keys, keyCodes.n);
			}
			else{ //New Folder
				$("#new").addClass("active");
				$(".popup.popupTop").toggle(true);
				$('#new li[data-type="folder"]').trigger('click');
				console.log("new folder");
				removeA(keys, keyCodes.n);
			}
		}
		
		if($("#new").hasClass("active") && $.inArray(keyCodes.esc, keys) !== -1){
			$("#controls").trigger('click');
			console.log("close");
		}
		
		if(!$("#new").hasClass("active") && $.inArray(keyCodes.downArrow, keys) !== -1){
			var select = -1;
			$("#fileList tr").each(function(index){
				if($(this).hasClass("mouseOver")){
			        select = index+1;
			        $(this).removeClass("mouseOver");
		        }
			});
			
			if(select === -1){
				$("#fileList tr:first").addClass("mouseOver");
			}
			else{
				$("#fileList tr").each(function(index){
					if(index === select){
						$(this).addClass("mouseOver");
					}
				});
			}
		}
		
		if(!$("#new").hasClass("active") && $.inArray(keyCodes.upArrow, keys) !== -1){
			var select = -1;
			$("#fileList tr").each(function(index){
				if($(this).hasClass("mouseOver")){
			        select = index-1;
			        $(this).removeClass("mouseOver");
		        }
			});
			
			if(select === -1){
				$("#fileList tr:last").addClass("mouseOver");
			}
			else{
				$("#fileList tr").each(function(index){
					if(index === select){
						$(this).addClass("mouseOver");
					}
				});
			}
		}
		
		if($.inArray(keyCodes.enter, keys) !== -1){
			$("#fileList tr").each(function(index){
				if($(this).hasClass("mouseOver")){
			        $(this).removeClass("mouseOver");
			        $(this).find("span:first").trigger('click');
		        }
			});
		}
		
		removeA(keys, event.keyCode);
	});
};