bulma_modal_controller.js 1.6 KB

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