summaryrefslogtreecommitdiff
path: root/public/js/menu.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/menu.js')
-rw-r--r--public/js/menu.js240
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
2function 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
36function 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
155function 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
209function 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