-
Notifications
You must be signed in to change notification settings - Fork 2
/
tooltip.js
162 lines (146 loc) · 6.23 KB
/
tooltip.js
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// // Gestion de l'affichage de l'aide
// afficher une infobulle à côté des entrées W avec la clé de submenuDict
function tooltipshower() {
// vérifier que la fenêtre est active et que le focus est sur la page
if (!document.hasFocus() || document.hidden) {
return;
}
// simuler un survol de W
var element = document.querySelector('[class="has-popup static"]');
if (element) {
element.dispatchEvent(new MouseEvent('mouseover', {
view: window,
bubbles: true,
cancelable: true
}));
}
chrome.storage.local.get(["defaultShortcuts", "shortcuts"], function (result) {
const { shortcuts, defaultShortcuts } = result;
let submenuDict = {};
let submenuDictAll = {};
Object.entries(keyCommands).forEach(([key, action]) => {
const match = action.toString().match(/submenuW\('(.*)'\)/);
if (match) {
const submenu = match[1];
submenuDict[submenu] = shortcutDefaut(shortcuts, defaultShortcuts, key);
}
submenuDictAll[key] = {
raccourci: shortcutDefaut(shortcuts, defaultShortcuts, key),
description: defaultShortcuts[key].description
};
});
// Ajouts manuels
Object.assign(submenuDictAll, {
"ouinonfse": { raccourci: 'n/o', description: "Valide oui/non dans les FSE" },
"pavnumordo": { raccourci: "pavé num. /'à'", description: "Permet d’utiliser les touches 0 à 9 et « à » pour faire les prescriptions de médicaments." }
});
updateElementsWithTooltips(submenuDict);
displayShortcutsList(submenuDictAll);
});
function updateElementsWithTooltips(submenuDict) {
document.querySelectorAll('.level2.dynamic').forEach(element => {
const description = element.innerText.replace(/ \(\d+\)$/, '');
if (submenuDict[description]) {
const tooltip = createTooltip(submenuDict[description]);
element.appendChild(tooltip);
}
});
}
function createTooltip(text) {
const tooltip = document.createElement('div');
tooltip.className = 'tooltip';
Object.assign(tooltip.style, {
position: 'absolute',
top: '0px',
left: '100%',
padding: '10px',
backgroundColor: '#284E98',
border: '1px solid black',
zIndex: '1000',
});
tooltip.textContent = text;
return tooltip;
}
function displayShortcutsList(submenuDictAll) {
const shortcutsList = document.createElement('div');
shortcutsList.className = 'tooltip';
Object.assign(shortcutsList.style, {
position: 'fixed',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
zIndex: '1001',
backgroundColor: '#ffffff',
padding: '20px',
borderRadius: '8px',
boxShadow: '0 4px 8px rgba(0,0,0,0.1)',
border: '1px solid #e0e0e0',
fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif',
color: '#333',
fontSize: '14px',
});
shortcutsList.innerHTML = buildTableHTML(submenuDictAll);
document.body.appendChild(shortcutsList);
}
function buildTableHTML(submenuDictAll) {
let tableHTML = '<table><tr><th style="text-align:right;">Raccourci </th><th style="text-align:left"> Description</th></tr>';
Object.entries(submenuDictAll).forEach(([_, { raccourci, description }]) => {
tableHTML += `<tr><td style="text-align:right;">${raccourci} </td><td style="text-align:left"> ${description}</td></tr>`;
});
return tableHTML + '</table>';
}
}
// retirer l'infobulle d'aide et relacher W
function mouseoutW() {
// Supprimer les tooltips
var tooltips = document.querySelectorAll('div.tooltip');
tooltips.forEach(function (tooltip) {
tooltip.remove();
});
// relacher W
var element = document.querySelector('[class="has-popup static"]');
if (element) {
element.dispatchEvent(new MouseEvent('mouseout', {
view: window,
bubbles: true,
cancelable: true
}));
}
}
addTweak('*', '*Tooltip', function () {
// Ecoute l'appuis de la touches Alt pour afficher l'aide
var lastAltPressTime = 0;
var altKeyPressCount = 0; // Compteur d'appuis sur la touche Alt
var checkAltReleaseInterval = null;
var resetAltKeyPressCountInterval = null;
document.addEventListener('keydown', function (event) {
if (event.key === 'Alt') {
console.log('Alt key pressed');
lastAltPressTime = Date.now();
altKeyPressCount++; // Incrémenter le compteur à chaque appui sur Alt
clearTimeout(resetAltKeyPressCountInterval);
resetAltKeyPressCountInterval = setTimeout(function () {
altKeyPressCount = 0; // Réinitialiser altKeyPressCount après 1 seconde sans appui sur Alt
}, 1000); // Délai de 1 seconde
// Ignorer le premier appui sur Alt
if (altKeyPressCount > 1) {
if (altKeyPressCount === 2) {
tooltipshower();
}
// Si l'intervalle n'est pas déjà en cours, le démarrer
if (!checkAltReleaseInterval) {
checkAltReleaseInterval = setInterval(function () {
// Si plus de 100ms se sont écoulées depuis la dernière pression
if (Date.now() - lastAltPressTime > 100) {
console.log('Alt key released');
clearInterval(checkAltReleaseInterval);
checkAltReleaseInterval = null; // Réinitialiser l'intervalle
mouseoutW(); // Appeler la fonction de relâchement
altKeyPressCount = 0; // Réinitialiser le compteur pour permettre la détection lors de la prochaine série d'appuis
}
}, 100); // Vérifier toutes les 100ms
}
}
}
});
});