diff options
author | polo <ordipolo@gmx.fr> | 2025-04-27 23:58:46 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2025-04-27 23:58:46 +0200 |
commit | 962d315ec0c99974df3dc2261bf94c54ca8cdbdd (patch) | |
tree | 7463f74a722e759067daf8c3ef43202a60352759 /public/js/menu.js | |
parent | a3ba7dde60dc1c94b7170ec28266a966e5004d33 (diff) | |
download | cms-962d315ec0c99974df3dc2261bf94c54ca8cdbdd.zip |
page menu et chemins, partie3
Diffstat (limited to 'public/js/menu.js')
-rw-r--r-- | public/js/menu.js | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/public/js/menu.js b/public/js/menu.js new file mode 100644 index 0000000..a864597 --- /dev/null +++ b/public/js/menu.js | |||
@@ -0,0 +1,240 @@ | |||
1 | // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions | ||
2 | function moveOneLevelUp(page_id) | ||
3 | { | ||
4 | const nav_zone = document.getElementById("nav_zone"); // parent de <nav> | ||
5 | const menu_edit_buttons = document.getElementById("menu_edit_buttons"); // div englobant le html généré par MenuBuilder | ||
6 | |||
7 | fetch('index.php?menu_edit=move_one_level_up', { | ||
8 | method: 'POST', | ||
9 | headers: { | ||
10 | 'Content-Type': 'application/json' | ||
11 | }, | ||
12 | body: JSON.stringify({ id: page_id }) | ||
13 | }) | ||
14 | .then(response => response.json()) | ||
15 | .then(data => { | ||
16 | if(data.success) | ||
17 | { | ||
18 | console.log(data); | ||
19 | // affichage | ||
20 | nav_zone.innerHTML = ''; | ||
21 | nav_zone.insertAdjacentHTML('afterbegin', data.nav); | ||
22 | menu_edit_buttons.innerHTML = ''; | ||
23 | menu_edit_buttons.insertAdjacentHTML('afterbegin', data.menu_buttons); | ||
24 | } | ||
25 | else { | ||
26 | |||
27 | console.error('Échec du déplacement'); | ||
28 | } | ||
29 | }) | ||
30 | .catch(error => { | ||
31 | console.error('Erreur:', error); | ||
32 | }); | ||
33 | } | ||
34 | |||
35 | // flèche droite =>: position = nombre d'éléments de la fraterie + 1, l'élément précédent devient le parent | ||
36 | function moveOneLevelDown(page_id) | ||
37 | { | ||
38 | const nav_zone = document.getElementById("nav_zone"); // parent de <nav> | ||
39 | const menu_edit_buttons = document.getElementById("menu_edit_buttons"); // div englobant le html généré par MenuBuilder | ||
40 | |||
41 | fetch('index.php?menu_edit=move_one_level_down', { | ||
42 | method: 'POST', | ||
43 | headers: { | ||
44 | 'Content-Type': 'application/json' | ||
45 | }, | ||
46 | body: JSON.stringify({ id: page_id }) | ||
47 | }) | ||
48 | .then(response => response.json()) | ||
49 | .then(data => { | ||
50 | if(data.success) | ||
51 | { | ||
52 | console.log(data); | ||
53 | // affichage | ||
54 | nav_zone.innerHTML = ''; | ||
55 | nav_zone.insertAdjacentHTML('afterbegin', data.nav); | ||
56 | menu_edit_buttons.innerHTML = ''; | ||
57 | menu_edit_buttons.insertAdjacentHTML('afterbegin', data.menu_buttons); | ||
58 | } | ||
59 | else { | ||
60 | console.error('Échec du déplacement'); | ||
61 | } | ||
62 | }) | ||
63 | .catch(error => { | ||
64 | console.error('Erreur:', error); | ||
65 | }); | ||
66 | |||
67 | /*const element = document.getElementById(page_id); // div parente du bouton cliqué | ||
68 | let previous_element = element.previousElementSibling; | ||
69 | |||
70 | if(previous_element != null) | ||
71 | { | ||
72 | // si l'element précédent n'a pas de chemin relatif, donc est une URL, on vérifie le précédent également | ||
73 | if(previous_element.querySelector(".path") == null){ | ||
74 | let test_previous = previous_element; | ||
75 | while(test_previous.querySelector(".url") != null){ | ||
76 | console.log(test_previous); | ||
77 | //if() | ||
78 | test_previous = test_previous.previousElementSibling; | ||
79 | if(test_previous == null){ | ||
80 | console.log("pas d'élément précédent"); | ||
81 | return; | ||
82 | } | ||
83 | console.log(test_previous); | ||
84 | } | ||
85 | previous_element = test_previous; | ||
86 | } | ||
87 | |||
88 | fetch('index.php?menu_edit=move_one_level_down', { | ||
89 | method: 'POST', | ||
90 | headers: { | ||
91 | 'Content-Type': 'application/json' | ||
92 | }, | ||
93 | body: JSON.stringify({ id: element.id }) | ||
94 | }) | ||
95 | .then(response => response.json()) | ||
96 | .then(data => { | ||
97 | if(data.success) | ||
98 | { | ||
99 | // | ||
100 | |||
101 | // menu régénéré | ||
102 | nav_zone.innerHTML = ''; | ||
103 | nav_zone.insertAdjacentHTML('afterbegin', data.nav); | ||
104 | } | ||
105 | else { | ||
106 | |||
107 | console.error('Échec de l\'inversion'); | ||
108 | } | ||
109 | }) | ||
110 | .catch(error => { | ||
111 | console.error('Erreur:', error); | ||
112 | }); | ||
113 | |||
114 | // nouveau parent | ||
115 | let level_div = previous_element.querySelector(".level"); | ||
116 | if(level_div == null){ | ||
117 | // créer une <div class="level"> | ||
118 | level_div = document.createElement("div"); | ||
119 | level_div.classList.add("level"); | ||
120 | previous_element.appendChild(level_div); | ||
121 | } | ||
122 | |||
123 | // déplacement | ||
124 | level_div.appendChild(element); | ||
125 | |||
126 | // marges | ||
127 | let margin_left = parseInt(element.style.marginLeft); | ||
128 | margin_left += 29; | ||
129 | element.style.marginLeft = String(margin_left) + "px"; | ||
130 | |||
131 | // MAJ des chemins affichés si c'est un chemin relatif (les liens URL ne peuvent avoir d'enfants) | ||
132 | const element_path = element.querySelector(".path"); | ||
133 | if(element_path != null){ | ||
134 | const previous_element_path = previous_element.querySelector(".path"); | ||
135 | element_path.innerHTML = previous_element_path.innerHTML + "/" + element_path.innerHTML.split("/").slice(-1); | ||
136 | |||
137 | // même chose pour tous les enfants sauf les URL vers l'extérieur | ||
138 | if(element.querySelector(".level") != null){ | ||
139 | element.querySelector(".level").querySelectorAll(".path").forEach( (one_elem) => { | ||
140 | const parent_elem_path = one_elem.parentNode.parentNode.parentNode.querySelector(".path"); // => div de l'élém => div class level => div du parent | ||
141 | const end_of_path = one_elem.innerHTML.split("/").slice(-1); | ||
142 | one_elem.innerHTML = parent_elem_path.innerHTML + "/" + end_of_path[0]; | ||
143 | }); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | // dernier problème à corriger: le parent est une URL vers l'extérieur | ||
148 | } | ||
149 | else{ | ||
150 | // ne rien faire | ||
151 | console.log("pas d'élément précédent"); | ||
152 | }*/ | ||
153 | } | ||
154 | |||
155 | function switchMenuPositions(page_id, direction) | ||
156 | { | ||
157 | const nav_zone = document.getElementById("nav_zone"); // parent de <nav> | ||
158 | const clicked_menu_entry = document.getElementById(page_id); // div parente du bouton | ||
159 | let other_entry = null; | ||
160 | |||
161 | // pas bon | ||
162 | if(direction == 'down'){ | ||
163 | other_entry = clicked_menu_entry.nextElementSibling; | ||
164 | } | ||
165 | else if(direction == 'up'){ | ||
166 | other_entry = clicked_menu_entry.previousElementSibling; | ||
167 | } | ||
168 | |||
169 | if(other_entry == null){ | ||
170 | console.log('Inversion impossible'); | ||
171 | return; | ||
172 | } | ||
173 | |||
174 | fetch('index.php?menu_edit=switch_positions', { | ||
175 | method: 'POST', | ||
176 | headers: { | ||
177 | 'Content-Type': 'application/json' | ||
178 | }, | ||
179 | body: JSON.stringify({ id1: clicked_menu_entry.id, id2: other_entry.id }) | ||
180 | }) | ||
181 | .then(response => response.json()) | ||
182 | .then(data => { | ||
183 | if(data.success) | ||
184 | { | ||
185 | if(direction == 'down'){ | ||
186 | clicked_menu_entry.parentElement.insertBefore(other_entry, clicked_menu_entry); | ||
187 | } | ||
188 | else if(direction == 'up'){ | ||
189 | other_entry.parentElement.insertBefore(clicked_menu_entry, other_entry); | ||
190 | } | ||
191 | else{ | ||
192 | console.error('Échec de l\'inversion'); | ||
193 | } | ||
194 | |||
195 | // menu régénéré | ||
196 | nav_zone.innerHTML = ''; | ||
197 | nav_zone.insertAdjacentHTML('afterbegin', data.nav); | ||
198 | } | ||
199 | else { | ||
200 | |||
201 | console.error('Échec de l\'inversion'); | ||
202 | } | ||
203 | }) | ||
204 | .catch(error => { | ||
205 | console.error('Erreur:', error); | ||
206 | }); | ||
207 | } | ||
208 | |||
209 | function checkMenuEntry(page_id){ | ||
210 | const nav_zone = document.getElementById("nav_zone"); // parent de <nav> | ||
211 | const clicked_menu_entry = document.getElementById(page_id); // div parente du bouton | ||
212 | const checkbox = clicked_menu_entry.querySelector("input"); | ||
213 | let color; | ||
214 | |||
215 | fetch('index.php?menu_edit=displayInMenu', { | ||
216 | method: 'POST', | ||
217 | headers: { | ||
218 | 'Content-Type': 'application/json' | ||
219 | }, | ||
220 | body: JSON.stringify({ id: clicked_menu_entry.id, checked: checkbox.checked }) | ||
221 | }) | ||
222 | .then(response => response.json()) | ||
223 | .then(data => { | ||
224 | if(data.success) | ||
225 | { | ||
226 | color = checkbox.checked ? "#ff1d04" : "grey"; | ||
227 | clicked_menu_entry.querySelector("button").style.color = color; | ||
228 | |||
229 | nav_zone.innerHTML = ''; | ||
230 | nav_zone.insertAdjacentHTML('afterbegin', data.nav); | ||
231 | } | ||
232 | else { | ||
233 | |||
234 | console.error('Échec de l\'inversion'); | ||
235 | } | ||
236 | }) | ||
237 | .catch(error => { | ||
238 | console.error('Erreur:', error); | ||
239 | }); | ||
240 | } \ No newline at end of file | ||