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

Нет описания правки
Метка: отменено
Нет описания правки
Метка: отменено
Строка 1: Строка 1:
$(document).ready(function() {
$(document).ready(function() {
     console.log("Скрипт дерева категорий загружен.");
     console.log("Скрипт дерева категорий загружен.");
    function saveTreeHTML() {
        console.log("Сохраняем HTML дерева...");
        var treeHTML = $('#p-categorytree-portlet .CategoryTreeTag').html();
        localStorage.setItem('categoryTreeHTML', treeHTML);
        // Сохраняем состояние открытых категорий
        var expandedCategories = [];
        $('.CategoryTreeItem.expanded').each(function() {
            expandedCategories.push($(this).text().trim());
        });
        localStorage.setItem('expandedCategories', JSON.stringify(expandedCategories));
    }
    function restoreTreeHTML() {
        console.log("Восстанавливаем HTML дерева...");
        var treeHTML = localStorage.getItem('categoryTreeHTML');
        if (treeHTML) {
            $('#p-categorytree-portlet .CategoryTreeTag').html(treeHTML);
        }
        // Восстанавливаем открытые категории
        var expandedCategories = JSON.parse(localStorage.getItem('expandedCategories')) || [];
        $('.CategoryTreeItem').each(function() {
            if (expandedCategories.includes($(this).text().trim())) {
                $(this).find('.CategoryTreeToggle').first().click();
            }
        });
    }
    restoreTreeHTML();
    $('body').on('click', '#p-categorytree-portlet .CategoryTreeItem', function(event) {
        var $target = $(event.target);
        var $item = $(this);
        var $toggleButton = $item.find('.CategoryTreeToggle').first();
        var isCategory = !$item.find('.CategoryTreePageBullet').length;
        if ($target.hasClass('CategoryTreeToggle')) return;
        if ($target.is('a') && isCategory) {
            event.preventDefault();
            $toggleButton.click();
        } else if (isCategory) {
            $toggleButton.click();
        } else {
            var link = $item.find('a').attr('href');
            if (link) {
                saveTreeHTML();
                localStorage.setItem('lastOpenedPageTitle', $item.text().trim());
                window.location.href = link;
            }
        }
        saveTreeHTML();
    });


     function scrollToCategory(categoryTitle, callback) {
     function scrollToCategory(categoryTitle, callback) {
Строка 72: Строка 17:
             });
             });


            localStorage.setItem('highlightedCategory', categoryTitle);
             return true;
             return true;
         }
         }
Строка 99: Строка 43:


     function recursiveSearchForCategory() {
     function recursiveSearchForCategory() {
        console.log("Очищаем `localStorage` только при прямом входе...");
        if (!document.referrer) {
            localStorage.removeItem('lastOpenedPageTitle');
            localStorage.removeItem('highlightedCategory');
            localStorage.removeItem('expandedCategories');
        }
         var currentPageTitle = mw.config.get('wgTitle');
         var currentPageTitle = mw.config.get('wgTitle');
         if (!currentPageTitle) {
         if (!currentPageTitle) {
Строка 150: Строка 87:
         recursiveSearchForCategory();
         recursiveSearchForCategory();
     }, 500);
     }, 500);
    $(window).on('beforeunload', saveTreeHTML);
});
});