bulma_tabs_controller.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { Controller } from '@hotwired/stimulus';
  2. /*
  3. * Contrôleur Stimulus pour la gestion d’onglets.
  4. * Affiche le bloc correspondant à l’onglet cliqué et masque les autres.
  5. *
  6. * Les TABS sont présentées par une div avec une liste
  7. * <div class="tabs is-boxes" {{ stimulus_controller('bulma_tabs') }}>
  8. * <ul>
  9. * <li class="is-active" data-id="tab-1"><a>Tab 1</a></li>
  10. * <li data-id="tab-2"><a>Tab 2</a></li>
  11. * </ul>
  12. * </div>
  13. * <div id="tabs-content">
  14. * <div class="container" id="tab-1">
  15. * ---- CONTENU TAB 1 ----
  16. * </div>
  17. * <div class="container is-hidden" id="tab-2">
  18. * ---- CONTENU TAB 2 ----
  19. * </div>
  20. * </div>
  21. */
  22. export default class extends Controller {
  23. static targets = ['tab'];
  24. connect() {
  25. console.log("Stimulus: contrôleur d’onglets actif");
  26. this.tabs = this.element.querySelectorAll('[data-id]');
  27. this.containers = document.querySelectorAll('#tabs-content .container');
  28. this.tabs.forEach(tab => {
  29. tab.addEventListener('click', (event) => {
  30. event.preventDefault();
  31. this.activateTab(tab);
  32. });
  33. });
  34. }
  35. activateTab(selectedTab) {
  36. const targetId = selectedTab.dataset.id;
  37. // Mise à jour des onglets actifs
  38. this.tabs.forEach(tab => tab.classList.remove('is-active'));
  39. selectedTab.classList.add('is-active');
  40. // Affichage du bon bloc
  41. this.containers.forEach(container => {
  42. if (container.id === targetId) {
  43. container.classList.remove('is-hidden');
  44. } else {
  45. container.classList.add('is-hidden');
  46. }
  47. });
  48. }
  49. }