User:ValterVB/Dis.js
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)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/**
* On request adds an icon to sitelinks that link to a disambiguation or a redirect.
*
* To use it add this to your common.js:
* // [[User:Matěj Suchánek/checkSitelinks.js]]
* mw.loader.load( '//www.wikidata.org/w/index.php?title=User:Matěj_Suchánek/checkSitelinks.js&action=raw&ctype=text/javascript' );
*
* You are welcome to suggest more special cases this script could indicate.
*
* Author: Matěj Suchánek
* Idea: ValterVB
*/
( function ( mw, $ ) {
if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ||
!mw.config.exists( 'wbEntity' )
) {
return;
}
var sitelinks = JSON.parse( mw.config.get( 'wbEntity' ) ).sitelinks;
var checker = $( '<span>' )
.addClass( 'checker' )
.append( '[' )
.append(
$( '<a>' )
.attr( 'href', '#' )
.text( 'Check sitelinks!' )
)
.append( ']' );
function main() {
$( '.wikibase-sitelinkgroupview' ).find( '.wikibase-edittoolbar-container' ).append( checker );
$( '.checker' ).each( function() {
var groupview = $( this ).closest( '.wikibase-sitelinkgroupview' );
var group = groupview.data( 'wb-sitelinks-group' );
var sitelinks = groupview.find( '.wikibase-sitelinkview.listview-item' );
if ( sitelinks.length === 0 ) {
$( this ).hide();
} else {
var icon = $( '<span>' ).addClass( 'sitelink-icon sitelink-icon-hidden sitelink-icon-' + group );
sitelinks.append( icon );
}
});
$( '.checker' ).on( 'click', 'a', function( event ) {
event.preventDefault();
var sitelinkgroupview = $( this ).closest( '.wikibase-sitelinkgroupview' );
var group = sitelinkgroupview.data( 'wb-sitelinks-group' );
$( '.disambig-icon.sitelink-icon-' + group )
.addClass( 'sitelink-icon-hidden' )
.removeClass( 'disambig-icon' );
$( '.redirect-icon.sitelink-icon-' + group )
.addClass( 'sitelink-icon-hidden' )
.removeClass( 'redirect-icon' );
sitelinkgroupview.find( '.wikibase-sitelinkview.listview-item' ).each( function() {
var site = $( this ).data( 'wb-siteid' );
if ( site in sitelinks ) {
var split = site.match( /^(.*)(wiki[a-z]*)$/i );
var language = split[1];
var family = split[2];
switch ( language ) {
case 'meta':
case 'commons':
case 'species':
family = 'wikimedia';
break;
case 'mediawiki':
case 'wikidata':
return;
default:
language = language.replace( /_/g, '-' );
if ( family === 'wiki' ) {
family = 'wikipedia';
}
}
var page = sitelinks[site].title;
var $this = $( this );
$.ajax( {
url: '//' + language + '.' + family + '.org/w/api.php',
data: {
'action': 'query',
'format': 'json',
'indexpageids': '',
'ppprop': 'disambiguation',
'prop': 'pageprops',
'redirects': '',
'titles': page
},
dataType: 'jsonp',
success: function( data ) {
var icon = $this.find( '.sitelink-icon-' + group );
if ( 'redirects' in data.query ) {
icon.addClass( 'redirect-icon' ).removeClass( 'sitelink-icon-hidden' );
} else if ( 'pageprops' in data.query.pages[data.query.pageids[0]] ) {
icon.addClass( 'disambig-icon' ).removeClass( 'sitelink-icon-hidden' );
}
}
} );
}
} );
} );
}
mw.loader.load( '//www.wikidata.org/w/index.php?title=User:Matěj_Suchánek/checkSitelinks.css&action=raw&ctype=text/css', 'text/css' );
$( main );
} ( mediaWiki, jQuery ) );