Files
ms1inscription-v5/js/ms1-doc.js
stephan 1d86258926 Refactor page visibility logic and update version code
This commit modifies the JavaScript to ensure that the 'hidden' class is removed when a page is displayed, improving the visibility handling of document pages. Additionally, the PHP code is updated to streamline the generation of page elements by adjusting the placement of the 'hidden' attribute. The version code is incremented to 4.72.666 to reflect these changes, enhancing the overall user experience in document navigation.
2026-06-18 10:50:44 -04:00

189 lines
5.6 KiB
JavaScript

/**
* MS1 — Module documentation overlay (navigation + ouverture/fermeture).
*/
(function () {
'use strict';
function findOverlayForTrigger(trigger) {
var anchor = trigger.getAttribute('data-doc-anchor');
if (!anchor) {
return null;
}
var overlays = document.querySelectorAll('.ms1-doc-overlay[data-doc-anchor="' + anchor + '"]');
return overlays.length ? overlays[0] : null;
}
function getMeta(overlay) {
var anchor = overlay.getAttribute('data-doc-anchor');
var script = document.querySelector('script.ms1-doc-meta[data-doc-anchor="' + anchor + '"]');
if (!script) {
return [];
}
try {
return JSON.parse(script.textContent || '[]');
} catch (e) {
return [];
}
}
function setPage(overlay, index) {
var pages = overlay.querySelectorAll('.ms1-doc-page');
var dots = overlay.querySelectorAll('.ms1-doc-dot');
var meta = getMeta(overlay);
var total = pages.length;
if (total === 0) {
return;
}
if (index < 0) {
index = 0;
}
if (index >= total) {
index = total - 1;
}
pages.forEach(function (page, i) {
if (i === index) {
page.removeAttribute('hidden');
page.classList.remove('hidden');
} else {
page.setAttribute('hidden', 'hidden');
}
});
dots.forEach(function (dot, i) {
if (i === index) {
dot.classList.add('is-active');
} else {
dot.classList.remove('is-active');
}
});
var titleEl = overlay.querySelector('.ms1-doc-title');
var subtitleEl = overlay.querySelector('.ms1-doc-subtitle');
var currentEl = overlay.querySelector('.ms1-doc-counter-current');
var prevBtn = overlay.querySelector('.ms1-doc-prev');
var nextBtn = overlay.querySelector('.ms1-doc-next');
if (meta[index]) {
if (titleEl) {
titleEl.textContent = meta[index].titre || '';
}
if (subtitleEl) {
subtitleEl.textContent = meta[index].sous_titre || '';
}
}
if (currentEl) {
currentEl.textContent = String(index + 1);
}
if (prevBtn) {
prevBtn.disabled = index <= 0;
}
if (nextBtn) {
nextBtn.disabled = index >= total - 1;
}
overlay.setAttribute('data-doc-current-index', String(index));
}
function openOverlay(overlay) {
overlay.removeAttribute('hidden');
document.body.classList.add('ms1-doc-open');
var idx = parseInt(overlay.getAttribute('data-doc-current-index') || '0', 10);
setPage(overlay, idx);
}
function closeOverlay(overlay) {
overlay.setAttribute('hidden', 'hidden');
if (!document.querySelector('.ms1-doc-overlay:not([hidden])')) {
document.body.classList.remove('ms1-doc-open');
}
}
function getCurrentIndex(overlay) {
return parseInt(overlay.getAttribute('data-doc-current-index') || '0', 10);
}
function openDocEditPopup(url) {
var w = window.open(
url,
'ms1DocEdit' + Date.now(),
'width=1120,height=820,scrollbars=yes,resizable=yes'
);
if (w) {
var timer = setInterval(function () {
if (w.closed) {
clearInterval(timer);
window.location.reload();
}
}, 400);
}
}
document.addEventListener('click', function (e) {
var docEditLink = e.target.closest('a.ms1-doc-edit-link');
if (docEditLink && docEditLink.href) {
e.preventDefault();
e.stopPropagation();
openDocEditPopup(docEditLink.href);
return;
}
var trigger = e.target.closest('.ms1-doc-trigger, .btn-doc-trigger');
if (trigger) {
e.preventDefault();
var overlay = findOverlayForTrigger(trigger);
if (overlay) {
openOverlay(overlay);
}
return;
}
var closeEl = e.target.closest('[data-ms1-doc-close]');
if (closeEl) {
var overlayClose = closeEl.closest('.ms1-doc-overlay');
if (overlayClose) {
closeOverlay(overlayClose);
}
return;
}
var dot = e.target.closest('.ms1-doc-dot');
if (dot) {
var overlayDot = dot.closest('.ms1-doc-overlay');
if (overlayDot) {
setPage(overlayDot, parseInt(dot.getAttribute('data-doc-page-index') || '0', 10));
}
return;
}
if (e.target.closest('[data-ms1-doc-prev]')) {
var overlayPrev = e.target.closest('.ms1-doc-overlay');
if (overlayPrev) {
setPage(overlayPrev, getCurrentIndex(overlayPrev) - 1);
}
return;
}
if (e.target.closest('[data-ms1-doc-next]')) {
var overlayNext = e.target.closest('.ms1-doc-overlay');
if (overlayNext) {
setPage(overlayNext, getCurrentIndex(overlayNext) + 1);
}
}
});
document.addEventListener('keydown', function (e) {
if (e.key !== 'Escape') {
return;
}
var open = document.querySelector('.ms1-doc-overlay:not([hidden])');
if (open) {
closeOverlay(open);
}
});
})();