mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-13 20:14:56 +02:00
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
function menu($elements) {
|
|
$elements.forEach(($menu) => {
|
|
$menu.addEventListener('click', (event) => {
|
|
let $listItem = event.target;
|
|
while ($listItem) {
|
|
if ($listItem.classList.contains('menu')) {
|
|
return;
|
|
}
|
|
|
|
if ($listItem.classList.contains('menu__list-item')) {
|
|
break;
|
|
}
|
|
$listItem = $listItem.parentNode;
|
|
}
|
|
|
|
// Not clicking on a list item.
|
|
if (!$listItem) {
|
|
return;
|
|
}
|
|
|
|
const regularSubList =
|
|
$listItem.classList.contains('menu__list-item') &&
|
|
!$listItem.querySelector('.menu__list-item-collapsible');
|
|
const caretBtn = event.target.classList.contains('menu__caret');
|
|
|
|
if (regularSubList || caretBtn) {
|
|
$listItem.classList.toggle('menu__list-item--collapsed');
|
|
}
|
|
|
|
// Don't add any active class if non-leaf item selected.
|
|
if ($listItem.querySelector('.menu__list')) {
|
|
return;
|
|
}
|
|
|
|
$menu
|
|
.querySelectorAll('.menu__link')
|
|
.forEach(($elItem) => $elItem.classList.remove('menu__link--active'));
|
|
|
|
// Traverse parents and add active class.
|
|
while ($listItem) {
|
|
if ($listItem.classList.contains('menu')) {
|
|
return;
|
|
}
|
|
|
|
if ($listItem.classList.contains('menu__list-item')) {
|
|
const $link = $listItem.querySelector('.menu__link');
|
|
if ($link) {
|
|
$link.classList.add('menu__link--active');
|
|
}
|
|
|
|
const $listItemCollapsible = $listItem.querySelector(
|
|
'.menu__list-item-collapsible',
|
|
);
|
|
if ($listItemCollapsible) {
|
|
$listItemCollapsible.classList.add(
|
|
'menu__list-item-collapsible--active',
|
|
);
|
|
}
|
|
}
|
|
|
|
$listItem = $listItem.parentNode;
|
|
}
|
|
});
|
|
|
|
$navbarSidebarBackButton = document.querySelector('.navbar-sidebar__back');
|
|
$navbarSidebarItems = document.querySelector('.navbar-sidebar__items');
|
|
if ($navbarSidebarBackButton) {
|
|
$navbarSidebarBackButton.addEventListener('click', () => {
|
|
$navbarSidebarItems.classList.remove(
|
|
'navbar-sidebar__items--show-secondary',
|
|
);
|
|
});
|
|
}
|
|
});
|
|
}
|