Usuario:Pinguipedista/Taller/MediaWiki:Gadget-interlanguage-size.js
Nota: Después de guardar, debes refrescar la caché de tu navegador para ver los cambios. Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar. Firefox: mientras presionas Mayús pulsas el botón Actualizar, (o presiona Ctrl-Shift-R). Los usuarios de Google Chrome y Safari pueden simplemente pulsar el botón Recargar. Para más detalles e instrucciones acerca de otros exploradores, véase Ayuda:Cómo limpiar la caché.
/*
* mediawiki-gadget-interlanguage-size
*
*/
//<nowiki>
// TODO: show message warnings on every fail
/* global mediaWiki, jQuery*/
(function(mw, $){
if ( window.gadgetInterlanguageSize === undefined )
{
var gadget = function () { gadget.init.apply( gadget, arguments); };
window.gadgetInterlanguageSize = gadget;
gadget.i18n = {
'en': {
'interlanguage-size-infotip': 'Compare sizes',
},
'es': {
'interlanguage-size-infotip': 'Comparar tamaños',
},
};
var language = mw.config.get('wgContentLanguage');
if ( $.inArray( language, Object.keys(gadget.i18n) ) < 0 )
{
language = 'en'; // by default
}
var skin = {}; // to store skin related strings
// just the internal classes used, easy to modify
skin['interlanguage-size-button'] = 'interlanguage-size-button';
skin['interlanguage-size-detail'] = 'interlanguage-size-detail';
// target interface
skin['p-lang-visible-interlanguage-targets'] = '' +
'#p-lang .interlanguage-link[style=""] .interlanguage-link-target, ' +
'#p-lang .interlanguage-link:not("[style]") .interlanguage-link-target';
/* mw-gadget-interlanguage-size styles: */
/* eslint-disable no-useless-concat */ // yes, I know, I put special comments between literals
skin['interlanguage-size-style'] = `` +
/* <@snippet from='mw://mediawiki.special.changeslist'> */`
.mw-plusminus-pos,
.mw-plusminus-neg,
.mw-plusminus-null {
unicode-bidi:-moz-isolate;
unicode-bidi:isolate
}
.mw-plusminus-pos {
color:#006400;
}
.mw-plusminus-neg {
color:#8b0000;
}
.mw-plusminus-null {
color:#a2a9b1;
}` /* </@snippet> */ +
/* <@snippet edited from='mw://mediawiki.interface.helpers.styles'> */`
.` + skin['interlanguage-size-detail'] + `.mw-diff-bytes:before {
content:' ('
}
.` + skin['interlanguage-size-detail'] + `.mw-diff-bytes:after {
content:')'
}` /* </@snippet> */ +
/* <@snippet edited from='mw://ext.uls.interlanguage'> */`
.` + skin['interlanguage-size-button'] + ` {
background: transparent no-repeat center top;`
/* <@image license="CC-BY-4.0" src="https://commons.wikimedia.org/wiki/File:Font_Awesome_5_solid_ruler-combined.svg" author="Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com" /> */ + `
background-image: url("//upload.wikimedia.org/wikipedia/commons/thumb/1/13/Font_Awesome_5_solid_ruler-combined.svg/14px-Font_Awesome_5_solid_ruler-combined.svg.png");
border: 0;
min-width: 16px;
min-height: 16px;
float: right;
cursor: pointer;
}
#p-lang .` + skin['interlanguage-size-button'] + `::-moz-focus-inner {
border:0
}
#p-lang .` + skin['interlanguage-size-button'] + `:focus {
outline: 1px solid #36c;
}
.skin-vector #p-lang .` + skin['interlanguage-size-button'] + ` {
margin-top: 8px;
}` /* </@snippet> */ + `
.` + skin['interlanguage-size-button'] + ` {
opacity: .6;
}
#p-lang .` + skin['interlanguage-size-button'] + `:hover {
opacity: .8;
}
.` + skin['interlanguage-size-detail'] + ` {
font-size: 95%;
}`;
/* eslint-enable no-useless-concat */
var apiGetSize = function ( title, urlApi )
{
var ver = 2;
var api = urlApi ? new mw.ForeignApi(urlApi) : new mw.Api();
return api.get ({
action: 'query',
prop: 'revisions',
rvslots: '*',
rvprop: 'size',
titles: title,
format: 'json',
formatversion: ver
})
.then ( function (data, jqXHR) {
if ( data && data.query && data.query.pages )
{
if ( ver === 2 )
{
data = data.query.pages[0];
}
else
{
data = data.query.pages[ Object.keys(data.query.pages)[0] ];
}
if ( data && data.revisions && data.revisions[0] && typeof(data.revisions[0].size) === 'number' )
{
return $.Deferred().resolve( data.revisions[0].size, jqXHR );
}
}
return $.Deferred().reject();
});
};
gadget.init = function ()
{
if ( $( skin['p-lang-visible-interlanguage-targets'] ).length > 0 )
{
mw.loader.addStyleTag( skin['interlanguage-size-style'] );
$( '#p-lang' )
.prepend(
$( '<button/>' )
.addClass( skin['interlanguage-size-button'] )
.attr( 'title', this.i18n[language]['interlanguage-size-infotip'] )
.on( 'click', this.exec )
);
}
};
gadget.exec = function ()
{
if ( $( '.' + skin['interlanguage-size-button'] ).length > 0 )
{
apiGetSize( mw.config.get('wgPageName') )
.then( function (size) {
$( '.' + skin['interlanguage-size-button'] ).remove();
var local_size = size;
if ( local_size )
{
$( skin['p-lang-visible-interlanguage-targets'] )
.each( function (i, e) {
var that = e;
var lang = e.href.split('//')[1].split('.')[0] || null;
var path = new RegExp('^' + mw.util.escapeRegExp( mw.config.get('wgArticlePath').replace('$1', '') ), '');
var name = decodeURIComponent( e.pathname.replace(path, '') ).replace( /_/g, ' ' );
if ( lang )
{
var servername = mw.config.get('wgServerName');
var projecturl = '';
if ( servername.split('.').length === 3 ) // lang.project.org
{
projecturl = servername.split('.').slice(1).join('.');
apiGetSize( name, 'https://' + lang + '.' + projecturl + mw.util.wikiScript('api') )
.then( function (size) {
var inter_size = size;
if ( inter_size )
{
var dif = (inter_size - local_size);
var tag = Math.abs(dif) > 9999 ? '<strong/>' : '<span/>';
var key = (dif > 0 ? 'mw-plusminus-pos' : (dif < 0 ? 'mw-plusminus-neg' : 'mw-plusminus-null'));
var num = (dif > 0 ? '+' : (dif < 0 ? '−' : '')) + mw.language.convertNumber( Math.abs(dif) );
$(tag)
.addClass( [ skin['interlanguage-size-detail'], key, 'mw-diff-bytes' ] )
.html(num)
.insertAfter(that);
}
});
}
}
});
}
});
}
};
if( $.inArray( mw.config.get('wgNamespaceNumber'), mw.config.get('wgContentNamespaces') ) >= 0 &&
mw.config.get('wgAction') === 'view' ) {
$.when( mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'mediawiki.ForeignApi' ] ), $.ready ).then( gadget );
}
}
})(mediaWiki, jQuery);
//</nowiki>