aboutsummaryrefslogtreecommitdiffstats
path: root/src/multi_key_command.ts
blob: 7e303feca46cb756651a8492ae59110a2a4a0f63 (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
import key_codes, { KeyCode } from './key_codes';

export default function(
	el: HTMLDocument | HTMLElement,
	command: KeyCode[],
	action: () => void
): void {
	var key_buffer: number[] = [];

	el.addEventListener('keydown', function(e: KeyboardEvent) {
		command.forEach((key_code) => {
			if (e.keyCode === key_code) {
				key_buffer.push(key_code);
			}
		});
	});

	el.addEventListener('keyup', function(e: KeyboardEvent) {
		if (key_buffer.length >= 2) {
			var command_executed = key_buffer.length === command.length
				&& key_buffer.every((value, index) => value === command[index]);

			if (command_executed) {
				action();
				key_buffer = [];
			}
		}
	});
};