Выпадающее меню больше не закрывается от любого движения мыши
Между кнопкой и списком был зазор, из-за которого hover срабатывал как выход из группы. Убрал зазор и добавил задержку закрытия 150 мс с отменой при возврате курсора — перейти в пункты меню теперь можно спокойно.
This commit is contained in:
parent
73e83e2413
commit
0206ab5212
|
|
@ -171,7 +171,7 @@ make backup E=test # на домашнем сервере: ./scripts/clickho
|
||||||
|
|
||||||
## Версионирование
|
## Версионирование
|
||||||
|
|
||||||
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.6.4`.
|
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.6.5`.
|
||||||
- Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`).
|
- Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`).
|
||||||
- Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3).
|
- Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3).
|
||||||
- Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`.
|
- Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`.
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
Сообщения <span class="text-xs">▾</span>
|
Сообщения <span class="text-xs">▾</span>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div
|
||||||
class="mt-1 hidden flex-col gap-1 rounded-lg border border-slate-200 bg-white p-2 sm:absolute sm:left-0 sm:top-full sm:z-20 sm:mt-1 sm:min-w-48 sm:shadow-lg"
|
class="hidden flex-col gap-1 rounded-lg border border-slate-200 bg-white p-2 sm:absolute sm:left-0 sm:top-full sm:z-20 sm:min-w-48 sm:shadow-lg"
|
||||||
data-group-dropdown
|
data-group-dropdown
|
||||||
>
|
>
|
||||||
<a href="/sequences" class="rounded px-3 py-1.5 text-slate-600 hover:bg-slate-100 hover:text-slate-900">Шаблоны</a>
|
<a href="/sequences" class="rounded px-3 py-1.5 text-slate-600 hover:bg-slate-100 hover:text-slate-900">Шаблоны</a>
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
Пользователи <span class="text-xs">▾</span>
|
Пользователи <span class="text-xs">▾</span>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div
|
||||||
class="mt-1 hidden flex-col gap-1 rounded-lg border border-slate-200 bg-white p-2 sm:absolute sm:left-0 sm:top-full sm:z-20 sm:mt-1 sm:min-w-48 sm:shadow-lg"
|
class="hidden flex-col gap-1 rounded-lg border border-slate-200 bg-white p-2 sm:absolute sm:left-0 sm:top-full sm:z-20 sm:min-w-48 sm:shadow-lg"
|
||||||
data-group-dropdown
|
data-group-dropdown
|
||||||
>
|
>
|
||||||
<a href="/users" class="rounded px-3 py-1.5 text-slate-600 hover:bg-slate-100 hover:text-slate-900">Список</a>
|
<a href="/users" class="rounded px-3 py-1.5 text-slate-600 hover:bg-slate-100 hover:text-slate-900">Список</a>
|
||||||
|
|
@ -103,6 +103,8 @@
|
||||||
var dropdown = group.querySelector("[data-group-dropdown]");
|
var dropdown = group.querySelector("[data-group-dropdown]");
|
||||||
if (!toggle || !dropdown) return;
|
if (!toggle || !dropdown) return;
|
||||||
|
|
||||||
|
var closeTimer = null;
|
||||||
|
|
||||||
function setOpen(open) {
|
function setOpen(open) {
|
||||||
dropdown.classList.toggle("hidden", !open);
|
dropdown.classList.toggle("hidden", !open);
|
||||||
toggle.setAttribute("aria-expanded", String(open));
|
toggle.setAttribute("aria-expanded", String(open));
|
||||||
|
|
@ -110,12 +112,19 @@
|
||||||
|
|
||||||
toggle.addEventListener("click", function (event) {
|
toggle.addEventListener("click", function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
if (closeTimer) clearTimeout(closeTimer);
|
||||||
setOpen(dropdown.classList.contains("hidden"));
|
setOpen(dropdown.classList.contains("hidden"));
|
||||||
});
|
});
|
||||||
|
|
||||||
if (window.matchMedia("(min-width: 640px)").matches) {
|
if (window.matchMedia("(min-width: 640px)").matches) {
|
||||||
group.addEventListener("mouseenter", function () { setOpen(true); });
|
group.addEventListener("mouseenter", function () {
|
||||||
group.addEventListener("mouseleave", function () { setOpen(false); });
|
if (closeTimer) clearTimeout(closeTimer);
|
||||||
|
setOpen(true);
|
||||||
|
});
|
||||||
|
group.addEventListener("mouseleave", function () {
|
||||||
|
if (closeTimer) clearTimeout(closeTimer);
|
||||||
|
closeTimer = setTimeout(function () { setOpen(false); }, 150);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,4 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__version__ = "0.6.4"
|
__version__ = "0.6.5"
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,4 @@ from common import __version__
|
||||||
|
|
||||||
def test_version_is_set():
|
def test_version_is_set():
|
||||||
assert __version__
|
assert __version__
|
||||||
assert __version__ == "0.6.4"
|
assert __version__ == "0.6.5"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue