MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 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'); // Переключаем класс для показа/скрытия меню | ||