MediaWiki:Gadget-common-special-newpages.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
JS-код ниже относится к скрытому гаджету common-special-newpages. Связанный CSS-файл: MediaWiki:Gadget-common-special-newpages.css. Он включён по умолчанию.

После сохранения или недавних изменений очистите кэш браузера.

// Не удаляйте проверку на название подстраницы
( function() {
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Newpages' ) {
		return;
	}
	
	var formattedNamespaces = mw.config.get( 'wgFormattedNamespaces' );
	var nonFlaggedNS = [];
	$.each( formattedNamespaces, function ( i, ns ) {
		if ( i > 0 && i !== 6 && i !== 10 && i !== 14 ) {
			nonFlaggedNS.push( ns );
		}
	});
	nonFlaggedNS.push( 'Участница' );
	nonFlaggedNS = new RegExp( '^(' + nonFlaggedNS.join( '|' ) + '):' );

	var title,
		titles = [],
		link = {};
	$( 'a.mw-newpages-pagename' ).each( function ( i, lnk ) {
		title = $( lnk ).attr( 'title' );
		if ( nonFlaggedNS.test( title ) ) {
			return;
		}
		titles.push( title );
		link[ title ] = lnk;
	});
	
	function markLink( pg ) {
		var $lnk = $( link[ pg.title ] );
		var $li = $lnk.closest( 'li' );
		var className;
		var catText;
		var catClass;
		var catTip;

		if ( pg.flagged ) {
			if ( pg.lastrevid == pg.flagged.stable_revid ) {
				className = 'flaggedrevs-color-1';
			} else {
				className = 'flaggedrevs-pending';
				addLink( 'oldid=' + pg.flagged.stable_revid + '&diff=' + pg.lastrevid, 'непров' );
			}
		} else {
			className = 'flaggedrevs-unreviewed';
		}
		$li.addClass( className );

		if ( typeof pg.watched === 'string' ) {
			$lnk.wrap( '<strong class="mw-watched" />' );
		}

		if ( pg.talkid ) {
			addLink( 'curid=' + pg.talkid, '<b>обс.</b>' );
		}

		if ( pg.categories ) {
			for ( var c = 0; c < pg.categories.length; c++ ) {
				var cat = pg.categories[ c ].title.replace( /^[^:]+:/, '' ); //rm prefix
				if ( /:К быстрому удалению$/.test( cat ) && !catText ) {
					catText = 'КБУ';
					catClass = 'speedy';
					catTip = cat;
				} else if ( /:Кандидаты на удаление$/.test( cat ) ) {
					catText = 'К удалению';
					catClass = 'afd';
					catTip = cat;
				} else if ( /^Википедия:БУ:/.test( cat ) ) {
					catText = cat.replace( /^Википедия:/, '' );
					catClass = 'speedy';
					catTip = cat;
				} else if ( /^Википедия:К отсроченному удалению$/.test( cat ) ) {
					catText = 'Отсроченное';
					catClass = 'deleteslow';
					catTip = cat;
				} else if ( /:Оспариваемые быстрые удаления$/.test( cat ) ) {
					catText = 'Оспаривается';
					catClass = 'hangon';
					catTip = cat;
				}
			}
			if ( catText ) {
				var $catLink = $( '<a>' )
					.addClass( 'ruwiki-newpages-issue ruwiki-newpages-issue-' + catClass )
					.attr( 'href', mw.util.getUrl( 'Категория:' + catTip ) )
					.attr( 'target', '_blank' )
					.attr( 'title', 'Категория: ' + catTip + ' (откроется в новой вкладке)' )
					.text( '(' + catText + ')' );
				$li.append( $catLink );
			}
		}

		function addLink( href, content ) {
			var $a = $( '<a>' )
				.attr( 'href', mw.config.get( 'wgScript' ) + '?' + href )
				.html( content );
			$li
				.find( '.mw-newpages-history a:last' )
				.after( ' | ', $a );
		}
	}

	mw.loader.using( [ 'mediawiki.api', 'ext.flaggedRevs.basic', 'mediawiki.util' ], function() {
		var api = new mw.Api();
		while ( titles.length > 0 ) {
			api.get( {
				action: 'query',
				format: 'json',
				prop: [ 'info', 'flagged', 'categories' ],
				inprop: [ 'talkid', 'watched' ],
				cllimit: 500,
				titles: titles.splice( 0, 50 )
			} ).done( function( resp ) {
				if ( !resp || !( resp = resp.query ) ) {
					return;
				}
				for ( var id in resp.pages ) {
					markLink( resp.pages[ id ] );
				}
			} );
		}
	} );
}() );