User:Matěj Suchánek/markDisambigs.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// <nowiki>
( function( mw, wb, $ ) {
if ( [ 0, 120 ].indexOf( mw.config.get( 'wgNamespaceNumber' ) ) === -1 ) { // fixme: 146 [[phab:T196349]]
return;
}
var api, repoApi,
selectors = [];
function doSnak( snak ) {
return snak.datavalue && snak.datavalue.type == 'wikibase-entityid';
}
function idFromSnak( snak ) {
return snak.datavalue.value.id;
}
function pushIfNotIn( items, snak ) {
var id = idFromSnak( snak );
if ( items.indexOf( id ) === -1 ) {
items.push( id );
}
}
function addIndicators() {
if ( !selectors.length ) {
return;
}
mw.util.addCSS( '.mw-disambig { padding-right: 30px; ' +
'background: url("https://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Disambig.svg/20px-Disambig.svg.png") no-repeat right; }' );
$.each( selectors, function ( i, selector ) {
$( selector )
.addClass( 'mw-disambig' );
} );
}
function nextBatch( items ) {
if ( !items.length ) {
$( addIndicators );
return;
}
var batch = [];
while ( items.length ) {
batch.push( items.pop() );
if ( batch.length == 50 ) {
break;
}
}
repoApi.getEntities( batch, 'claims' ).done( function( data ) {
$.each( data.entities, function( entityId, entity ) {
for ( var i in entity.claims.P31 || [] ) {
if (
entity.claims.P31[i].mainsnak.datavalue &&
entity.claims.P31[i].mainsnak.datavalue.value.id == 'Q4167410'
) {
selectors.push( '.wikibase-snakview-value > a[href$="' + entityId + '"]' );
break;
}
}
} );
nextBatch( items );
} );
}
var apiLoaded = mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'wikibase.api.RepoApi' ] )
.then( function () {
api = new mw.Api();
repoApi = new wb.api.RepoApi( api );
} );
// TODO: hook for new statements
mw.hook( 'wikibase.entityPage.entityLoaded' ).add( function ( entity ) {
var items = [];
$.each( entity.claims || {}, function( prop, claims ) {
$.each( claims, function( i, claim ) {
if ( doSnak( claim.mainsnak ) ) {
pushIfNotIn( items, claim.mainsnak );
}
$.each( claim.qualifiers || {}, function( qprop, qualifiers ) {
$.each( qualifiers, function( j, qualifier ) {
if ( doSnak( qualifier ) ) {
pushIfNotIn( items, qualifier );
}
} );
} );
$.each( claim.references || [], function( j, ref ) {
$.each( ref.snaks, function( refprop, snaks ) {
$.each( snaks, function( k, snak ) {
if ( doSnak( snak ) ) {
pushIfNotIn( items, snak );
}
} );
} );
} );
} );
} );
apiLoaded.then( function () {
nextBatch( items );
} );
} );
} )( mediaWiki, wikibase, jQuery );
// </nowiki>