/** * @property {HTMLElement} lightBox **/ export default class LightboxSingle { constructor(picture) { this.lightBox = this.buildDomLightBox(picture.getAttribute('src')); this.onKeyUp = this.onKeyUp.bind(this); document.body.appendChild(this.lightBox); this.lightBox.classList.remove('lightbox--inactive'); this.lightBox.setAttribute('aria-hidden', 'false'); this.lightBox.classList.add('lightbox--active'); document.addEventListener('keyup', this.onKeyUp); this.lightboxCloseButton = this.lightBox.querySelector('.lightbox__close'); this.lightboxCloseButton.focus(); } static init() { const lightboxLinks = document.querySelectorAll('.singleLightbox-link'); if (!lightboxLinks) return; lightboxLinks.forEach((link) => { link.addEventListener('click', (e) => { e.preventDefault(); const picture = link.querySelector('img'); if (!picture) return; new LightboxSingle(picture); }); }); } /** * Ferme la lightbox * @param {MouseEvent} e */ close(e) { e.preventDefault(); this.lightBox.classList.add('fade-out'); window.setTimeout(() => { this.lightBox.classList.remove('fade-out'); this.lightBox.classList.remove('lightbox--active'); this.lightBox.classList.add('lightbox--inactive'); this.lightBox.setAttribute('aria-hidden', 'true'); this.lightBox.querySelector('.lightbox__container').remove(); }, 500); document.removeEventListener('keyup', this.onKeyUp); } /** * Ferme la lightbox * @param {KeyboardEvent} e */ onKeyUp(e) { if (e.key === 'Escape') { this.close(e); } } buildDomLightBox(pictureSrc) { const lightBoxDomElement = document.createElement('div'); lightBoxDomElement.classList.add('lightbox', 'lightbox--inactive'); lightBoxDomElement.setAttribute('aria-hidden', 'true'); lightBoxDomElement.innerHTML = `