User:GZWDer/Gadget-SitelinkCheck.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.
( function ( mw, $, wbt ) {
var debug = mw.util.getParamValue( 'sitelinkcheck' );
if( debug ) alert( wbt.id );
var i18nData = {
'zh': {
'check sitelink': '检查站点链接',
'intro': '检查指定站点的链接,如果链接已存在的话会给出相应的项目,不存在的话您可以创建此项目。',
'lang': '语言',
'title': '标题',
'check': '检查',
'exit': '退出',
'create': '创建',
'importinterwikis': '导入跨语言链接',
'addlabels': '自动添加标签',
'found': '$1 链接至 $2。',
'nothing found': '未找到链接至 $1 的项目。',
'redirect': '页面 $1 重定向至 $2。',
'missing': '页面 $1 不存在。',
'success': '已成功创建项目。'
}
};
var lang = 'zh';
var langParam = 'fr';
var urlLang = mw.util.getParamValue( 'site' );
if ( urlLang !== null ) {
langParam = urlLang.substr( 0, urlLang.length - 4 );
}
var titleParam = '';
var urlTitle = mw.util.getParamValue( 'page' );
if ( urlTitle !== null ) {
titleParam = urlTitle;
}
if( mw.util.getParamValue( 'createitem' ) == 'success' && wbt.id ) {
mw.notify( i18n( 'success' ) );
}
function i18n( key ) {
var msg;
if( i18nData[ lang ][ key ] ) {
msg = i18nData[ lang ][ key ];
}
else if( key in i18nData[ 'en' ] ) {
msg = i18nData[ 'en' ][ key ];
}
else {
msg = '<' + key + '>';
}
for ( var i = 1; i < arguments.length; i++ ) {
msg = msg.replace( new RegExp( '\\$' + i, 'g' ), arguments[i] );
}
msg = jqueryMsg( msg );
return msg.substr( 1, msg.length - 2 );
}
function init() {
mw.loader.using( [ 'jquery.ui' ], function() {
var $form = $( '<div>' )
.attr( 'id', 'sitelink' )
.append(
$( '<form>' )
.submit( check )
.append(
$( '<fieldset>' )
.attr( 'id', 'sitelink-form' )
.append(
$( '<legend>' )
.text( i18n( 'check sitelink' ) )
) // </legend>
.append(
$( '<p>' )
.attr( 'id', 'sitelink-intro' )
.text( i18n( 'intro' ) )
) // </p>
.append(
$( '<p>' )
.append(
$( '<label>' )
.attr( {
'for' : 'sitelink-lang',
'class' : 'sitelink-label'
} )
.text( i18n( 'lang' ) + ': ' )
)
.append(
$( '<input>' )
.attr( {
'type' : 'text',
'id' : 'sitelink-lang',
'class' : 'sitelink-input',
'value' : langParam
} )
)
) // </p>
.append(
$( '<p>' )
.append(
$( '<label>' )
.attr( {
'for' : 'sitelink-title',
'class' : 'sitelink-label'
} )
.text( i18n( 'title' ) + ': ' )
)
.append(
$( '<input>' )
.attr( {
'type' : 'text',
'id' : 'sitelink-title',
'class' : 'sitelink-input',
'value' : titleParam
} )
)
) // </p>
) // </fieldset>
) // </form>
.append(
$( '<p>' )
.attr( 'id', 'sitelink-result' )
); // </div>
var contentForm = $( $form ).appendTo( '#content' );
contentForm.dialog( {
title: '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/2/29/Symbol_question_green.svg/200px-Symbol_question_green.svg.png" width="20" alt="?" title="?" style="margin-right: 1.5em;">' + i18n( 'check sitelink' ),
autoOpen: false,
modal: true,
width: 500,
buttons: [ {
id: 'sitelink-button-check',
text: i18n( 'check' ),
click: check
}, {
id: 'sitelink-button-exit',
text: i18n( 'exit' ),
click: function() {
$( '#sitelink' ).dialog( 'close' );
}
} ]
} );
} );
var portletLink = mw.util.addPortletLink( 'p-tb', '#', i18n( 'check sitelink' ), 't-sitelink', i18n( 'check sitelink' ) );
$( portletLink ).click( show );
$( '#wb-createentity-submit' ).after(
$( '<a>' )
.attr( {
'id': 'sitelink-createentity',
'href': '#'
} )
.text( i18n( 'check sitelink' ) )
.click( show )
);
}
function show() {
$( '#sitelink-result' ).html( '' );
$( '#sitelink-title' ).attr( 'value', titleParam );
$( '#sitelink' ).dialog( 'open' );
$( '#sitelink-title' ).focus();
return false;
}
function check() {
var lang = $( '#sitelink-lang' ).attr( 'value' );
var title = $( '#sitelink-title' ).attr( 'value' );
if( debug ) alert( 'lang: ' + lang );
if( debug ) alert( 'title: ' + title );
if( !lang ) {
error( i18n( 'missing lang' ) );
return;
}
if( !title ) {
error( i18n( 'missing title' ) );
return;
}
createSpinner();
$.ajax( {
url: '//' + lang + '.wikipedia.org/w/api.php',
data: {
'format': 'json',
'action': 'query',
'prop': 'pageprops',
'titles': title,
'redirects': 'redirects'
},
dataType: 'jsonp'
} )
.done( function( data ) {
var prefix = '[[' + lang + ':';
if( data.error ) {
error( data.error.info );
}
else if( !data.query ) {
error( i18n( 'api-error' ) );
}
else if( data.query.pages['-1'] ) {
error( i18n( 'missing', prefix + data.query.pages['-1'].title + ']]' ) );
}
else if( data.query.redirects ) {
var redirect = data.query.redirects[0];
error( i18n( 'redirect', prefix + redirect.from + ']]', prefix + redirect.to + ']]' ) );
}
else {
searchItem( lang, title );
}
} )
.fail( function( jqXHR, textStatus, errorThrown ) {
error( i18n( 'api-error' ) );
} );
}
function searchItem( lang, title ) {
$.ajax( {
type: 'POST',
url: mw.util.wikiScript( 'api' ),
data: {
'action': 'wbgetentities',
'format': 'json',
'sites': lang + 'wiki',
'titles': title
}
} )
.done( function( data ) {
var id = getKey( data.entities );
var $message;
if( id === '-1' ) {
var summary = '[[:' + lang + ':' + title + ']] ([[MediaWiki talk:Gadget-SitelinkCheck.js|SC]])';
var data = { sitelinks: {} };
var site = lang.replace( /-/g, '_' ) + 'wiki';
data['sitelinks'][site] = {
'site': site,
'title': title
};
data['labels'] = {};
data['labels'][lang] = {
language: lang,
value: title.replace( /\(.*\)/g, '' ) // regex
};
wbt.getInterwikiLinks( lang, title, function( links ) {
for( var lang in links ) {
var title = links[lang];
var site = lang.replace( /-/g, '_' ) + 'wiki';
data['sitelinks'][site] = {
'site': site,
'title': title
};
data['labels'][lang] = {
language: lang,
value: title.replace( /\(.*\)/g, '' ) // regex
};
}
if( debug ) alert( $.toJSON( data ) );
wbt.createItem( data, summary, success, error );
}, error );
}
else {
id = 'Q' + id.substr( 1 );
$message = $( '<p>' ).append( i18n( 'found', '[[' + id + ']]', '[[' + lang + ':' + title + ']]' ) );
}
$( '#sitelink-result' ).html( $message );
} )
.fail( function( jqXHR, textStatus, errorThrown ) {
error( i18n( 'api-error' ) );
} );
}
function success( data ) {
}
function error( msg ) {
$( '#sitelink-result' ).html( msg );
}
function createSpinner() {
$( '#sitelink-result' ).html( '<div id="sitelink-spinner" />' );
$.createSpinner( {
size: 'large',
type: 'block',
id: 'sitelink-spinner'
} ).replaceAll( '#sitelink-spinner' );
}
function getKey( data ) {
for ( var prop in data )
return prop;
}
$( document ).ready( init );
} )( mediaWiki, jQuery, wikibaseTools );