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

мНет описания правки
мНет описания правки
Строка 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() {
Строка 601: Строка 589:


     function switchCategory(index) {
     function switchCategory(index) {
        if (categories.length === 0 || menus.length === 0) return; // Защита от пустых данных
         clearActiveMenu();
         clearActiveMenu();
         clearActiveContent();
         clearActiveContent();


        // Удаляем класс 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');
             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); // Открываем первый пункт меню
                 }
                 }
             }
             }
Строка 644: Строка 632:
         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');
Строка 652: Строка 641:
         }
         }


        // Если это последняя категория, отключаем стрелку вперёд
         if (currentCategoryIndex === categories.length - 1) {
         if (currentCategoryIndex === categories.length - 1) {
             nextArrow.classList.add('disabled');
             nextArrow.classList.add('disabled');
Строка 658: Строка 648:
             nextArrow.classList.remove('disabled');
             nextArrow.classList.remove('disabled');
             nextArrow.style.pointerEvents = 'auto';
             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);
                }
            }
         }
         }
     }
     }
Строка 700: Строка 667:


     // Инициализация: открываем первую категорию и первый пункт
     // Инициализация: открываем первую категорию и первый пункт
     if (categories.length > 0 && menus.length > 0) {
     if (categories.length > 0) {
         switchCategory(0); // Отображаем первую категорию и первый пункт
         switchCategory(currentCategoryIndex); // Отображаем первую категорию
         updateArrowStates(); // Обновляем состояние стрелок
         updateArrowStates(); // Обновляем состояние стрелок
     }
     }


    // Удаляем обработчики кликов на категории
     categories.forEach(function(category) {
     categories.forEach(function(category) {
         category.addEventListener('click', function(event) {
         category.addEventListener('click', function(event) {
Строка 711: Строка 679:
     });
     });


    // Клик по элементам меню
     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() {
Строка 719: Строка 688:
     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;