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);

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

$(document).ready(function() {
    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').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; // Является ли элементом категорией
        var isExpanded = $toggleButton.attr('aria-expanded') === 'true';

        // 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);
});