-
Notifications
You must be signed in to change notification settings - Fork 2
/
antecedent.js
160 lines (147 loc) · 7.31 KB
/
antecedent.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
// Ajoute des cases pour trier les atcds CIM-10 par ordre alphabétique et pour masquer les CIM-10 secondaires
addTweak('/FolderMedical/AntecedentForm.aspx', '*trimCIM10', function () {
function addCheckBox() {
let checkbox = document.querySelector('#trim');
if (!checkbox) {
getOption('trimCIM10', function (trimCIM10) {
// Ajoute une checkbox nommée "trim" à côté de '#ContentPlaceHolder1_CheckBoxUserPreferenceShowFavoriCIM10'
let checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.id = 'trim';
checkbox.title = 'Weda-Helper : permet de masquer les CIM10 secondaires pour faciliter la recherche';
checkbox.checked = trimCIM10;
checkbox.style = 'margin-left: 10px;';
let label = document.createElement('label');
label.htmlFor = 'trim';
label.appendChild(document.createTextNode('Trim'));
label.title = 'Weda-Helper : permet de masquer les CIM10 secondaires pour faciliter la recherche';
let parent = document.querySelector('#ContentPlaceHolder1_CheckBoxUserPreferenceShowFavoriCIM10').parentNode.parentNode;
parent.appendChild(checkbox);
parent.appendChild(label);
// Enregistre la valeur de la checkbox dans le local storage en cas de changement
checkbox.addEventListener('change', function () {
console.log('checkbox changed', checkbox.checked);
chrome.storage.local.set({ 'trimCIM10': checkbox.checked });
if (checkbox.checked) {
removeSecondaryCIM10();
sortAtcd();
} else {
let searchButton = document.querySelector('#ContentPlaceHolder1_ButtonFind');
searchButton.click();
}
});
});
}
}
function addSortCheckBox() {
let checkbox = document.querySelector('#sort');
if (!checkbox) {
getOption('sortCIM10', function (sortCIM10) {
// Ajoute une checkbox nommée "sort" à côté de '#ContentPlaceHolder1_CheckBoxUserPreferenceShowFavoriCIM10'
let checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.id = 'sort';
checkbox.title = 'Weda-Helper : permet de trier les ATCD par ordre alphabétique';
checkbox.checked = sortCIM10;
checkbox.style = 'margin-left: 10px;';
let label = document.createElement('label');
label.htmlFor = 'sort';
label.appendChild(document.createTextNode('Sort'));
label.title = 'Weda-Helper : permet de trier les ATCD par ordre alphabétique';
let parent = document.querySelector('#ContentPlaceHolder1_CheckBoxUserPreferenceShowFavoriCIM10').parentNode.parentNode;
parent.appendChild(checkbox);
parent.appendChild(label);
// Enregistre la valeur de la checkbox dans le local storage en cas de changement
checkbox.addEventListener('change', function () {
console.log('checkbox changed', checkbox.checked);
chrome.storage.local.set({ 'sortCIM10': checkbox.checked });
if (checkbox.checked) {
sortAtcd();
} else {
let searchButton = document.querySelector('#ContentPlaceHolder1_ButtonFind');
searchButton.click();
}
});
});
}
}
function removeSecondaryCIM10() {
getOption('trimCIM10', function (trimCIM10) {
if (!trimCIM10) {
return;
}
let atcdsToTrim = document.querySelectorAll('#ContentPlaceHolder1_ArbreCim10UCForm1_TreeViewCim10n1Nodes table');
atcdsToTrim.forEach(function (atcd) {
let elementContainingCIM10 = atcd.querySelector('table > tbody > tr > td > a > span:nth-child(3)');
if (elementContainingCIM10) {
let cim10 = elementContainingCIM10.innerText;
// On ne poursuit que si le CIM10 contient un point suivi de 2 chiffres ou plus
let regex = /\[\w+\.\d{2,}\]/;
if (regex.test(cim10)) {
// On vérifie qu'on supprime un élément présent sur la racine
// de l'arborecence CIM10 et non un élément déployé par l'utilisateur
let nombreIncrements = atcd.querySelectorAll('td').length;
if (nombreIncrements < 6) {
atcd.remove();
}
}
};
});
});
}
function sortAtcd() {
let atcds = document.querySelectorAll('#ContentPlaceHolder1_ArbreCim10UCForm1_TreeViewCim10n1Nodes table');
getOption('sortCIM10', function (sortCIM10) {
if (atcds.length > 0 && sortCIM10) {
// Supposons que atcds est une NodeList ou un tableau d'éléments DOM
// et que chaque atcd a un parent commun direct.
// 1. Sélectionner le parent (supposons que tous les atcds ont le même parent direct)
const parent = atcds[0].parentNode;
if (parent.dataset.sorted === 'true') {
return;
}
// 2. Convertir NodeList en Array si nécessaire
const atcdsArray = Array.from(atcds);
// 3. Trier le tableau d'éléments
atcdsArray.sort(function (a, b) {
let aText = a.querySelector('span:nth-child(2)').innerText;
let bText = b.querySelector('span:nth-child(2)').innerText;
return aText.localeCompare(bText);
});
// 4. Supprimer les éléments existants du DOM
atcdsArray.forEach(atcd => parent.removeChild(atcd));
// 5. Réinsérer les éléments triés
atcdsArray.forEach(atcd => parent.appendChild(atcd));
// 6. Ajouter un marqueur au parent pour indiquer que les éléments ont été triés
parent.dataset.sorted = 'true';
}
});
}
function shrinkFavText() {
let element = document.querySelector('[for="ContentPlaceHolder1_CheckBoxUserPreferenceShowFavoriCIM10"]');
element.innerText = 'Fav.';
}
addCheckBox();
addSortCheckBox();
shrinkFavText();
// Ajoute la checkbox à chaque fois que l'arbre CIM10 est mis à jour
let refractory = false;
afterMutations({delay: 30,callBackId: 'adding checkbox',preventMultiple: true,
callback: function() {
if (refractory) {
return;
}
if (!refractory) {
refractory = true;
shrinkFavText();
addCheckBox();
addSortCheckBox();
removeSecondaryCIM10();
sortAtcd();
setTimeout(function () {
refractory = false;
}, 30);
}
}
});
});