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

Материал из База знаний АО АСП
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 6: Строка 6:
         console.log("Сохраняем состояние дерева...");
         console.log("Сохраняем состояние дерева...");
         var treeState = {};
         var treeState = {};
         $('.CategoryTreeToggle').each(function() {
         $('.CategoryTreeSection').each(function() { // Используем CategoryTreeSection вместо CategoryTreeItem
             var $toggle = $(this);
             var $section = $(this);
             var itemId = $toggle.closest('.CategoryTreeItem').attr('id');
             var isVisible = $section.find('.CategoryTreeChildren').is(':visible');
             if (itemId) {
            var title = $section.find('.CategoryTreeToggle').data('ct-title'); // Получаем data-ct-title
                 treeState[itemId] = $toggle.attr('aria-expanded');
             if (title) {
                 treeState[title] = isVisible; // Сохраняем состояние видимости
             }
             }
         });
         });
Строка 24: Строка 25:
             var treeState = JSON.parse(treeStateString);
             var treeState = JSON.parse(treeStateString);
             console.log("Состояние дерева из localStorage:", treeState);
             console.log("Состояние дерева из localStorage:", treeState);
             $('.CategoryTreeToggle').each(function() {
             $('.CategoryTreeSection').each(function() { // Используем CategoryTreeSection вместо CategoryTreeItem
                 var $toggle = $(this);
                 var $section = $(this);
                 var itemId = $toggle.closest('.CategoryTreeItem').attr('id');
                 var title = $section.find('.CategoryTreeToggle').data('ct-title'); // Получаем data-ct-title
                 if (itemId && treeState[itemId] === 'true') {
                 if (title && treeState[title] === true) {
                     console.log("Раскрываем категорию:", itemId);
                     console.log("Раскрываем категорию:", title);
                     $toggle.click(); // Раскрываем категорию
                     $section.find('.CategoryTreeToggle').click(); // Раскрываем категорию
                 }
                 }
             });
             });
Строка 46: Строка 47:
         var $toggleButton = $item.find('.CategoryTreeToggle').first();
         var $toggleButton = $item.find('.CategoryTreeToggle').first();
         var isCategory = !$item.find('.CategoryTreePageBullet').length; // Является ли элементом категорией
         var isCategory = !$item.find('.CategoryTreePageBullet').length; // Является ли элементом категорией
        var isExpanded = $toggleButton.attr('aria-expanded') === 'true';


         // 1. Если клик был на toggle-кнопке, ничего не делаем
         // 1. Если клик был на toggle-кнопке, ничего не делаем
Строка 85: Строка 85:
         saveTreeState();
         saveTreeState();
     });
     });
 
    // Сохраняем состояние дерева при выгрузке страницы (например, при закрытии вкладки)
    // Сохраняем состояние дерева при выгрузке страницы (например, при закрытии вкладки)
     $(window).on('beforeunload', saveTreeState);
     $(window).on('beforeunload', saveTreeState);
});
});

Версия от 13:18, 26 февраля 2025

$(document).ready(function() {
    console.log("Скрипт дерева категорий загружен.");

    // Функция для сохранения состояния дерева в localStorage
    function saveTreeState() {
        console.log("Сохраняем состояние дерева...");
        var treeState = {};
        $('.CategoryTreeSection').each(function() { // Используем CategoryTreeSection вместо CategoryTreeItem
            var $section = $(this);
            var isVisible = $section.find('.CategoryTreeChildren').is(':visible');
            var title = $section.find('.CategoryTreeToggle').data('ct-title'); // Получаем data-ct-title
            if (title) {
                treeState[title] = isVisible; // Сохраняем состояние видимости
            }
        });
        localStorage.setItem('categoryTreeState', JSON.stringify(treeState));
        console.log("Состояние дерева сохранено:", treeState);
    }

    // Функция для восстановления состояния дерева из localStorage
    function restoreTreeState() {
        console.log("Восстанавливаем состояние дерева...");
        var treeStateString = localStorage.getItem('categoryTreeState');
        if (treeStateString) {
            var treeState = JSON.parse(treeStateString);
            console.log("Состояние дерева из localStorage:", treeState);
            $('.CategoryTreeSection').each(function() { // Используем CategoryTreeSection вместо CategoryTreeItem
                var $section = $(this);
                var title = $section.find('.CategoryTreeToggle').data('ct-title'); // Получаем data-ct-title
                if (title && treeState[title] === true) {
                    console.log("Раскрываем категорию:", title);
                    $section.find('.CategoryTreeToggle').click(); // Раскрываем категорию
                }
            });
        } else {
            console.log("Состояние дерева в localStorage не найдено.");
        }
    }

    // Восстанавливаем состояние дерева при загрузке страницы
    restoreTreeState();

    // Делегируем обработку кликов на body
    $('body').on('click', '.CategoryTreeItem', function(event) {
        var $target = $(event.target);
        var $item = $(this); // Текущий элемент CategoryTreeItem
        var $toggleButton = $item.find('.CategoryTreeToggle').first();
        var isCategory = !$item.find('.CategoryTreePageBullet').length; // Является ли элементом категорией

        // 1. Если клик был на toggle-кнопке, ничего не делаем
        if ($target.hasClass('CategoryTreeToggle')) {
            console.log("Клик на кнопке раскрытия, ничего не делаем.");
            return;
        }

        // 2. Если клик по ссылке категории
        if ($target.is('a') && isCategory) {
            // Предотвращаем переход по ссылке
            event.preventDefault();

            // Переключаем состояние категории (раскрываем или сворачиваем)
            console.log("Клик по ссылке категории, переключаем состояние:", $target.attr('href'));
            $toggleButton.click();

        }
         // 3. Если клик по элементу категории (не ссылке и не странице)
        else if (isCategory) {
            // Переключаем состояние категории (раскрываем или сворачиваем)
            console.log("Клик по элементу категории (не ссылка), переключаем состояние:", $item.text().trim());
            $toggleButton.click();
        }
            // 4. Если клик по ссылке страницы или на элемент страницы
        else  {
              // Получаем ссылку страницы
                var link = $item.find('a').attr('href');
              // Переходим по ссылке страницы
                 if (link) {
                    console.log("Клик по элементу страницы, переходим:", link);
                    // Сохраняем состояние дерева перед переходом
                     saveTreeState();
                     window.location.href = link;
                  }
        }
          // Сохраняем состояние дерева после каждого клика
        saveTreeState();
    });
     // Сохраняем состояние дерева при выгрузке страницы (например, при закрытии вкладки)
    $(window).on('beforeunload', saveTreeState);
});