Widok Kalendarza płatności

This commit is contained in:
2026-02-19 01:07:23 +01:00
parent da4d77a808
commit 144aa81358
5 changed files with 593 additions and 28 deletions

View File

@@ -449,7 +449,7 @@
pop.className = 'comment-popover';
// Budowanie listy komentarzy
let html = '<div style="max-height: 200px; overflow-y: auto;">';
let html = '<div style="max-height: 600px; overflow-y: auto;">';
commentsList.forEach(data => {
// Escape (chociaż API to robi, warto mieć warstwę w JS w razie czego, ale API już robi htmlspecialchars)
@@ -496,12 +496,29 @@
});
});
// Obsługa interakcji (np. scrollbar)
pop.addEventListener('mousedown', () => {
pop._isInteracting = true;
});
// Obsługa zamykania przy wyjechaniu z popovera
pop.addEventListener('mouseleave', () => {
if (activePopover === pop) {
activePopover.remove();
activePopover = null;
}
pop._leaveTimeout = setTimeout(() => {
if (activePopover === pop) {
// Jeśli user trzyma przycisk myszy (np. na scrollbarze), nie zamykaj
if (pop._isInteracting) return;
if (!activePopover.matches(':hover') && !marker.matches(':hover')) {
activePopover.remove();
activePopover = null;
}
}
}, 500); // Zwiększono do 500ms
});
pop.addEventListener('mouseenter', () => {
if (pop._leaveTimeout) clearTimeout(pop._leaveTimeout);
if (marker._leaveTimeout) clearTimeout(marker._leaveTimeout);
});
// Pozycjonowanie
@@ -585,8 +602,11 @@
} else {
marker.style.display = 'none';
if (activePopover && activePopover._associatedMarker === marker) {
activePopover.remove();
activePopover = null;
// Jeśli element zniknął (np. scroll), ale user trzyma myszkę na popoverze - nie usuwaj
if (!activePopover.matches(':hover') && !activePopover._isInteracting) {
activePopover.remove();
activePopover = null;
}
}
}
} catch (e) { }
@@ -604,6 +624,26 @@
}
}
// Global mouseup do resetowania flagi interakcji
document.addEventListener('mouseup', () => {
if (activePopover) {
activePopover._isInteracting = false;
// Opcjonalnie: sprawdź czy zamknąć, jeśli myszka jest poza
if (activePopover && !activePopover.matches(':hover') && (!activePopover._associatedMarker || !activePopover._associatedMarker.matches(':hover'))) {
// Możemy wywołać logikę zamykania, ale ona jest w mouseleave.
// Jeśli user puścił myszkę POZA popoverem, mouseleave już dawno poszło (i timeout mógł zostać zablokowany przez flagę).
// Więc tutaj warto sprawdzić.
setTimeout(() => {
// Sprawdź ponownie (bezpiecznik)
if (activePopover && !activePopover._isInteracting && !activePopover.matches(':hover')) {
activePopover.remove();
activePopover = null;
}
}, 200);
}
}
});
// START
initUI();
loadComments();