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

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


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


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


// Стрелки для переключения категорий
// Стрелки для переключения категорий
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;
Строка 661: Строка 655:
});
});


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;
Строка 667: Строка 661:
}
}
});
});
// Добавляем уникальные ID категориям и пунктам меню
categories.forEach(function (category, index) {
var id = createIdFromText(category);
if (id) {
category.id = id; // Присваиваем ID категории
}
});
menuItems.forEach(function (menuItem) {
var id = createIdFromText(menuItem);
if (id) {
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);
}
}
}
}
}
}


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


// Удаляем обработчики кликов на категории
// Удаляем обработчики кликов на категории
categories.forEach(function (category) {
categories.forEach(function(category) {
category.addEventListener('click', function (event) {
category.addEventListener('click', function(event) {
event.preventDefault(); // Предотвращаем любое действие при клике
event.preventDefault(); // Предотвращаем любое действие при клике
});
});
Строка 731: Строка 677:
// Клик по элементам меню
// Клик по элементам меню
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'); // Переключаем класс для показа/скрытия меню