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

Нет описания правки
Нет описания правки
Строка 1: Строка 1:
$(document).ready(function() {
$(document).ready(function() {
     console.log("Скрипт дерева категорий загружен.");
     console.log("Скрипт дерева категорий загружен.");
    // Функция для сохранения состояния дерева в localStorage
    function saveTreeState() {
        console.log("Сохраняем состояние дерева...");
        var treeState = {};
        $('.CategoryTreeToggle').each(function() {
            var $toggle = $(this);
            var itemId = $toggle.closest('.CategoryTreeItem').attr('id');
            if (itemId) {
                treeState[itemId] = $toggle.attr('aria-expanded');
            }
        });
        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);
            $('.CategoryTreeToggle').each(function() {
                var $toggle = $(this);
                var itemId = $toggle.closest('.CategoryTreeItem').attr('id');
                if (itemId && treeState[itemId] === 'true') {
                    console.log("Раскрываем категорию:", itemId);
                    $toggle.click(); // Раскрываем категорию
                }
            });
        } else {
            console.log("Состояние дерева в localStorage не найдено.");
        }
    }
    // Восстанавливаем состояние дерева при загрузке страницы
    restoreTreeState();


     // Делегируем обработку кликов на body
     // Делегируем обработку кликов на body
Строка 24: Строка 62:
             console.log("Клик по ссылке категории, переключаем состояние:", $target.attr('href'));
             console.log("Клик по ссылке категории, переключаем состояние:", $target.attr('href'));
             $toggleButton.click();
             $toggleButton.click();
         }
         }
         // 3. Если клик по элементу категории (не ссылке и не странице)
         // 3. Если клик по элементу категории (не ссылке и не странице)
Строка 38: Строка 77:
                 if (link) {
                 if (link) {
                     console.log("Клик по элементу страницы, переходим:", link);
                     console.log("Клик по элементу страницы, переходим:", link);
                    // Сохраняем состояние дерева перед переходом
                    saveTreeState();
                     window.location.href = link;
                     window.location.href = link;
                   }  
                   }
 
         }
         }
          // Сохраняем состояние дерева после каждого клика
        saveTreeState();
     });
     });
    // Сохраняем состояние дерева при выгрузке страницы (например, при закрытии вкладки)
    $(window).on('beforeunload', saveTreeState);
});
});
// Сохраняем состояние дерева в локальное хранилище
function saveTreeState() {
    var treeState = {};
    $('.CategoryTreeToggle').each(function() {
        var $toggle = $(this);
        treeState[$toggle.closest('.CategoryTreeItem').attr('id')] = $toggle.attr('aria-expanded');
    });
    localStorage.setItem('treeState', JSON.stringify(treeState));
}
// Восстанавливаем состояние дерева из локального хранилища
function restoreTreeState() {
    var treeState = localStorage.getItem('treeState');
    if (treeState) {
        treeState = JSON.parse(treeState);
        $('.CategoryTreeToggle').each(function() {
            var $toggle = $(this);
            var itemId = $toggle.closest('.CategoryTreeItem').attr('id');
            if (treeState[itemId] === 'true') {
                $toggle.click(); // Раскрываем категорию
            }
        });
    }
}
// Добавляем обработчик для сохранения состояния при клике на кнопки раскрытия/закрытия
$('.CategoryTreeToggle').on('click', saveTreeState);
// Восстанавливаем состояние дерева при загрузке страницы
$(document).ready(restoreTreeState);