diff options
Diffstat (limited to 'public/js/calendar_admin.js')
-rw-r--r-- | public/js/calendar_admin.js | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/public/js/calendar_admin.js b/public/js/calendar_admin.js index 253d127..8fe91a3 100644 --- a/public/js/calendar_admin.js +++ b/public/js/calendar_admin.js | |||
@@ -1,10 +1,12 @@ | |||
1 | document.addEventListener('DOMContentLoaded', function(){ | 1 | document.addEventListener('DOMContentLoaded', function(){ |
2 | const calendarEl = document.getElementById('calendar'); | 2 | const calendarEl = document.getElementById('calendar'); |
3 | let selected_start_string = null; | 3 | let selected_start_string = null; |
4 | let event_selected = false; // pour event.remove() | ||
4 | 5 | ||
5 | const calendar = new FullCalendar.Calendar(calendarEl,{ | 6 | const calendar = new FullCalendar.Calendar(calendarEl,{ |
6 | editable: true, | 7 | editable: true, |
7 | locale: 'fr', | 8 | locale: 'fr', |
9 | //timeZone: 'local', // à modifier pour être à l'heure d'un autre pays | ||
8 | initialView: 'dayGridMonth', | 10 | initialView: 'dayGridMonth', |
9 | headerToolbar:{ | 11 | headerToolbar:{ |
10 | left: 'prev,next today', | 12 | left: 'prev,next today', |
@@ -32,9 +34,12 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
32 | slotEventOverlap: true, // superposition (limitée) de deux évènements simultanés | 34 | slotEventOverlap: true, // superposition (limitée) de deux évènements simultanés |
33 | allDayContent: 'Journée', // texte dans la case "toute la journée" | 35 | allDayContent: 'Journée', // texte dans la case "toute la journée" |
34 | nowIndicator: true, // barre rouge pour maintenant | 36 | nowIndicator: true, // barre rouge pour maintenant |
37 | |||
38 | events: '../src/load-events.php', // fichier PHP qui retourne les événements | ||
35 | 39 | ||
36 | select: function(info){ | 40 | select: function(info){ |
37 | selected_start_string = info.startStr; // variable "globale" | 41 | selected_start_string = info.startStr; // variable "globale" |
42 | event_selected = false; | ||
38 | const aside = document.querySelector('aside'); | 43 | const aside = document.querySelector('aside'); |
39 | let checked = ''; | 44 | let checked = ''; |
40 | let input = 'datetime-local'; | 45 | let input = 'datetime-local'; |
@@ -107,6 +112,7 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
107 | }, | 112 | }, |
108 | //unselect: function(event, view){}, | 113 | //unselect: function(event, view){}, |
109 | eventClick: function(info){ | 114 | eventClick: function(info){ |
115 | event_selected = true; // variable "globale" | ||
110 | const aside = document.querySelector('aside'); | 116 | const aside = document.querySelector('aside'); |
111 | const checked = info.event.allDay ? 'checked' : ''; | 117 | const checked = info.event.allDay ? 'checked' : ''; |
112 | const input = info.event.allDay ? 'date' : 'datetime-local'; | 118 | const input = info.event.allDay ? 'date' : 'datetime-local'; |
@@ -116,13 +122,13 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
116 | return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0') | 122 | return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0') |
117 | + (info.event.allDay ? '' : 'T' + date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0')); | 123 | + (info.event.allDay ? '' : 'T' + date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0')); |
118 | } | 124 | } |
119 | function getEndMinusOneDay(date){ | 125 | function minusOneDay(date){ |
120 | date.setDate(date.getDate() - 1); // jour de fin modifié pour ne pas faire bizarre pour l'utilisateur | 126 | date.setDate(date.getDate() - 1); // jour de fin modifié pour ne pas faire bizarre pour l'utilisateur |
121 | return date; | 127 | return date; |
122 | } | 128 | } |
123 | 129 | ||
124 | const formated_start = formatDate(info.event.start); | 130 | const formated_start = formatDate(info.event.start); |
125 | const formated_end = formatDate(info.event.allDay ? getEndMinusOneDay(info.event.end) : info.event.end, info.event.allDay); | 131 | const formated_end = formatDate(info.event.allDay ? minusOneDay(info.event.end) : info.event.end, info.event.allDay); |
126 | 132 | ||
127 | const aside_content = `<div class="form_event"> | 133 | const aside_content = `<div class="form_event"> |
128 | <div class="event_title_box"> | 134 | <div class="event_title_box"> |
@@ -155,6 +161,7 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
155 | </div> | 161 | </div> |
156 | <button class="submit_update_event">Modifier</button> | 162 | <button class="submit_update_event">Modifier</button> |
157 | <button class="event_close_button">Annuler</button> | 163 | <button class="event_close_button">Annuler</button> |
164 | <button class="delete_event">Supprimer</button> | ||
158 | </div>`; | 165 | </div>`; |
159 | aside.innerHTML = aside_content; | 166 | aside.innerHTML = aside_content; |
160 | calendar.updateSize(); | 167 | calendar.updateSize(); |
@@ -165,11 +172,11 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
165 | } | 172 | } |
166 | }, | 173 | }, |
167 | //datesSet: function(info){}, // déclenché lorsque des dates affichées sont chargées (= comme viewDidMount + changement de date) | 174 | //datesSet: function(info){}, // déclenché lorsque des dates affichées sont chargées (= comme viewDidMount + changement de date) |
168 | events: '../src/load-events.php' // fichier PHP qui retourne les événements | ||
169 | }); | 175 | }); |
170 | 176 | ||
171 | function hideModal(){ | 177 | function hideModal(){ |
172 | const aside = document.querySelector('aside'); | 178 | const aside = document.querySelector('aside'); |
179 | event_selected = false; | ||
173 | aside.innerHTML = ''; | 180 | aside.innerHTML = ''; |
174 | calendar.updateSize(); | 181 | calendar.updateSize(); |
175 | } | 182 | } |
@@ -304,13 +311,44 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
304 | event_end_input.value = end + 'T11:00'; | 311 | event_end_input.value = end + 'T11:00'; |
305 | } | 312 | } |
306 | } | 313 | } |
314 | function removeEvent(){ | ||
315 | if(!confirm("Voulez-vous vraiment supprimer cet évènement du calendrier?")){ | ||
316 | return; | ||
317 | } | ||
318 | const event_id = document.getElementById('event_id').value; | ||
319 | const event = calendar.getEventById(event_id); | ||
320 | |||
321 | fetch('../src/post-ajax.php', { | ||
322 | method: 'POST', | ||
323 | headers: { | ||
324 | 'Content-Type': 'application/json', | ||
325 | }, | ||
326 | body: JSON.stringify(event_id), | ||
327 | }) | ||
328 | .then(response => response.json()) | ||
329 | .then(data => { | ||
330 | if(data.success){ | ||
331 | event.remove(); | ||
332 | hideModal(); | ||
333 | } | ||
334 | }) | ||
335 | .catch((error) => { | ||
336 | console.error('Error:', error); | ||
337 | }); | ||
338 | event_selected = false; | ||
339 | } | ||
307 | 340 | ||
341 | // touches de clavier | ||
308 | document.addEventListener('keydown', function(event){ | 342 | document.addEventListener('keydown', function(event){ |
309 | if(event.key === 'Escape') { | 343 | if(event.key === 'Escape'){ |
310 | hideModal(); | 344 | hideModal(); |
311 | } | 345 | } |
346 | else if(event.key === 'Delete' && event_selected === true){ | ||
347 | removeEvent(); | ||
348 | } | ||
312 | }); | 349 | }); |
313 | 350 | ||
351 | // boutons dans la "modale" | ||
314 | // technique de la délégation d'événements pour utiliser un bouton ajouté dynamiquement | 352 | // technique de la délégation d'événements pour utiliser un bouton ajouté dynamiquement |
315 | document.addEventListener('click', function(event){ | 353 | document.addEventListener('click', function(event){ |
316 | if(event.target.classList.contains('event_close_button')){ | 354 | if(event.target.classList.contains('event_close_button')){ |
@@ -325,6 +363,9 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
325 | else if(event.target.classList.contains('submit_update_event')){ | 363 | else if(event.target.classList.contains('submit_update_event')){ |
326 | submitEvent(false); | 364 | submitEvent(false); |
327 | } | 365 | } |
366 | else if(event.target.classList.contains('delete_event')){ | ||
367 | removeEvent(); | ||
368 | } | ||
328 | }); | 369 | }); |
329 | 370 | ||
330 | calendar.render(); | 371 | calendar.render(); |