MediaWiki:Common.js
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
/* Счётчик тем на вкладке "Обсуждение" */
$( function () {
var namespace = mw.config.get( 'wgNamespaceNumber' );
var pageName = mw.config.get( 'wgPageName' );
// Не работаем на специальных страницах
if ( namespace < 0 ) {
return;
}
// Находим вкладку "Обсуждение"
var talkTab = document.querySelector( '#ca-talk a' );
if ( !talkTab ) {
return;
}
/*
* В MediaWiki пространства имён идут парами:
* 0 -> 1 Основное -> Обсуждение
* 2 -> 3 Участник -> Обсуждение участника
* 4 -> 5 Проект -> Обсуждение проекта
* и т.д.
*
* Если мы уже на странице обсуждения,
* используем её саму.
*/
var talkPage;
if ( namespace % 2 === 1 ) {
// Уже на странице обсуждения
talkPage = pageName;
} else {
// Берём ссылку самой вкладки "Обсуждение".
// Так мы не зависим от языка пространства имён.
var href = talkTab.getAttribute( 'href' );
if ( !href ) {
return;
}
try {
var url = new URL( href, window.location.origin );
talkPage =
url.searchParams.get( 'title' ) ||
decodeURIComponent(
url.pathname.substring(
url.pathname.lastIndexOf( '/' ) + 1
)
);
} catch ( e ) {
return;
}
}
if ( !talkPage ) {
return;
}
var api = new mw.Api();
api.get( {
action: 'parse',
page: talkPage,
prop: 'sections',
formatversion: 2
} ).done( function ( data ) {
if ( !data.parse || !data.parse.sections ) {
return;
}
/*
* Считаем заголовки второго уровня:
*
* == Тема обсуждения ==
*
* Подзаголовки === ... === в счётчик не попадут.
*/
var count = data.parse.sections.filter( function ( section ) {
return Number( section.level ) === 2;
} ).length;
if ( count === 0 ) {
return;
}
var badge = document.createElement( 'span' );
badge.className = 'talk-topic-count';
badge.textContent = count;
badge.title =
count === 1
? '1 тема в обсуждении'
: count + ' тем в обсуждении';
talkTab.appendChild( badge );
} );
} );