Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//===========================================================================
// Markiert Links auf ausgezeichnete Artikel,
// sowohl in der normalen Artikelansicht als auch in der Vorschau
// Herkunft: Benutzer:Fomafix
// entsprechende Änderungen: Benutzer:Doc Taxon und Benutzerin:Giftpflanze
//===========================================================================
var awardsCheck = {
cat : {
'Kategorie:Wikipedia:Exzellent' : {
className : 'ea-link',
titleAppend : ' [exzellent]',
style : '',
css : 'background:url("https://upload.wikimedia.org/wikipedia/commons/4/41/Qsicon_Exzellent.svg") no-repeat right/10px; padding-right:11px; padding-top:10px;',
cssAfter : ''
},
'Kategorie:Wikipedia:Lesenswert' : {
className : 'lw-link',
titleAppend : ' [lesenswert]',
style : '',
css : 'background:url("https://upload.wikimedia.org/wikipedia/commons/4/43/Qsicon_lesenswert.svg") no-repeat right/10px; padding-right:11px; padding-top:10px;',
cssAfter : ''
},
'Kategorie:Wikipedia:Informative Liste' : {
className : 'ilp-link',
titleAppend : ' [informativ]',
style : '',
css : 'background:url("https://upload.wikimedia.org/wikipedia/commons/a/a5/Qsicon_informativ.svg") no-repeat right/10px; padding-right:11px; padding-top:10px;',
cssAfter : ''
}
},
queryUrlView : mw.util.wikiScript( 'api' ) + '?action=query&format=json&rawcontinue='
+ '&prop=categories&pageids=' + mw.config.get( 'wgArticleId' ) + '&callback=awardsCheck.viewResultArrived'
+ '&generator=links&redirects&gpllimit=max&gplnamespace=0&cllimit=max&indexpageids'
+ '&nocache=' + mw.config.get( 'wgCurRevisionId' ), //Break client caching, when page has been edited
queryUrlPreview : mw.util.wikiScript( 'api' ) + '?action=query&format=json&rawcontinue=&prop=categories'
+ '&cllimit=max&redirects&indexpageids',
titles : {},
count : 0,
previewQueryCount : 0,
execute : function () {
if ( window.awardsCheckOnlyCheckMainNS && mw.config.get( 'wgNamespaceNumber' ) !== 0 ) return;
//Use &clcategories to reduce needed queries
var cats = [];
var classes = [];
var css = '';
for ( var name in awardsCheck.cat )
if ( awardsCheck.cat[name].className ) {
cats.push( encodeURIComponent( name ) );
classes.push( awardsCheck.cat[name].className );
if ( awardsCheck.cat[name].style )
css += '.' + awardsCheck.cat[name].className + ':after {' + awardsCheck.cat[name].style + awardsCheck.cat[name].cssAfter + '}';
css += '.' + awardsCheck.cat[name].className + '{' + awardsCheck.cat[name].css + '}';
}
awardsCheck.queryUrlView += '&clcategories=' + cats.join( '|' );
awardsCheck.queryUrlPreview += '&clcategories=' + cats.join( '|' );
var action = mw.config.get( 'wgAction' );
if ( action === 'submit' ) awardsCheck.doPreviewQueries();
else if ( action === 'view' || action === 'historysubmit' || action === 'purge' )
mw.loader.load( awardsCheck.queryUrlView );
else {//"Show preview on first edit" enabled?
var prev = document.getElementById( 'wikiPreview' );
if ( prev && prev.firstChild ) mw.loader.load( awardsCheck.queryUrlView );
}
mw.util.addCSS( css );
},
storeTitles : function ( res ) {
if ( !res || !res.query || !res.query.pageids ) return;
var q = res.query;
var redirects = {};
if ( q.redirects ) for ( var i = 0; i < q.redirects.length; i++ ) {
var r = q.redirects[i];
if ( !redirects[r.to] ) redirects[r.to] = [];
redirects[r.to].push( r.from );
}
for ( var i = 0; i < q.pageids.length; i++ ) {
var page = q.pages[q.pageids[i]];
if ( page.missing === '' || page.ns !== 0 || !page.categories ) continue;
for ( var j = 0; j < page.categories.length; j++ ) {
var cat = awardsCheck.cat[page.categories[j].title];
if ( !cat ) continue;
awardsCheck.count++;
awardsCheck.titles[page.title] = cat;
if ( !redirects[page.title] ) break;
for ( var k = 0; k < redirects[page.title].length; k++ )
awardsCheck.titles[redirects[page.title][k]] = cat;
break;
}
}
},
markLinks : function () {
if ( !awardsCheck.count ) return;
var links = awardsCheck.getLinks( 'wikiPreview' ) || awardsCheck.getLinks( 'bodyContent' )
|| awardsCheck.getLinks( 'mw_contentholder' ) || awardsCheck.getLinks( 'article' );
if ( !links ) return;
for ( var i = 0; i < links.length; i++ ) {
if ( links[i].className === 'image' ) continue; //Don't mess with images!
var cat = awardsCheck.titles[links[i].title];
if ( !cat ) continue;
links[i].className += " " + cat.className;
links[i].title += cat.titleAppend;
}
},
viewResultArrived : function ( res ) {
awardsCheck.storeTitles( res );
if ( res && res['query-continue'] ) {
var c = res['query-continue'];
if ( c.categories ) {
mw.loader.load( awardsCheck.queryUrlView + '&clcontinue='
+ encodeURIComponent( c.categories.clcontinue ) );
} else if ( c.links ) {
awardsCheck.queryUrlView = awardsCheck.queryUrlView.replace( /&gplcontinue=.*|$/,
'&gplcontinue=' + encodeURIComponent( c.links.gplcontinue ) );
mw.loader.load( awardsCheck.queryUrlView );
}
} else awardsCheck.markLinks();
},
PreviewQuery : function ( titles ) {
awardsCheck.previewQueryCount++;
//We have to keep the titles in memory in case we get a query-continue
this.data = 'titles=' + titles.join( '|' );
this.doQuery( awardsCheck.queryUrlPreview );
},
doPreviewQueries : function () {
var links = awardsCheck.getLinks( 'wikiPreview' );
if ( !links ) return;
var titles = []; var m;
var unique = {};
var urlPrefix = mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace( /\$1/, '' );
var siteRegex = new RegExp( $.escapeRE( urlPrefix ) + '([^#]*)' );
//We only care for main ns pages, so we can filter out the most common cases to save some requests
var namespaceRegex = /^((Benutzer|Wikipedia|Datei|MediaWiki|Vorlage|Hilfe|Kategorie|Portal)(_Diskussion)?|Spe[cz]ial|Diskussion):/i;
for ( var i = 0; i < links.length; i++ ) {
if ( !links[i].title || !( m = links[i].href.match( siteRegex ) )
|| m[1].match( namespaceRegex ) || unique[m[1]] ) continue;
unique[m[1]] = true; //Avoid requesting same title multiple times
titles.push( m[1].replace( /_/g, '%20' ) ); //Avoid normalization of titles
if ( titles.length < 50 ) continue;
new awardsCheck.PreviewQuery( titles );
titles = [];
}
if ( titles.length ) new awardsCheck.PreviewQuery( titles );
},
getLinks : function ( id ) {
var el = document.getElementById( id );
return el && el.getElementsByTagName( 'a' );
}
};
awardsCheck.PreviewQuery.prototype.doQuery = function ( url ) {
var q = this;
var req = sajax_init_object();
if ( !req ) return;
req.open( 'POST', url, true );
req.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
req.onreadystatechange = function () {
if ( req.readyState === 4 && req.status === 200 )
eval( 'q.resultArrived(' + req.responseText + ');' );
};
req.send( q.data );
delete req;
};
awardsCheck.PreviewQuery.prototype.resultArrived = function ( res ) {
awardsCheck.storeTitles( res );
if ( res && res['query-continue'] && res['query-continue'].categories ) {
this.doQuery( awardsCheck.queryUrlPreview + '&clcontinue='
+ encodeURIComponent( res['query-continue'].categories.clcontinue ) );
} else awardsCheck.previewQueryCount--;
if ( !awardsCheck.previewQueryCount ) awardsCheck.markLinks();
};
if ( mw.config.get( 'wgNamespaceNumber' ) >= 0 ) $( awardsCheck.execute );