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

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


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


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


// Установка новой активной категории
// Установка новой активной категории
Строка 553: Строка 549:
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';  
}
}
}
}
// Стрелки для переключения категорий
document.getElementById('prev-category').addEventListener('click', function() {
if (currentCategoryIndex > 0) {
currentCategoryIndex = currentCategoryIndex - 1;
switchCategory(currentCategoryIndex); // Переключение на новую категорию
}
});
document.getElementById('next-category').addEventListener('click', function() {
if (currentCategoryIndex < categories.length - 1) {
currentCategoryIndex = currentCategoryIndex + 1;
switchCategory(currentCategoryIndex); // Переключение на новую категорию
}
});


// Логика для обработки якоря
// Логика для обработки якоря
function openCategoryFromAnchor() {
function openCategoryFromAnchor() {
var hash = window.location.hash.substring(1); // Получение якоря без #
var hash = window.location.hash.substring(1); // Получение якоря без #
if (!hash) return false; // Выход, если якорь пустой
if (!hash) return; // Выход, если якорь пустой


// Попытка найти пункт меню или категорию с соответствующим ID
// Поиск категории по ID
var targetMenuItem = document.getElementById(hash);
var targetCategory = document.getElementById(hash);
if (targetMenuItem) {
if (targetCategory) {
// Если это пункт меню, нужно сначала открыть его категорию
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); // Открытие категории
switchContent(targetMenuItem); // Открытие пункта меню
targetCategory.scrollIntoView(); // Прокрутка к категории
targetMenuItem.scrollIntoView(); // Прокрутка к пункту
return true;
}
} else {
// Поиск категории по ID
var targetCategory = document.getElementById(hash);
if (targetCategory) {
var categoryIndex = Array.from(categories).indexOf(targetCategory);
if (categoryIndex !== -1) {
switchCategory(categoryIndex); // Открытие категории
targetCategory.scrollIntoView(); // Прокрутка к категории
return true;
}
}
}
}
}
return false; // Возвращаем false, если якорь не обработан
}
}


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


// Обработка якоря при изменении 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;