MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 500: | Строка 500: | ||
} | } | ||
// Удаление класса active у всех | // Удаление класса active у всех пунктов меню | ||
function | function clearActiveMenuItems() { | ||
for (var i = 0; i < menuItems.length; i++) { | |||
menuItems[i].classList.remove('active'); | |||
} | } | ||
} | } | ||
| Строка 511: | Строка 511: | ||
clearActiveMenu(); | clearActiveMenu(); | ||
clearActiveContent(); | clearActiveContent(); | ||
// Удаление класса 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 | ||
var | var targetMenuItem = document.getElementById(hash); | ||
if ( | if (targetMenuItem) { | ||
var categoryIndex = Array.from( | // Если это пункт меню, нужно сначала открыть его категорию | ||
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) { | ||
var hash = window.location.hash.substring(1); // Получение якоря | |||
if (hash) { | |||
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; | ||