123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { Controller } from "@hotwired/stimulus"
- export default class extends Controller {
- connect() {
- this._closeListener = () => this.close()
- this._escapeListener = (event) => {
- if (event.key === 'Escape') {
- this.close()
- }
- }
- window.addEventListener('modal:close', this._closeListener)
- document.addEventListener('keydown', this._escapeListener)
- // Écoute tous les clics sur .open-modal
- document.querySelectorAll('.open-modal').forEach(element => {
- element.addEventListener('click', this.handleClick.bind(this))
- })
- }
- disconnect() {
- window.removeEventListener('modal:close', this._closeListener)
- document.removeEventListener('keydown', this._escapeListener)
- // Nettoie les événements attachés
- document.querySelectorAll('.open-modal').forEach(element => {
- element.removeEventListener('click', this.handleClick.bind(this))
- })
- }
- handleClick(event) {
- event.preventDefault()
- const url = event.currentTarget.getAttribute('href') || event.currentTarget.dataset.url
- if (!url) return
- fetch(url, {
- headers: { "Turbo-Frame": "modal-content" }
- })
- .then(response => response.text())
- .then(html => {
- document.getElementById('modal-content').innerHTML = html
- document.getElementById('modal').classList.add('is-active')
- })
- }
- close() {
- document.getElementById('modal').classList.remove('is-active')
- document.getElementById('modal-content').innerHTML = ''
- }
- }
|