Wikipedysta:Peter Bowman/highlight-stubs.js
Wygląd
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
/**
* Zaznacza innym kolorem linki do stubów. Domyślnie przyjmuje 500 bajtów jako
* maksymalny rozmiar strony kwalifikującej się jako stub. Tę wartosć można
* dostosować, ustawiając zmienną `stubThreshold` przed wywołaniem skryptu:
*
* // w [[Specjalna:Moja strona/common.js]]:
* window.stubThreshold = 1000;
* importScript( 'User:Peter Bowman/highlight-stubs.js' );
*
* Autor: [[User:Peter Bowman]].
* Opracowano na podstawie [[wikt:MediaWiki:Gadget-false-blue-links.js]].
*/
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 = Number( window.stubThreshold ) || 500;
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: #723; }' ); // [[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' );
}
} );
} );
} );
}