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:
1 parent
e508de9101
commit
584cb4e871
2 files changed
+43
-87
No files matched your search
+39
-10
@@ -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);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user