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

мНет описания правки
мНет описания правки
Строка 586: Строка 586:
menuItems[i].classList.remove('active');
menuItems[i].classList.remove('active');
}
}
}
// Функция для создания уникального ID на основе текста элемента
function createIdFromText(text) {
return text.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, '');
}
}


Строка 593: Строка 598:


// Удаляем класс active у всех категорий
// Удаляем класс active у всех категорий
categories.forEach(function(category) {
categories.forEach(function (category) {
category.classList.remove('active');
category.classList.remove('active');
});
});
Строка 648: Строка 653:


// Стрелки для переключения категорий
// Стрелки для переключения категорий
document.getElementById('prev-category').addEventListener('click', function() {
document.getElementById('prev-category').addEventListener('click', function () {
if (currentCategoryIndex > 0) {
if (currentCategoryIndex > 0) {
currentCategoryIndex = currentCategoryIndex - 1;
currentCategoryIndex = currentCategoryIndex - 1;
Строка 655: Строка 660:
});
});


document.getElementById('next-category').addEventListener('click', function() {
document.getElementById('next-category').addEventListener('click', function () {
if (currentCategoryIndex < categories.length - 1) {
if (currentCategoryIndex < categories.length - 1) {
currentCategoryIndex = currentCategoryIndex + 1;
currentCategoryIndex = currentCategoryIndex + 1;
Строка 661: Строка 666:
}
}
});
});
// Добавляем уникальные ID категориям и пунктам меню
categories.forEach(function (category, index) {
var id = createIdFromText(category.textContent);
category.id = id; // Присваиваем ID категории
});
menuItems.forEach(function (menuItem) {
var id = createIdFromText(menuItem.textContent);
menuItem.id = id; // Присваиваем ID пункту меню
});
// Проверяем якорь в URL и выбираем соответствующую категорию и пункт меню
function checkAnchor() {
var hash = window.location.hash.substring(1); // Убираем символ #
if (hash) {
var targetElement = document.getElementById(hash);
if (targetElement) {
// Если это категория
var categoryIndex = Array.prototype.indexOf.call(categories, targetElement);
if (categoryIndex !== -1) {
switchCategory(categoryIndex);
}
// Если это пункт меню
var menuItemIndex = Array.prototype.indexOf.call(menuItems, targetElement);
if (menuItemIndex !== -1) {
var menuItem = menuItems[menuItemIndex];
var parentMenu = menuItem.closest('.menu'); // Находим родительское меню
if (parentMenu) {
var categoryClass = parentMenu.classList[0].replace('-menu', '');
var categoryIndex = Array.prototype.findIndex.call(categories, function (category) {
return category.classList.contains(categoryClass);
});
if (categoryIndex !== -1) {
switchCategory(categoryIndex);
switchContent(menuItem);
}
}
}
}
}
}


// Инициализация: открываем первую категорию и первый пункт
// Инициализация: открываем первую категорию и первый пункт
Строка 669: Строка 718:


// Удаляем обработчики кликов на категории
// Удаляем обработчики кликов на категории
categories.forEach(function(category) {
categories.forEach(function (category) {
category.addEventListener('click', function(event) {
category.addEventListener('click', function (event) {
event.preventDefault(); // Предотвращаем любое действие при клике
event.preventDefault(); // Предотвращаем любое действие при клике
});
});
Строка 677: Строка 726:
// Клик по элементам меню
// Клик по элементам меню
for (var i = 0; i < menuItems.length; i++) {
for (var i = 0; i < menuItems.length; i++) {
menuItems[i].addEventListener('click', function() {
menuItems[i].addEventListener('click', function () {
switchContent(this);
switchContent(this);
});
});
}
}


document.querySelector('.menu-toggle').addEventListener('click', function() {
// Проверка якоря при загрузке страницы
checkAnchor();
 
// Обработчик изменений URL
window.addEventListener('hashchange', checkAnchor);
 
document.querySelector('.menu-toggle').addEventListener('click', function () {
var menu = document.querySelector('.menu-container');
var menu = document.querySelector('.menu-container');
menu.classList.toggle('active'); // Переключаем класс для показа/скрытия меню
menu.classList.toggle('active'); // Переключаем класс для показа/скрытия меню