MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 458: | Строка 458: | ||
// Переменные для категорий, меню и контентных элементов | // Переменные для категорий, меню и контентных элементов | ||
var categories = document.querySelectorAll('.navigation__categories > div'); | var categories = document.querySelectorAll('.navigation__categories > div'); | ||
var | var menuContainer = document.querySelector('.navigation__menu'); | ||
var menuItems = document.querySelectorAll('.navigation__menu > div'); | |||
var contentDivs = document.querySelectorAll('.navigation__content > div'); | var contentDivs = document.querySelectorAll('.navigation__content > div'); | ||
var currentCategoryIndex = 0; // Индекс текущей активной категории | var currentCategoryIndex = 0; // Индекс текущей активной категории | ||
| Строка 475: | Строка 475: | ||
categories[i].setAttribute('id', categoryId); | categories[i].setAttribute('id', categoryId); | ||
var | var menuItem = menuItems[i]; | ||
var menuItemText = menuItem.textContent || menuItem.innerText; | |||
var menuItemId = generateIdFromText(menuItemText); | |||
menuItem.setAttribute('id', menuItemId); | |||
} | } | ||
} | } | ||
| Строка 491: | Строка 488: | ||
for (var i = 0; i < contentDivs.length; i++) { | for (var i = 0; i < contentDivs.length; i++) { | ||
contentDivs[i].classList.remove('active'); | contentDivs[i].classList.remove('active'); | ||
} | } | ||
} | } | ||
| Строка 510: | Строка 500: | ||
// Переключение категорий | // Переключение категорий | ||
function switchCategory(index) { | function switchCategory(index) { | ||
clearActiveContent(); | clearActiveContent(); | ||
clearActiveMenuItems(); | |||
// Удаление класса active у всех категорий | // Удаление класса active у всех категорий | ||
| Строка 522: | Строка 512: | ||
if (selectedCategory) { | if (selectedCategory) { | ||
selectedCategory.classList.add('active'); // Добавление класса active | selectedCategory.classList.add('active'); // Добавление класса active | ||
var | var selectedMenuItem = menuItems[index]; | ||
if (selectedMenuItem) { | |||
if ( | selectedMenuItem.classList.add('active'); // Активирование соответствующего пункта меню | ||
var contentClass = selectedMenuItem.className + '-content'; | |||
var | var content = document.querySelector('.' + contentClass); | ||
if ( | if (content) { | ||
content.classList.add('active'); // Показ контента для выбранного пункта меню | |||
} | } | ||
} | } | ||
| Строка 535: | Строка 525: | ||
currentCategoryIndex = index; | currentCategoryIndex = index; | ||
updateArrowStates(); // Обновление состояния стрелок | updateArrowStates(); // Обновление состояния стрелок | ||
} | } | ||
| Строка 596: | Строка 574: | ||
var targetMenuItem = document.getElementById(hash); | var targetMenuItem = document.getElementById(hash); | ||
if (targetMenuItem) { | if (targetMenuItem) { | ||
var index = Array.prototype.indexOf.call(menuItems, targetMenuItem); | |||
if (index !== -1) { | |||
var | switchCategory(index); // Переключение на категорию и контент по якорю | ||
if ( | targetMenuItem.scrollIntoView(); // Прокрутка к пункту меню | ||
switchCategory( | |||
targetMenuItem.scrollIntoView(); // Прокрутка к пункту | |||
} | } | ||
} | } | ||
} | } | ||
// Инициализация: открытие первой категории и первого пункта | // Инициализация: открытие первой категории и первого пункта меню | ||
if (categories.length > 0) { | if (categories.length > 0) { | ||
switchCategory(currentCategoryIndex); | switchCategory(currentCategoryIndex); | ||
| Строка 632: | Строка 597: | ||
for (var i = 0; i < categories.length; i++) { | for (var i = 0; i < categories.length; i++) { | ||
categories[i].addEventListener('click', function(event) { | categories[i].addEventListener('click', function(event) { | ||
event.preventDefault(); // Предотвращение | event.preventDefault(); // Предотвращение клика по категориям | ||
}); | }); | ||
} | } | ||
| Строка 639: | Строка 604: | ||
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() { | ||
switchCategory(Array.prototype.indexOf.call(menuItems, this)); | |||
}); | }); | ||
} | } | ||
// Переключение активности всего меню | |||
document.querySelector('.navigation__menu-toggle').addEventListener('click', function() { | document.querySelector('.navigation__menu-toggle').addEventListener('click', function() { | ||
menuContainer.classList.toggle('active'); // Показ или скрытие всего меню | |||
this.classList.toggle('active'); // Переключение состояния кнопки меню | |||
this.classList.toggle('active'); // Переключение | |||
}); | }); | ||
} | } | ||