MediaWiki:Script/Modal.js : Différence entre versions

Ligne 1 : Ligne 1 :
function createModalInteraction(content) {
+
const modalButtons = document.querySelectorAll(".modal-trigger");
    const boutonModal = content.querySelector(".button");
 
    const modalContent = content.querySelector(".modal");
 
    const boutonClose = content.querySelector(".close");
 
  
    const openModal = () => {
+
modalButtons.forEach((button) => {
        boutonModal.classList.add("tabber-active");
+
  const modalName = button.dataset.modal;
        modalContent.classList.add("gen-active");
+
  let modalContainer;
        window.addEventListener("click", handleClickOutside);
 
    };
 
  
    const closeModal = () => {
+
  if (modalName) {
        boutonModal.classList.remove("tabber-active");
+
    modalContainer = document.querySelector(
        modalContent.classList.remove("gen-active");
+
      `.modal[data-modal="${modalName}"]`
        window.removeEventListener("click", handleClickOutside);
+
    );
    };
+
  } else {
 +
    modalContainer = button.nextElementSibling;
 +
  }
  
    const handleClickOutside = (event) => {
+
  const closeButton = modalContainer.querySelector(".close-button");
        if (event.target === modalContent) {
+
  const autoClose = modalContainer.dataset.autoClose === "1";
            closeModal();
 
        }
 
    };
 
  
    boutonModal.addEventListener("click", openModal);
+
  button.addEventListener("click", openModal);
    boutonClose.addEventListener("click", closeModal);
+
  closeButton.addEventListener("click", closeModal);
}
 
  
(() => {
+
  if (autoClose) {
     const modalContainers = document.querySelectorAll("div#mw-content-text div.modalContainer");
+
    modalContainer.addEventListener("change", closeModal);
     modalContainers.forEach(createModalInteraction);
+
  }
})();
+
 
 +
  function openModal() {
 +
     button.classList.add("tabber-active");
 +
    modalContainer.classList.add("show-modal");
 +
    window.addEventListener("click", handleClickOutside);
 +
    window.addEventListener("keydown", handleEscape);
 +
  }
 +
 
 +
  function closeModal() {
 +
    button.classList.remove("tabber-active");
 +
    modalContainer.classList.remove("show-modal");
 +
    window.removeEventListener("click", handleClickOutside);
 +
    window.removeEventListener("keydown", handleEscape);
 +
  }
 +
 
 +
  function handleClickOutside(event) {
 +
     if (event.target === modalContainer) {
 +
      closeModal();
 +
    }
 +
  }
 +
 
 +
  function handleEscape(event) {
 +
    if (event.key === "Escape") {
 +
      closeModal();
 +
    }
 +
  }
 +
});

Version du 30 novembre 2024 à 23:12

const modalButtons = document.querySelectorAll(".modal-trigger");

modalButtons.forEach((button) => {
  const modalName = button.dataset.modal;
  let modalContainer;

  if (modalName) {
    modalContainer = document.querySelector(
      `.modal[data-modal="${modalName}"]`
    );
  } else {
    modalContainer = button.nextElementSibling;
  }

  const closeButton = modalContainer.querySelector(".close-button");
  const autoClose = modalContainer.dataset.autoClose === "1";

  button.addEventListener("click", openModal);
  closeButton.addEventListener("click", closeModal);

  if (autoClose) {
    modalContainer.addEventListener("change", closeModal);
  }

  function openModal() {
    button.classList.add("tabber-active");
    modalContainer.classList.add("show-modal");
    window.addEventListener("click", handleClickOutside);
    window.addEventListener("keydown", handleEscape);
  }

  function closeModal() {
    button.classList.remove("tabber-active");
    modalContainer.classList.remove("show-modal");
    window.removeEventListener("click", handleClickOutside);
    window.removeEventListener("keydown", handleEscape);
  }

  function handleClickOutside(event) {
    if (event.target === modalContainer) {
      closeModal();
    }
  }

  function handleEscape(event) {
    if (event.key === "Escape") {
      closeModal();
    }
  }
});