fix(nav): stop dual overflow folders fighting on insertBefore

Remove legacy initNavOverflow from enhancements.js (core/nav.js owns
zibll navFolding). Harden clearFolding against detached more nodes and
skip counting existing .aksrt-nav-more during fold measurement.
This commit is contained in:
kate522 committed 2026-07-22 19:27:44 +08:00
1 parent e508de9101
commit 584cb4e871
2 files changed
+43 -87

No files matched your search

+39 -10
View File
@@ -18,16 +18,42 @@
}
function clearFolding() {
var more = document.querySelector(".navbar-nav > li.aksrt-nav-more");
if (!more) return;
var sub = more.querySelector(".sub-menu");
var nav = more.parentNode;
if (sub && nav) {
while (sub.firstChild) {
nav.insertBefore(sub.firstChild, more);
// Support both zibll-style more and any legacy .aksrt-nav-more nodes.
var mores = document.querySelectorAll(".navbar-nav > li.aksrt-nav-more");
Array.prototype.forEach.call(mores, function (more) {
var nav = more.parentNode;
if (!nav) {
more.remove();
return;
}
}
more.remove();
// Prefer direct child .sub-menu (zibll contract); fall back to first matching submenu.
var sub = null;
for (var i = 0; i < more.children.length; i++) {
var child = more.children[i];
if (
child.tagName === "UL" &&
(child.classList.contains("sub-menu") ||
child.classList.contains("aksrt-nav-more__dropdown"))
) {
sub = child;
break;
}
}
if (!sub) {
sub = more.querySelector(".sub-menu, .aksrt-nav-more__dropdown");
}
if (sub) {
while (sub.firstChild) {
// Guard: only insertBefore when more is still a child of nav.
if (more.parentNode === nav) {
nav.insertBefore(sub.firstChild, more);
} else {
nav.appendChild(sub.firstChild);
}
}
}
more.remove();
});
}
function navFolding() {
@@ -53,6 +79,7 @@
var navsWidth = 66;
var foldItems = [];
Array.prototype.forEach.call(nav.children, function (li) {
if (li.classList.contains("aksrt-nav-more")) return;
navsWidth += li.offsetWidth || 0;
if (navsWidth > surplus) foldItems.push(li);
});
@@ -63,7 +90,9 @@
more.innerHTML =
'<a href="javascript:void(0);"><i class="fas fa-bars" aria-hidden="true"></i></a><ul class="sub-menu"></ul>';
var sub = more.querySelector(".sub-menu");
foldItems.forEach(function (li) { sub.appendChild(li); });
foldItems.forEach(function (li) {
if (li && li.parentNode) sub.appendChild(li);
});
nav.appendChild(more);
appendChevrons(more);
}