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

Материал из База знаний АО АСП
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 2: Строка 2:
     console.log("Скрипт дерева категорий загружен.");
     console.log("Скрипт дерева категорий загружен.");


     // Функция для сохранения состояния дерева в localStorage
     // Функция для сохранения HTML дерева в localStorage
     function saveTreeState() {
     function saveTreeHTML() {
         console.log("Сохраняем состояние дерева...");
         console.log("Сохраняем HTML дерева...");
         var treeState = {};
         var treeHTML = $('.CategoryTreeTag').html();
        $('.CategoryTreeToggle').each(function() {
         localStorage.setItem('categoryTreeHTML', treeHTML);
            var $toggle = $(this);
         console.log("HTML дерева сохранен:", treeHTML);
            var $section = $toggle.closest('.CategoryTreeSection');
            var title = $toggle.data('ct-title'); // Получаем data-ct-title
            if (title) {
                var isVisible = $section.find('.CategoryTreeChildren').css('display') !== 'none';
                treeState[title] = isVisible; // Сохраняем состояние видимости
            }
        });
         localStorage.setItem('categoryTreeState', JSON.stringify(treeState));
         console.log("Состояние дерева сохранено:", treeState);
     }
     }


     // Функция для восстановления состояния дерева из localStorage
     // Функция для восстановления HTML дерева из localStorage
     function restoreTreeState() {
     function restoreTreeHTML() {
         console.log("Восстанавливаем состояние дерева...");
         console.log("Восстанавливаем HTML дерева...");
         var treeStateString = localStorage.getItem('categoryTreeState');
         var treeHTML = localStorage.getItem('categoryTreeHTML');
         if (treeStateString) {
         if (treeHTML) {
            var treeState = JSON.parse(treeStateString);
             console.log("HTML дерева из localStorage:", treeHTML);
             console.log("Состояние дерева из localStorage:", treeState);
             $('.CategoryTreeTag').html(treeHTML);
             $('.CategoryTreeToggle').each(function() {
            console.log("HTML дерева восстановлен.");
                var $toggle = $(this);
                var $section = $toggle.closest('.CategoryTreeSection');
                var title = $toggle.data('ct-title'); // Получаем data-ct-title
                var $children = $section.find('.CategoryTreeChildren');
 
                if (title && treeState[title] === true) {
                    console.log("Раскрываем категорию:", title);
                    $children.css('display', ''); // Удаляем display: none;
                    console.log("Состояние display после раскрытия:", $children.css('display'));
                } else if (title && treeState[title] === false) {
                    console.log("Скрываем категорию:", title);
                    $children.css('display', 'none'); // Добавляем display: none;
                    console.log("Состояние display после скрытия:", $children.css('display'));
                }
            });
         } else {
         } else {
             console.log("Состояние дерева в localStorage не найдено.");
             console.log("HTML дерева в localStorage не найден.");
         }
         }
     }
     }


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


     // Делегируем обработку кликов на body
     // Делегируем обработку кликов на body
Строка 70: Строка 46:
             // Переключаем состояние категории (раскрываем или сворачиваем)
             // Переключаем состояние категории (раскрываем или сворачиваем)
             console.log("Клик по ссылке категории, переключаем состояние:", $target.attr('href'));
             console.log("Клик по ссылке категории, переключаем состояние:", $target.attr('href'));
             var $section = $toggleButton.closest('.CategoryTreeSection');
             $toggleButton.click();
            var $children = $section.find('.CategoryTreeChildren');
            if ($children.css('display') === 'none') {
                $children.css('display', ''); // Раскрываем категорию
            } else {
                $children.css('display', 'none'); // Скрываем категорию
            }
         }
         }
         // 3. Если клик по элементу категории (не ссылке и не странице)
         // 3. Если клик по элементу категории (не ссылке и не странице)
Строка 82: Строка 52:
             // Переключаем состояние категории (раскрываем или сворачиваем)
             // Переключаем состояние категории (раскрываем или сворачиваем)
             console.log("Клик по элементу категории (не ссылка), переключаем состояние:", $item.text().trim());
             console.log("Клик по элементу категории (не ссылка), переключаем состояние:", $item.text().trim());
              var $section = $toggleButton.closest('.CategoryTreeSection');
            $toggleButton.click();
            var $children = $section.find('.CategoryTreeChildren');
            if ($children.css('display') === 'none') {
                $children.css('display', ''); // Раскрываем категорию
            } else {
                $children.css('display', 'none'); // Скрываем категорию
            }
         }
         }
             // 4. Если клик по ссылке страницы или на элемент страницы
             // 4. Если клик по ссылке страницы или на элемент страницы
Строка 97: Строка 61:
                 if (link) {
                 if (link) {
                     console.log("Клик по элементу страницы, переходим:", link);
                     console.log("Клик по элементу страницы, переходим:", link);
                     // Сохраняем состояние дерева перед переходом
                     // Сохраняем HTML дерева перед переходом
                     saveTreeState();
                     saveTreeHTML();
                     window.location.href = link;
                     window.location.href = link;
                   }
                   }
         }
         }
         // Сохраняем состояние дерева после каждого клика
         // Сохраняем HTML дерева после каждого клика
         saveTreeState();
         saveTreeHTML();
     });
     });
     // Сохраняем состояние дерева при выгрузке страницы (например, при закрытии вкладки)
 
     $(window).on('beforeunload', saveTreeState);
     // Сохраняем HTML дерева при выгрузке страницы (например, при закрытии вкладки)
     $(window).on('beforeunload', saveTreeHTML);
});
});

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

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

    // Функция для сохранения HTML дерева в localStorage
    function saveTreeHTML() {
        console.log("Сохраняем HTML дерева...");
        var treeHTML = $('.CategoryTreeTag').html();
        localStorage.setItem('categoryTreeHTML', treeHTML);
        console.log("HTML дерева сохранен:", treeHTML);
    }

    // Функция для восстановления HTML дерева из localStorage
    function restoreTreeHTML() {
        console.log("Восстанавливаем HTML дерева...");
        var treeHTML = localStorage.getItem('categoryTreeHTML');
        if (treeHTML) {
            console.log("HTML дерева из localStorage:", treeHTML);
            $('.CategoryTreeTag').html(treeHTML);
            console.log("HTML дерева восстановлен.");
        } else {
            console.log("HTML дерева в localStorage не найден.");
        }
    }

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

    // Делегируем обработку кликов на 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);
                    // Сохраняем HTML дерева перед переходом
                     saveTreeHTML();
                     window.location.href = link;
                  }
        }
        // Сохраняем HTML дерева после каждого клика
        saveTreeHTML();
    });

    // Сохраняем HTML дерева при выгрузке страницы (например, при закрытии вкладки)
    $(window).on('beforeunload', saveTreeHTML);
});