MediaWiki:Common.js: различия между версиями
Kerisar (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 569: | Строка 569: | ||
var menuItems = document.querySelectorAll('.menu div'); | var menuItems = document.querySelectorAll('.menu div'); | ||
var currentCategoryIndex = 0; // Индекс текущей активной категории | var currentCategoryIndex = 0; // Индекс текущей активной категории | ||
// Устанавливаем ID для категорий | |||
categories.forEach(function(category, index) { | |||
var categoryText = category.textContent.trim().toLowerCase().replace(/\s+/g, '-'); // Преобразуем текст в id | |||
category.id = categoryText || 'category-' + index; // Если текста нет, используем индекс | |||
}); | |||
// Устанавливаем ID для пунктов меню | |||
menuItems.forEach(function(menuItem, index) { | |||
var menuItemText = menuItem.textContent.trim().toLowerCase().replace(/\s+/g, '-'); // Преобразуем текст в id | |||
menuItem.id = menuItemText || 'menu-item-' + index; // Если текста нет, используем индекс | |||
}); | |||
function clearActiveContent() { | function clearActiveContent() { | ||
| Строка 592: | Строка 604: | ||
clearActiveContent(); | clearActiveContent(); | ||
categories.forEach(function(category) { | categories.forEach(function(category) { | ||
category.classList.remove('active'); | category.classList.remove('active'); | ||
}); | }); | ||
var selectedCategory = categories[index]; | var selectedCategory = categories[index]; | ||
if (selectedCategory) { | if (selectedCategory) { | ||
selectedCategory.classList.add('active'); | selectedCategory.classList.add('active'); | ||
var categoryClass = selectedCategory.classList[0]; | var categoryClass = selectedCategory.classList[0]; | ||
var selectedMenu = document.querySelector('.' + categoryClass + '-menu'); | var selectedMenu = document.querySelector('.' + categoryClass + '-menu'); | ||
if (selectedMenu) { | if (selectedMenu) { | ||
selectedMenu.classList.add('active'); | selectedMenu.classList.add('active'); | ||
var firstParagraph = selectedMenu.querySelector('div'); | var firstParagraph = selectedMenu.querySelector('div'); | ||
if (firstParagraph) { | if (firstParagraph) { | ||
switchContent(firstParagraph); | switchContent(firstParagraph); | ||
} | } | ||
} | } | ||
} | } | ||
currentCategoryIndex = index; | |||
updateArrowStates(); // Обновляем состояние стрелок | |||
} | } | ||
| Строка 621: | Строка 634: | ||
content.classList.add('active'); | content.classList.add('active'); | ||
menuItem.classList.add('active'); | menuItem.classList.add('active'); | ||
} | |||
} | |||
// Обновляем состояние стрелок (активные/неактивные) | |||
function updateArrowStates() { | |||
const prevArrow = document.getElementById('prev-category'); | |||
const nextArrow = document.getElementById('next-category'); | |||
if (currentCategoryIndex === 0) { | |||
prevArrow.classList.add('disabled'); | |||
prevArrow.style.pointerEvents = 'none'; // Отключаем клики | |||
} else { | |||
prevArrow.classList.remove('disabled'); | |||
prevArrow.style.pointerEvents = 'auto'; // Включаем клики | |||
} | |||
if (currentCategoryIndex === categories.length - 1) { | |||
nextArrow.classList.add('disabled'); | |||
nextArrow.style.pointerEvents = 'none'; | |||
} else { | |||
nextArrow.classList.remove('disabled'); | |||
nextArrow.style.pointerEvents = 'auto'; | |||
} | |||
} | |||
// Функция для обработки якорей | |||
function handleAnchorLink() { | |||
var hash = window.location.hash.substring(1); // Получаем якорь без '#' | |||
if (hash) { | |||
var categoryIndex = Array.from(categories).findIndex(category => category.id === hash); | |||
if (categoryIndex !== -1) { | |||
switchCategory(categoryIndex); | |||
return; | |||
} | |||
var menuItem = document.querySelector('.menu div[id="' + hash + '"]'); | |||
if (menuItem) { | |||
var categoryClass = menuItem.closest('.menu').classList[0].replace('-menu', ''); | |||
var categoryIndex = Array.from(categories).findIndex(category => category.classList.contains(categoryClass)); | |||
if (categoryIndex !== -1) { | |||
switchCategory(categoryIndex); | |||
switchContent(menuItem); | |||
} | |||
} | |||
} | } | ||
} | } | ||
| Строка 626: | Строка 684: | ||
// Стрелки для переключения категорий | // Стрелки для переключения категорий | ||
document.getElementById('prev-category').addEventListener('click', function() { | document.getElementById('prev-category').addEventListener('click', function() { | ||
currentCategoryIndex = | if (currentCategoryIndex > 0) { | ||
currentCategoryIndex = currentCategoryIndex - 1; | |||
switchCategory(currentCategoryIndex); // Переключаем на новую категорию | |||
} | |||
}); | }); | ||
document.getElementById('next-category').addEventListener('click', function() { | document.getElementById('next-category').addEventListener('click', function() { | ||
currentCategoryIndex = | if (currentCategoryIndex < categories.length - 1) { | ||
currentCategoryIndex = currentCategoryIndex + 1; | |||
switchCategory(currentCategoryIndex); // Переключаем на новую категорию | |||
} | |||
}); | }); | ||
| Строка 638: | Строка 700: | ||
if (categories.length > 0) { | if (categories.length > 0) { | ||
switchCategory(currentCategoryIndex); // Отображаем первую категорию | switchCategory(currentCategoryIndex); // Отображаем первую категорию | ||
updateArrowStates(); // Обновляем состояние стрелок | |||
} | } | ||
categories.forEach(function(category) { | categories.forEach(function(category) { | ||
category.addEventListener('click', function(event) { | category.addEventListener('click', function(event) { | ||
| Строка 647: | Строка 709: | ||
}); | }); | ||
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() { | ||
| Строка 656: | Строка 717: | ||
document.querySelector('.menu-toggle').addEventListener('click', function() { | 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'); | ||
var toggleButton = document.querySelector('.menu-toggle'); | var toggleButton = document.querySelector('.menu-toggle'); | ||
toggleButton.classList.toggle('active'); | toggleButton.classList.toggle('active'); | ||
}); | }); | ||
handleAnchorLink(); | |||
window.addEventListener('hashchange', handleAnchorLink); | |||
} | } | ||
const currentPageTitle = document.title; | const currentPageTitle = document.title; | ||