From e381230ad956f7f6fc1c5f28bbd320ec88a79026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Thu, 12 Feb 2026 16:04:34 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D1=81=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BF=D0=BE=D0=BA=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B5=D0=BB=D0=B0=20=D0=BF=D1=80=D0=B8=20drag=20&?= =?UTF-8?q?=20drop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Для папок события dragover/drop навешиваются только на header - Дочерние календари больше не вызывают срабатывание на родительской папке - Папка отдела подсвечивается только при наведении на её header - Календари внутри папки работают независимо --- .../js/components/calendarEventDragDrop.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/backend/static/js/components/calendarEventDragDrop.js b/backend/static/js/components/calendarEventDragDrop.js index a4c6e5d2..9228aebf 100644 --- a/backend/static/js/components/calendarEventDragDrop.js +++ b/backend/static/js/components/calendarEventDragDrop.js @@ -405,6 +405,13 @@ export function initCalendarEventDragDrop(options = {}) { const badge = element.querySelector(".badge.bg-secondary-subtle.text-secondary, .badge.bg-info-subtle.text-info"); if (!badge) return; + // Определяем, является ли это папкой + const isFolder = element.classList.contains("calendar-folder"); + // Для папок используем только header для drop zone + const dropTarget = isFolder ? element.querySelector(".calendar-folder-header") : element; + + if (!dropTarget) return; + badge.setAttribute("draggable", "true"); badge.style.cursor = "grab"; badge.title = "Перетащите для перемещения событий"; @@ -423,7 +430,7 @@ export function initCalendarEventDragDrop(options = {}) { }); }); - element.addEventListener("dragover", (e) => { + dropTarget.addEventListener("dragover", (e) => { const targetId = element.dataset.calendarId || element.dataset.folderId; const sourceId = e.dataTransfer.getData("text/plain"); if (targetId === sourceId) return; @@ -431,16 +438,18 @@ export function initCalendarEventDragDrop(options = {}) { e.preventDefault(); e.stopPropagation(); e.dataTransfer.dropEffect = "move"; + + // Подсвечиваем весь элемент (папку или календарь) element.classList.add("drop-target-active"); }); - element.addEventListener("dragleave", (e) => { - if (!element.contains(e.relatedTarget)) { + dropTarget.addEventListener("dragleave", (e) => { + if (!dropTarget.contains(e.relatedTarget)) { element.classList.remove("drop-target-active"); } }); - element.addEventListener("drop", (e) => { + dropTarget.addEventListener("drop", (e) => { e.preventDefault(); e.stopPropagation(); element.classList.remove("drop-target-active");