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

Удаления функции "TOC"
Нет описания правки
Строка 462: Строка 462:
var currentCategoryIndex = 0; // Индекс текущей активной категории
var currentCategoryIndex = 0; // Индекс текущей активной категории


// Генерация ID из текста
function generateIdFromText(text) {
return text.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^a-zа-яё0-9\-]/g, '');
}
// Присвоение ID категориям и пунктам меню
function assignIds() {
categories.forEach(function(category, index) {
var categoryText = category.textContent || category.innerText;
var categoryId = generateIdFromText(categoryText);
category.setAttribute('id', categoryId);
var menu = menus[index];
var menuItems = menu.querySelectorAll('div');
menuItems.forEach(function(menuItem) {
var menuItemText = menuItem.textContent || menuItem.innerText;
var menuItemId = generateIdFromText(menuItemText);
menuItem.setAttribute('id', menuItemId);
});
});
}
assignIds(); // Вызов функции для присвоения ID
// Удаление класса active у всех контентных элементов
function clearActiveContent() {
function clearActiveContent() {
for (var i = 0; i < contentDivs.length; i++) {
for (var i = 0; i < contentDivs.length; i++) {
Строка 468: Строка 493:
}
}


// Удаление класса active у всех меню
function clearActiveMenu() {
function clearActiveMenu() {
for (var i = 0; i < menus.length; i++) {
for (var i = 0; i < menus.length; i++) {
Строка 474: Строка 500:
}
}


// Удаление класса active у всех пунктов меню
function clearActiveMenuItems() {
function clearActiveMenuItems() {
for (var i = 0; i < menuItems.length; i++) {
for (var i = 0; i < menuItems.length; i++) {
Строка 480: Строка 507:
}
}


// Переключение категорий
function switchCategory(index) {
function switchCategory(index) {
clearActiveMenu();
clearActiveMenu();
clearActiveContent();
clearActiveContent();


// Удаляем класс active у всех категорий
// Удаление класса active у всех категорий
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'); // Добавляем класс active
selectedCategory.classList.add('active'); // Добавление класса 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); // Открытие первого пункта меню
}
}
}
}
Строка 505: Строка 533:


currentCategoryIndex = index;
currentCategoryIndex = index;
updateArrowStates(); // Обновляем состояние стрелок
updateArrowStates(); // Обновление состояния стрелок
}
}


// Переключение контента в меню
function switchContent(menuItem) {
function switchContent(menuItem) {
clearActiveMenuItems();
clearActiveMenuItems();
Строка 519: Строка 548:
}
}


// Обновляем состояние стрелок (активные/неактивные)
// Обновление состояния стрелок (активные/неактивные)
function updateArrowStates() {
function updateArrowStates() {
const prevArrow = document.getElementById('prev-category');
const prevArrow = document.getElementById('prev-category');
const nextArrow = document.getElementById('next-category');
const nextArrow = document.getElementById('next-category');


// Если это первая категория, отключаем стрелку назад
// Отключение стрелки назад, если это первая категория
if (currentCategoryIndex === 0) {
if (currentCategoryIndex === 0) {
prevArrow.classList.add('disabled');
prevArrow.classList.add('disabled');
prevArrow.style.pointerEvents = 'none'; // Отключение кликов
} else {
} else {
prevArrow.classList.remove('disabled');
prevArrow.classList.remove('disabled');
prevArrow.style.pointerEvents = 'auto'; // Включение кликов
}
}


// Если это последняя категория, отключаем стрелку вперёд
// Отключение стрелки вперёд, если это последняя категория
if (currentCategoryIndex === categories.length - 1) {
if (currentCategoryIndex === categories.length - 1) {
nextArrow.classList.add('disabled');
nextArrow.classList.add('disabled');
nextArrow.style.pointerEvents = 'none'; // Отключение кликов
} else {
} else {
nextArrow.classList.remove('disabled');
nextArrow.classList.remove('disabled');
nextArrow.style.pointerEvents = 'auto'; // Включение кликов
}
}
}
}
Строка 543: Строка 576:
if (currentCategoryIndex > 0) {
if (currentCategoryIndex > 0) {
currentCategoryIndex = currentCategoryIndex - 1;
currentCategoryIndex = currentCategoryIndex - 1;
switchCategory(currentCategoryIndex); // Переключаем на новую категорию
switchCategory(currentCategoryIndex); // Переключение на новую категорию
}
}
});
});
Строка 550: Строка 583:
if (currentCategoryIndex < categories.length - 1) {
if (currentCategoryIndex < categories.length - 1) {
currentCategoryIndex = currentCategoryIndex + 1;
currentCategoryIndex = currentCategoryIndex + 1;
switchCategory(currentCategoryIndex); // Переключаем на новую категорию
switchCategory(currentCategoryIndex); // Переключение на новую категорию
}
}
});
});


// Инициализация: открываем первую категорию и первый пункт
// Логика для обработки якоря
function openCategoryFromAnchor() {
var hash = window.location.hash.substring(1); // Получение якоря без #
if (!hash) return; // Выход, если якорь пустой
 
// Попытка найти пункт меню или категорию с соответствующим ID
var targetMenuItem = document.getElementById(hash);
if (targetMenuItem) {
// Если это пункт меню, нужно сначала открыть его категорию
var menu = targetMenuItem.closest('.menu');
var categoryIndex = Array.from(menus).indexOf(menu);
if (categoryIndex !== -1) {
switchCategory(categoryIndex);
switchContent(targetMenuItem); // Открытие пункта меню
targetMenuItem.scrollIntoView(); // Прокрутка к пункту
}
} else {
// Поиск категории по ID
var targetCategory = document.getElementById(hash);
if (targetCategory) {
var categoryIndex = Array.from(categories).indexOf(targetCategory);
if (categoryIndex !== -1) {
switchCategory(categoryIndex); // Открытие категории
targetCategory.scrollIntoView(); // Прокрутка к категории
}
}
}
}
 
// Инициализация: открытие первой категории и первого пункта
if (categories.length > 0) {
if (categories.length > 0) {
switchCategory(currentCategoryIndex); // Отображаем первую категорию
switchCategory(currentCategoryIndex);
updateArrowStates(); // Обновляем состояние стрелок
updateArrowStates();
}
}


// Удаляем обработчики кликов на категории
// Обработка якоря при загрузке
openCategoryFromAnchor();
 
// Обработка якоря при изменении URL
window.addEventListener('hashchange', openCategoryFromAnchor);
 
// Удаление обработчиков кликов на категории
categories.forEach(function(category) {
categories.forEach(function(category) {
category.addEventListener('click', function(event) {
category.addEventListener('click', function(event) {
event.preventDefault(); // Предотвращаем любое действие при клике
event.preventDefault(); // Предотвращение любого действия при клике
});
});
});
});
Строка 570: Строка 638:
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); // Переключение контента при клике на пункт меню
});
});
}
}
Строка 576: Строка 644:
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'); // Переключение для перемещения кнопки
});
});
}
}