MediaWiki:Gadget-Nav.js
Перейти к навигации
Перейти к поиску
/**
* Gadget-Nav.js (v2.0 Final)
* Динамически загружает навигационные блоки на основе категорий.
* Выделяет жирным название текущей страницы и убирает с него ссылку.
*
* Для использования в шаблоне: <div class="auto-nav" data-cat="Имя категории">Загрузка...</div>
*/
(function (mw, $) {
function runAutoNav() {
var navBlocks = document.querySelectorAll('div.auto-nav');
if (!navBlocks.length) return;
// Получаем название текущей страницы ОДИН РАЗ, чтобы не делать это в цикле.
const currentPageTitle = mw.config.get('wgTitle');
var api = new mw.Api();
navBlocks.forEach(function (block) {
var categoryName = block.dataset.cat;
if (!categoryName || categoryName.trim() === '') {
block.textContent = 'Ошибка: имя категории (data-cat) не указано.';
block.classList.add('auto-nav-error');
return;
}
api.get({
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:' + categoryName,
cmlimit: 'max',
cmprop: 'title',
format: 'json'
}).done(function (data) {
var members = data.query && data.query.categorymembers;
if (!members || members.length === 0) {
block.textContent = 'Категория «' + categoryName + '» пуста или не найдена.';
block.classList.add('auto-nav-empty');
return;
}
var list = document.createElement('dl');
list.className = 'auto-nav-list';
members.forEach(function (page) {
var listItem = document.createElement('dd');
// --- ГЛАВНОЕ ИЗМЕНЕНИЕ ЗДЕСЬ ---
if (page.title === currentPageTitle) {
// Если название страницы из API совпадает с текущей, создаем <strong>
var strongTag = document.createElement('strong');
strongTag.className = 'selflink'; // Стандартный класс MediaWiki для таких случаев
strongTag.textContent = page.title;
listItem.appendChild(strongTag);
} else {
// В противном случае, как и раньше, создаем ссылку <a>
var link = document.createElement('a');
link.href = mw.util.getUrl(page.title);
link.textContent = page.title;
listItem.appendChild(link);
}
// --- КОНЕЦ ИЗМЕНЕНИЯ ---
list.appendChild(listItem);
});
block.innerHTML = '';
block.appendChild(list);
block.classList.add('auto-nav-loaded');
}).fail(function () {
block.textContent = 'Ошибка API при загрузке навигации.';
block.classList.add('auto-nav-error');
});
});
}
// Запускаем скрипт после полной загрузки DOM
$(runAutoNav);
})(mediaWiki, jQuery);