* initial changes * redesign the sidebar + nav drawer * changes to sidebar items * finish up sidebar redesign * support new sidebar in resources * general fixes * integrate in ui * support api reference * refactor * integrate in user guide * docs: fix build errors * fix user guide build * more refactoring * added banner * added bottom logo + icon * fix up sidebar * fix up paddings * fix shadow bottom * docs: add table of content (#8445) * add toc types * implement toc functionality * finished toc redesign * redesigned table of content * mobile fixes * truncate text in toc * mobile fixes * merge fixes * implement redesign * add hide sidebar * add menu action item * finish up hide sidebar design * implement redesign in resources * integrate in api reference * integrate changes in ui * fixes to api reference scrolling * fix build error * fix build errors * fixes * fixes to sidebar * general fixes * fix active category not closing * fix long titles
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
export function checkSidebarItemVisibility(
|
|
item: HTMLElement,
|
|
withTransition = false,
|
|
topMargin = 0
|
|
) {
|
|
return withTransition
|
|
? checkSidebarItemVisibilityTransition(item, topMargin)
|
|
: checkSidebarItemVisibilityRelative(item, topMargin)
|
|
}
|
|
|
|
function checkSidebarItemVisibilityRelative(
|
|
item: HTMLElement,
|
|
topMargin: number
|
|
) {
|
|
const sidebar = document.getElementById("sidebar")
|
|
if (!sidebar) {
|
|
return false
|
|
}
|
|
const sidebarBoundingRect = sidebar.getBoundingClientRect()
|
|
const sidebarTop = sidebarBoundingRect.top - topMargin
|
|
const sidebarBottom = sidebarTop + sidebarBoundingRect.height
|
|
const itemBoundingRect = item.getBoundingClientRect()
|
|
const itemTop =
|
|
item.offsetParent === sidebar ? item.offsetTop : itemBoundingRect.top
|
|
const itemBottom = itemTop + itemBoundingRect.height
|
|
|
|
return itemTop >= sidebarTop && itemBottom <= sidebarBottom
|
|
}
|
|
|
|
function checkSidebarItemVisibilityTransition(
|
|
item: HTMLElement,
|
|
topMargin: number
|
|
) {
|
|
const sidebar = document.getElementById("sidebar")
|
|
if (!sidebar) {
|
|
return false
|
|
}
|
|
|
|
const sidebarBoundingRect = sidebar.getBoundingClientRect()
|
|
const activeItemBoundingRect = item.getBoundingClientRect()
|
|
|
|
return (
|
|
activeItemBoundingRect.top >= topMargin &&
|
|
activeItemBoundingRect.top - sidebarBoundingRect.height + topMargin < 0 &&
|
|
activeItemBoundingRect.bottom > 0
|
|
)
|
|
}
|