MediaWiki:Common.js: различия между версиями

мНет описания правки
мНет описания правки
Строка 592: Строка 592:
if (!hash) return; // Выход, если якорь пустой
if (!hash) return; // Выход, если якорь пустой


// Проверяем, есть ли элемент с таким ID среди категорий
// Попытка найти пункт меню или категорию с соответствующим ID
var targetCategory = document.getElementById(hash);
var targetMenuItem = document.getElementById(hash);
if (targetCategory) {
if (targetMenuItem) {
var categoryIndex = Array.from(categories).indexOf(targetCategory);
// Если это пункт меню, нужно сначала открыть его категорию
var menu = targetMenuItem.closest('.navigation__menu-item');
var categoryIndex = Array.from(menus).indexOf(menu);
if (categoryIndex !== -1) {
if (categoryIndex !== -1) {
// Открываем соответствующую категорию
switchCategory(categoryIndex);
switchCategory(categoryIndex);
targetCategory.classList.add('active'); // Устанавливаем класс active
switchContent(targetMenuItem); // Открытие пункта меню
targetCategory.scrollIntoView(); // Прокрутка к категории
targetMenuItem.scrollIntoView(); // Прокрутка к пункту
return; // Выход, т.к. нашли категорию
}
}
}
} else {
 
// Поиск категории по ID
// Если якорь не соответствует категории, ищем среди пунктов меню
var targetCategory = document.getElementById(hash);
var targetMenuItem = document.getElementById(hash);
if (targetCategory) {
if (targetMenuItem) {
var categoryIndex = Array.from(categories).indexOf(targetCategory);
// Получаем меню, к которому принадлежит пункт
var menu = targetMenuItem.closest('.navigation__menu-item');
if (menu) {
var categoryIndex = Array.from(menus).indexOf(menu);
if (categoryIndex !== -1) {
if (categoryIndex !== -1) {
// Открываем категорию, содержащую пункт
switchCategory(categoryIndex); // Открытие категории
switchCategory(categoryIndex);
targetCategory.scrollIntoView(); // Прокрутка к категории
switchContent(targetMenuItem); // Открытие пункта меню
targetMenuItem.classList.add('active'); // Устанавливаем класс active для пункта меню
targetMenuItem.scrollIntoView(); // Прокрутка к пункту
}
}
}
}
Строка 623: Строка 616:
}
}


// Инициализация: открытие первой категории и первого пункта
// Открытие первой категории и первого пункта
if (categories.length > 0) {
if (categories.length > 0) {
switchCategory(currentCategoryIndex);
switchCategory(currentCategoryIndex);