projects.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // JS spécifique à la page /projects
  2. // duplicateMap stub
  3. function duplicateMap(mapId) {
  4. if (confirm('Voulez-vous créer une copie de cette carte ?')) {
  5. // TODO: Implémenter la duplication via AJAX
  6. alert('Fonction de duplication à implémenter');
  7. }
  8. }
  9. // deleteMap : soumet le form de suppression (progressive enhancement)
  10. function deleteMap(mapId, mapName) {
  11. var deleteModalEl = document.getElementById('deleteModal');
  12. // Si le modal n'existe pas, fallback : confirmation native puis soumission POST
  13. if (!deleteModalEl) {
  14. var label = mapName || '';
  15. if (!confirm('Êtes-vous sûr de vouloir supprimer "' + label + '" ?')) return;
  16. var form = document.getElementById('delete-form-' + mapId);
  17. if (form) {
  18. form.submit();
  19. return;
  20. }
  21. // Créer dynamiquement un form POST et le soumettre
  22. var tmpForm = document.createElement('form');
  23. tmpForm.method = 'POST';
  24. tmpForm.action = '/projects/delete';
  25. tmpForm.style.display = 'none';
  26. var input = document.createElement('input');
  27. input.type = 'hidden';
  28. input.name = 'id';
  29. input.value = mapId;
  30. tmpForm.appendChild(input);
  31. document.body.appendChild(tmpForm);
  32. tmpForm.submit();
  33. return;
  34. }
  35. try {
  36. document.getElementById('deleteMapName').textContent = mapName;
  37. document.getElementById('confirmDeleteBtn').onclick = function() {
  38. var form = document.getElementById('delete-form-' + mapId);
  39. if (form) {
  40. try { deleteModalEl.querySelector('[data-bs-dismiss="modal"]').click(); } catch (e) {}
  41. form.submit();
  42. } else {
  43. // Fallback : créer dynamiquement un form POST et le soumettre
  44. var tmpForm = document.createElement('form');
  45. tmpForm.method = 'POST';
  46. tmpForm.action = '/projects/delete';
  47. tmpForm.style.display = 'none';
  48. var input = document.createElement('input');
  49. input.type = 'hidden';
  50. input.name = 'id';
  51. input.value = mapId;
  52. tmpForm.appendChild(input);
  53. document.body.appendChild(tmpForm);
  54. try { deleteModalEl.querySelector('[data-bs-dismiss="modal"]').click(); } catch (e) {}
  55. tmpForm.submit();
  56. }
  57. };
  58. var modal = new bootstrap.Modal(deleteModalEl);
  59. modal.show();
  60. } catch (err) {
  61. // Si une erreur survient (ex: bootstrap non défini), retomber sur la confirmation native
  62. console.error('[projects.js] Erreur lors de l\'ouverture du modal de suppression, fallback confirm', err);
  63. var label = mapName || '';
  64. if (!confirm('Êtes-vous sûr de vouloir supprimer "' + label + '" ?')) return;
  65. var form = document.getElementById('delete-form-' + mapId);
  66. if (form) {
  67. form.submit();
  68. return;
  69. }
  70. // Créer dynamiquement un form POST et le soumettre
  71. var tmpForm = document.createElement('form');
  72. tmpForm.method = 'POST';
  73. tmpForm.action = '/projects/delete';
  74. tmpForm.style.display = 'none';
  75. var input = document.createElement('input');
  76. input.type = 'hidden';
  77. input.name = 'id';
  78. input.value = mapId;
  79. tmpForm.appendChild(input);
  80. document.body.appendChild(tmpForm);
  81. tmpForm.submit();
  82. }
  83. }
  84. // Expose functions in window scope (au cas où)
  85. window.duplicateMap = window.duplicateMap || duplicateMap;
  86. window.deleteMap = window.deleteMap || deleteMap;