|
|
| Строка 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);
| |
| }); | | }); |