|
|
Строка 1: |
Строка 1: |
| $(document).ready(function() {
| |
| console.log("Скрипт дерева категорий загружен.");
| |
|
| |
|
| $('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) {
| |
| window.location.href = link;
| |
| }
| |
| }
| |
| });
| |
|
| |
| function scrollToCategory(categoryTitle) {
| |
| var $categoryItem = $('#p-categorytree-portlet .CategoryTreeItem').filter(function() {
| |
| return $(this).text().trim() === categoryTitle;
| |
| });
| |
|
| |
| if ($categoryItem.length) {
| |
| console.log("Категория найдена, перематываем...");
| |
| $('#p-categorytree-portlet').animate({
| |
| scrollTop: $categoryItem.position().top - 50
| |
| }, 500, function() {
| |
| $('#p-categorytree-portlet .CategoryTreeItem').removeClass('highlighted');
| |
| $categoryItem.addClass('highlighted');
| |
| });
| |
| return true;
| |
| }
| |
|
| |
| return false;
| |
| }
| |
|
| |
| function expandAndFindCategory($parent, callback) {
| |
| var $toggleButton = $parent.find('.CategoryTreeToggle').first();
| |
| var isExpanded = $toggleButton.attr('aria-expanded') === 'true';
| |
|
| |
| if ($toggleButton.length && !isExpanded) {
| |
| $toggleButton.click();
| |
|
| |
| setTimeout(function() {
| |
| if (scrollToCategory(mw.config.get('wgTitle'))) {
| |
| callback(true);
| |
| } else {
| |
| callback(false);
| |
| }
| |
| }, 1000);
| |
| } else {
| |
| callback(false);
| |
| }
| |
| }
| |
|
| |
| function recursiveSearchForCategory() {
| |
| var currentPageTitle = mw.config.get('wgTitle');
| |
| if (!currentPageTitle) {
| |
| console.log("Не удалось определить текущую страницу.");
| |
| return;
| |
| }
| |
|
| |
| console.log("Начинаем поиск категории для текущей страницы:", currentPageTitle);
| |
|
| |
| if (scrollToCategory(currentPageTitle)) {
| |
| return;
| |
| }
| |
|
| |
| var $categoryItems = $('#p-categorytree-portlet .CategoryTreeItem');
| |
| var index = 0;
| |
|
| |
| function processNext() {
| |
| if (index >= $categoryItems.length) {
| |
| console.log("Категория для текущей страницы не найдена.");
| |
| return;
| |
| }
| |
|
| |
| var $item = $($categoryItems[index]);
| |
| expandAndFindCategory($item, function(found) {
| |
| if (!found) {
| |
| index++;
| |
| processNext();
| |
| }
| |
| });
| |
| }
| |
|
| |
| processNext();
| |
| }
| |
|
| |
| setTimeout(function() {
| |
| recursiveSearchForCategory();
| |
| }, 500);
| |
| });
| |