コンテンツにスキップ

利用者:冰川碧生/common.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

if ( mw.config.get( 'wgAction' ) === 'view' && mw.config.get( 'wgNamespaceNumber' ) >= 0 ) {
	mw.loader.using( [ 'mediawiki.util', 'mediawiki.api' ] ).done( function () {
		var api = new mw.Api(),
			cache = {},
			pathPrefix = mw.format( mw.config.get( 'wgArticlePath' ), '' ),
			ignoredClasses = [
				'.new',
				'.extiw',
				'.external',
				'.internal',
				'.image',
				'.mw-redirect'
			].join( ',' ),
			selector = mw.format( 'a[href^="$1"]:not($2)', pathPrefix, ignoredClasses ),
			query = {
				formatversion: 2,
				titles: mw.config.get( 'wgPageName' ),
				prop: 'info',
				generator: 'links',
				gpllimit: 'max',
				gplnamespace: 0
			},
			threshold = 13000;
		
		function makeRequest( query, cont ) {
			var apiPromise = api.get( $.extend( query, cont ) );
			
			return apiPromise.then( function ( data ) {
				( data.query && data.query.pages || [] ).filter( function ( obj ) {
					return 'length' in obj;
				} ).forEach( function ( obj ) {
					cache[ obj.title ] = obj.length;
				} );
				
				if ( data[ 'continue' ] ) {
					return makeRequest( query, data[ 'continue' ] );
				} else {
					return undefined;
				}
			} ).promise( {
				abort: apiPromise.abort
			} );
		}
		
		mw.util.addCSS( '.stub { color: cyan; }' ); // [[phab:T284917]]
		
		mw.hook( 'wikipage.content' ).add( function ( $content ) {
			makeRequest( query ).done( function () {
				if ( Object.keys( cache ).length ) {
					$content
						.find( selector )
						.filter( function () {
							var href = this.getAttribute( 'href' ),
								title = decodeURI( href.replace( pathPrefix, '' ).replace( /_/g, ' ' ) );
							
							return title in cache && cache[ title ] <= threshold;
						} )
						.addClass( 'stub' );
				}
			} );
		} );
	} );
}