я косяк, поправил веб. Капитан, работайте!

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
влад
2026-07-16 11:06:47 +03:00
co-authored by Cursor
parent 148d645760
commit 2c294424ef
85 changed files with 17410 additions and 110 deletions
@@ -24,6 +24,8 @@
let activePreset = "day";
let panelEl = null;
let triggerEl = null;
let isOpen = false;
let suppressOutsideCloseUntil = 0;
function pad(n) {
return String(n).padStart(2, "0");
@@ -90,7 +92,7 @@
function setPresetActive(preset) {
activePreset = preset || "";
document.querySelectorAll("[data-drp-preset]").forEach((btn) => {
panelEl?.querySelectorAll("[data-drp-preset]").forEach((btn) => {
btn.classList.toggle("active", btn.getAttribute("data-drp-preset") === activePreset);
});
}
@@ -131,7 +133,7 @@
}
function positionPanel() {
if (!triggerEl || !panelEl || panelEl.hidden) return;
if (!triggerEl || !panelEl || !isOpen) return;
const rect = triggerEl.getBoundingClientRect();
const width = Math.max(rect.width, 304);
let left = rect.left;
@@ -149,28 +151,51 @@
}
function closePanel() {
if (panelEl) panelEl.hidden = true;
isOpen = false;
suppressOutsideCloseUntil = 0;
if (panelEl) {
panelEl.hidden = true;
panelEl.setAttribute("hidden", "");
panelEl.classList.remove("reports-drp__panel--open");
panelEl.style.left = "";
panelEl.style.top = "";
panelEl.style.width = "";
}
if (triggerEl) triggerEl.setAttribute("aria-expanded", "false");
window.removeEventListener("resize", positionPanel);
window.removeEventListener("scroll", positionPanel, true);
}
function isPanelTarget(target) {
if (!target || !panelEl || !triggerEl) return false;
return triggerEl.contains(target) || panelEl.contains(target);
}
function openPanel() {
const committed = readCommittedRange();
draftFrom = committed.from || today();
draftTo = committed.to || draftFrom;
viewMonth = new Date(draftFrom.getFullYear(), draftFrom.getMonth(), 1);
renderCalendar();
if (panelEl) panelEl.hidden = false;
global.WespReportsFilterDropdown?.closeAll?.();
global.WespReportsExport?.close?.();
isOpen = true;
suppressOutsideCloseUntil = Date.now() + 180;
if (panelEl) {
panelEl.removeAttribute("hidden");
panelEl.hidden = false;
panelEl.classList.add("reports-drp__panel--open");
}
if (triggerEl) triggerEl.setAttribute("aria-expanded", "true");
positionPanel();
requestAnimationFrame(() => positionPanel());
window.addEventListener("resize", positionPanel);
window.addEventListener("scroll", positionPanel, true);
}
function togglePanel() {
if (panelEl?.hidden) openPanel();
else closePanel();
if (isOpen) closePanel();
else openPanel();
}
function inRange(d, a, b) {
@@ -246,6 +271,8 @@
triggerEl = document.getElementById("reportsDateRangeTrigger");
panelEl = document.getElementById("reportsDateRangePanel");
if (!triggerEl || !panelEl) return;
if (triggerEl.dataset.drpWired === "1") return;
triggerEl.dataset.drpWired = "1";
if (panelEl.parentElement !== document.body) {
document.body.appendChild(panelEl);
@@ -254,7 +281,7 @@
panelEl.addEventListener("mousedown", (e) => e.stopPropagation());
panelEl.addEventListener("click", (e) => e.stopPropagation());
document.querySelectorAll("[data-drp-preset]").forEach((btn) => {
panelEl.querySelectorAll("[data-drp-preset]").forEach((btn) => {
btn.addEventListener("click", (e) => {
e.stopPropagation();
setPeriod(btn.getAttribute("data-drp-preset") || "day");
@@ -276,22 +303,36 @@
positionPanel();
});
triggerEl.addEventListener("click", (e) => {
e.stopPropagation();
togglePanel();
});
triggerEl.addEventListener(
"pointerdown",
(e) => {
if (e.button !== 0) return;
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
togglePanel();
},
true
);
document.addEventListener("click", () => {
if (!panelEl.hidden) closePanel();
});
document.addEventListener(
"pointerdown",
(e) => {
if (Date.now() < suppressOutsideCloseUntil) return;
if (!isOpen) return;
if (isPanelTarget(e.target)) return;
closePanel();
},
true
);
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") closePanel();
if (e.key === "Escape" && isOpen) closePanel();
});
const urlParams = new URLSearchParams(window.location.search);
const highlightReportId = urlParams.get("report");
if highlightReportId) {
if (highlightReportId) {
global.__wespHighlightReportId = highlightReportId;
setPeriod("month");
} else {
@@ -305,6 +346,7 @@
init,
setPeriod,
commit: commitDraft,
close: closePanel,
updateTriggerLabel,
formatLabel,
parseIso,