bulma_modal_controller.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { Controller } from "@hotwired/stimulus"
  2. export default class extends Controller {
  3. connect() {
  4. this._closeListener = () => this.close()
  5. window.addEventListener('modal:close', this._closeListener)
  6. // Écoute tous les clics sur .open-modal
  7. document.querySelectorAll('.open-modal').forEach(element => {
  8. element.addEventListener('click', this.handleClick.bind(this))
  9. })
  10. }
  11. disconnect() {
  12. window.removeEventListener('modal:close', this._closeListener)
  13. // Nettoie les événements attachés
  14. document.querySelectorAll('.open-modal').forEach(element => {
  15. element.removeEventListener('click', this.handleClick.bind(this))
  16. })
  17. }
  18. handleClick(event) {
  19. event.preventDefault()
  20. const url = event.currentTarget.getAttribute('href') || event.currentTarget.dataset.url
  21. if (!url) return
  22. fetch(url, {
  23. headers: { "Turbo-Frame": "modal-content" }
  24. })
  25. .then(response => response.text())
  26. .then(html => {
  27. document.getElementById('modal-content').innerHTML = html
  28. document.getElementById('modal').classList.add('is-active')
  29. })
  30. }
  31. close() {
  32. document.getElementById('modal').classList.remove('is-active')
  33. document.getElementById('modal-content').innerHTML = ''
  34. }
  35. }