Optimized sidebar collapsed state / active nav handling

This commit is contained in:
Bernd Bestel 2023-05-19 21:14:57 +02:00
parent ecb9f53bb4
commit 6ab5bc3a29
No known key found for this signature in database
GPG Key ID: 71BD34C0D4891300
2 changed files with 44 additions and 57 deletions

View File

@ -282,63 +282,6 @@ __n = function(number, singularForm, pluralForm, isQu = false)
}
}
if (Grocy.ActiveNav)
{
var menuItem = $('#sidebarResponsive').find("[data-nav-for-page='" + Grocy.ActiveNav + "']");
menuItem.addClass('active-page');
if (menuItem.length)
{
var parentMenuSelector = menuItem.data("sub-menu-of");
if (typeof parentMenuSelector !== "undefined")
{
$(parentMenuSelector).collapse("show");
$(parentMenuSelector).prev(".nav-link-collapse").addClass("active-page");
$(parentMenuSelector).on("shown.bs.collapse", function(e)
{
if (!menuItem.isVisibleInViewport(75))
{
menuItem[0].scrollIntoView();
}
})
}
else
{
if (!menuItem.isVisibleInViewport(75))
{
menuItem[0].scrollIntoView();
}
}
}
}
var observer = new MutationObserver(function(mutations)
{
mutations.forEach(function(mutation)
{
if (mutation.attributeName === "class")
{
var attributeValue = $(mutation.target).prop(mutation.attributeName);
if (attributeValue.contains("sidenav-toggled"))
{
window.localStorage.setItem("sidebar_state", "collapsed");
}
else
{
window.localStorage.setItem("sidebar_state", "expanded");
}
}
});
});
observer.observe(document.body, {
attributes: true
});
if (window.localStorage.getItem("sidebar_state") === "collapsed")
{
$("#sidenavToggler").click();
}
RefreshContextualTimeago = function(rootSelector = "#page-content")
{
$(rootSelector + " time.timeago").each(function()

View File

@ -8,12 +8,56 @@ $("#sidenavToggler").click(function(e)
$("body").toggleClass("sidenav-toggled");
$(".navbar-sidenav .nav-link-collapse").addClass("collapsed");
$(".navbar-sidenav .sidenav-second-level, .navbar-sidenav .sidenav-third-level").removeClass("show");
if ($("body").hasClass("sidenav-toggled"))
{
window.localStorage.setItem("sidebar_state", "collapsed");
}
else
{
window.localStorage.setItem("sidebar_state", "expanded");
}
});
$(".navbar-sidenav .nav-link-collapse").click(function(e)
{
e.preventDefault();
$("body").removeClass("sidenav-toggled");
window.localStorage.setItem("sidebar_state", "expanded");
});
if (window.localStorage.getItem("sidebar_state") === "collapsed")
{
$("#sidenavToggler").click();
}
if (Grocy.ActiveNav)
{
var menuItem = $('#sidebarResponsive').find("[data-nav-for-page='" + Grocy.ActiveNav + "']");
if (menuItem)
{
menuItem.addClass('active-page');
var parentMenuSelector = menuItem.data("sub-menu-of");
if (parentMenuSelector)
{
$(parentMenuSelector).collapse("show");
$(parentMenuSelector).prev(".nav-link-collapse").addClass("active-page");
$(parentMenuSelector).on("shown.bs.collapse", function(e)
{
if (!menuItem.isVisibleInViewport(75))
{
menuItem[0].scrollIntoView();
}
})
}
else
{
if (!menuItem.isVisibleInViewport(75))
{
menuItem[0].scrollIntoView();
}
}
}
}