-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
startInteractionMode.ts
71 lines (57 loc) · 1.7 KB
/
startInteractionMode.ts
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
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
let initialized = false;
let interactionMode: 'mouse' | 'keyboard' = 'mouse';
export function startInteractionMode(): void {
if (initialized) {
return;
}
initialized = true;
document.body.classList.add('mouse-mode');
window.enterKeyboardMode = () => {
if (interactionMode === 'keyboard') {
return;
}
interactionMode = 'keyboard';
document.body.classList.add('keyboard-mode');
document.body.classList.remove('mouse-mode');
const clearSelectedMessage =
window.reduxActions?.conversations?.clearSelectedMessage;
if (clearSelectedMessage) {
clearSelectedMessage();
}
const userChanged = window.reduxActions?.user?.userChanged;
if (userChanged) {
userChanged({ interactionMode });
}
};
window.enterMouseMode = () => {
if (interactionMode === 'mouse') {
return;
}
interactionMode = 'mouse';
document.body.classList.add('mouse-mode');
document.body.classList.remove('keyboard-mode');
const clearSelectedMessage =
window.reduxActions?.conversations?.clearSelectedMessage;
if (clearSelectedMessage) {
clearSelectedMessage();
}
const userChanged = window.reduxActions?.user?.userChanged;
if (userChanged) {
userChanged({ interactionMode });
}
};
document.addEventListener(
'keydown',
event => {
if (event.key === 'Tab') {
window.enterKeyboardMode();
}
},
true
);
document.addEventListener('wheel', window.enterMouseMode, true);
document.addEventListener('mousedown', window.enterMouseMode, true);
window.getInteractionMode = () => interactionMode;
}