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

мНет описания правки
мНет описания правки
Строка 500: Строка 500:
}
}


// Удаление класса active у всех категорий
// Удаление класса active у всех пунктов меню
function clearActiveCategories() {
function clearActiveMenuItems() {
categories.forEach(function(category) {
for (var i = 0; i < menuItems.length; i++) {
category.classList.remove('active');
menuItems[i].classList.remove('active');
});
}
}
}


Строка 511: Строка 511:
clearActiveMenu();
clearActiveMenu();
clearActiveContent();
clearActiveContent();
clearActiveCategories();
 
// Удаление класса active у всех категорий
categories.forEach(function(category) {
category.classList.remove('active');
});


// Установка новой активной категории
// Установка новой активной категории
Строка 549: Строка 553:
const nextArrow = document.getElementById('next-category');
const nextArrow = document.getElementById('next-category');


// Отключение стрелки назад, если это первая категория
if (currentCategoryIndex === 0) {
if (currentCategoryIndex === 0) {
prevArrow.classList.add('disabled');
prevArrow.classList.add('disabled');
prevArrow.style.pointerEvents = 'none';  
prevArrow.style.pointerEvents = 'none'; // Отключение кликов
} else {
} else {
prevArrow.classList.remove('disabled');
prevArrow.classList.remove('disabled');
prevArrow.style.pointerEvents = 'auto';  
prevArrow.style.pointerEvents = 'auto'; // Включение кликов
}
}


// Отключение стрелки вперёд, если это последняя категория
if (currentCategoryIndex === categories.length - 1) {
if (currentCategoryIndex === categories.length - 1) {
nextArrow.classList.add('disabled');
nextArrow.classList.add('disabled');
nextArrow.style.pointerEvents = 'none';  
nextArrow.style.pointerEvents = 'none'; // Отключение кликов
} else {
} else {
nextArrow.classList.remove('disabled');
nextArrow.classList.remove('disabled');
nextArrow.style.pointerEvents = 'auto';  
nextArrow.style.pointerEvents = 'auto'; // Включение кликов
}
}
}
}
Строка 571: Строка 577:
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.scrollIntoView(); // Прокрутка к категории
switchContent(targetMenuItem); // Открытие пункта меню
targetMenuItem.scrollIntoView(); // Прокрутка к пункту
}
} else {
// Поиск категории по ID
var targetCategory = document.getElementById(hash);
if (targetCategory) {
var categoryIndex = Array.from(categories).indexOf(targetCategory);
if (categoryIndex !== -1) {
switchCategory(categoryIndex); // Открытие категории
targetCategory.scrollIntoView(); // Прокрутка к категории
}
}
}
}
}
}
}


// Инициализация: открытие категории по якорю или первой категории
// Инициализация: открытие категории на основе якоря или первой категории
if (window.location.hash) {
if (categories.length > 0) {
openCategoryFromAnchor(); // Если есть якорь, открываем его
var hash = window.location.hash.substring(1); // Получение якоря
} else if (categories.length > 0) {
if (hash) {
switchCategory(currentCategoryIndex); // Иначе открываем первую категорию
openCategoryFromAnchor(); // Если есть якорь, открываем соответствующую категорию
} else {
switchCategory(currentCategoryIndex); // В противном случае открываем первую категорию
}
updateArrowStates();
}
}


// Обработка якоря при изменении URL
// Обработка якоря при изменении URL
window.addEventListener('hashchange', openCategoryFromAnchor);
window.addEventListener('hashchange', openCategoryFromAnchor);
// Удаление обработчиков кликов на категории
categories.forEach(function(category) {
category.addEventListener('click', function(event) {
event.preventDefault(); // Предотвращение любого действия при клике
});
});
// Клик по элементам меню
for (var i = 0; i < menuItems.length; i++) {
menuItems[i].addEventListener('click', function() {
switchContent(this); // Переключение контента при клике на пункт меню
});
}
document.querySelector('.navigation__menu-toggle').addEventListener('click', function() {
var menu = document.querySelector('.navigation__menu-container');
menu.classList.toggle('active'); // Переключение класса для показа/скрытия меню
var toggleButton = document.querySelector('.navigation__menu-toggle');
toggleButton.classList.toggle('active'); // Переключение для перемещения кнопки
});
}
}
const currentPageTitle = document.title;
const currentPageTitle = document.title;