MediaWiki:Common.js: различия между версиями
Shihov (обсуждение | вклад) Нет описания правки Метка: отменено |
Shihov (обсуждение | вклад) Нет описания правки Метка: отменено |
||
| Строка 42: | Строка 42: | ||
}); | }); | ||
function scrollToCategory(categoryTitle) { | function scrollToCategory(categoryTitle, callback) { | ||
var $categoryItem = $('#p-categorytree-portlet .CategoryTreeItem').filter(function() { | var $categoryItem = $('#p-categorytree-portlet .CategoryTreeItem').filter(function() { | ||
return $(this).text().trim() === categoryTitle; | return $(this).text().trim() === categoryTitle; | ||
| Строка 54: | Строка 54: | ||
$('.CategoryTreeItem').removeClass('highlighted'); | $('.CategoryTreeItem').removeClass('highlighted'); | ||
$categoryItem.addClass('highlighted'); | $categoryItem.addClass('highlighted'); | ||
if (callback) callback(true); | |||
}); | }); | ||
| Строка 60: | Строка 61: | ||
} | } | ||
if (callback) callback(false); | |||
return false; | return false; | ||
} | |||
function expandParentCategories($categoryItem, callback) { | |||
var $parentCategory = $categoryItem.closest('.CategoryTreeChildren').prev('.CategoryTreeItem'); | |||
if ($parentCategory.length) { | |||
var $toggleButton = $parentCategory.find('.CategoryTreeToggle').first(); | |||
if ($toggleButton.length && !$parentCategory.hasClass('expanded')) { | |||
console.log("Раскрываем родительскую категорию:", $parentCategory.text().trim()); | |||
$toggleButton.click(); | |||
setTimeout(function() { | |||
expandParentCategories($parentCategory, callback); | |||
}, 800); | |||
} else { | |||
callback(); | |||
} | |||
} else { | |||
callback(); | |||
} | |||
} | } | ||
| Строка 66: | Строка 86: | ||
var $toggleButton = $parent.find('.CategoryTreeToggle').first(); | var $toggleButton = $parent.find('.CategoryTreeToggle').first(); | ||
if ($toggleButton.length && !$parent.hasClass('expanded')) { | if ($toggleButton.length && !$parent.hasClass('expanded')) { | ||
console.log("Раскрываем:", $parent.text().trim()); | |||
$toggleButton.click(); | $toggleButton.click(); | ||
setTimeout(function() { | setTimeout(function() { | ||
if (scrollToCategory(mw.config.get('wgTitle'))) { | if (scrollToCategory(mw.config.get('wgTitle'), callback)) { | ||
callback(true); | callback(true); | ||
} else { | } else { | ||
| Строка 82: | Строка 102: | ||
function recursiveSearchForCategory() { | function recursiveSearchForCategory() { | ||
console.log("Очищаем localStorage перед поиском..."); | console.log("Очищаем localStorage перед поиском..."); | ||
localStorage.removeItem('lastOpenedPageTitle'); | |||
localStorage.removeItem('highlightedCategory'); | |||
var currentPageTitle = mw.config.get('wgTitle'); | var currentPageTitle = mw.config.get('wgTitle'); | ||
| Строка 93: | Строка 113: | ||
console.log("Начинаем поиск категории для текущей страницы:", currentPageTitle); | console.log("Начинаем поиск категории для текущей страницы:", currentPageTitle); | ||
if (scrollToCategory(currentPageTitle)) | var $categoryItem = $('#p-categorytree-portlet .CategoryTreeItem').filter(function() { | ||
return $(this).text().trim() === currentPageTitle; | |||
}); | |||
if ($categoryItem.length) { | |||
expandParentCategories($categoryItem, function() { | |||
scrollToCategory(currentPageTitle); | |||
}); | |||
return; | return; | ||
} | } | ||