Widok Kalendarza płatności
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user