Usuario:Ciencia Al Poder/extraedatosPDanual.js
De WikiDex
Ir a la navegaciónIr a la búsqueda
Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.
- Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
- Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
- Opera: Presiona Ctrl+F5.
/**
* Extrae datos anuales del Pokémon Destacado.
* Ejecuta en páginas como [[WikiDex:Pokémon Destacado/2010]]
* */
( function( $, mw ) {
var
_anyo = 0,
_meses = [
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
_init = function() {
var page = mw.config.get( 'wgPageName' ),
api = new mw.Api(), anyo;
anyo = /\/(\d{4})$/.exec( page )||[][1];
_anyo = parseInt( anyo, 10 ) || ( new Date() ).getFullYear();
api.get( {
action: 'parse',
format: 'json',
page: page,
'prop': 'parsetree'
} ).done( _parseContent );
},
_parseContent = function( data ) {
var
datos = [],
text = data.parse.parsetree['*'],
parser = new DOMParser(),
xdoc = parser.parseFromString( text, 'application/xml' ),
h3s = xdoc.querySelectorAll( 'h[level="3"]' ),
mes, idxmes, hsibling, finalElem, puesto;
for ( var h3 of h3s ) {
mes = _getHText( h3.textContent ).split( ' ' )[0];
idxmes = _meses.indexOf( mes );
if ( idxmes !== -1 ) {
hsibling = h3.nextSibling;
puesto = 1;
while ( true ) {
if ( !hsibling ||
( hsibling.nodeType == 1 && hsibling.nodeName == 'h' ) )
{
break;
}
if ( hsibling.nodeType == 1 && hsibling.nodeName == 'template' ) {
finalElem = _parseTemplate( hsibling, idxmes + 1, puesto );
if ( finalElem ) {
datos.push( finalElem );
puesto++;
}
}
hsibling = hsibling.nextSibling;
}
}
}
console.log( 'Final:', datos );
},
_getHText = function( cont ) {
return $.trim( cont.replace( /^=+/, '' ).replace( /=+$/, '' ) );
},
_parseTemplate = function( elem, mes, puesto ) {
var finalElem, parts, nom, val;
finalElem = { 'año': _anyo, mes: mes, puesto: puesto };
if ( elem.querySelector( ':scope > title' ).textContent != 'Pokémon Destacado' ) {
console.warn( 'Plantilla desconocida' )
return;
}
parts = elem.querySelectorAll( ':scope > part' );
for ( var part of parts ) {
nom = part.querySelector( ':scope > name' ).textContent;
val = part.querySelector( ':scope > value' ).textContent;
finalElem[nom] = ( nom == 'semana' || nom == 'votos' ) ? parseInt( val, 10 ) : val ;
}
return finalElem;
}
;
$.when( mw.loader.using([ 'mediawiki.api' ]), $.ready ).then( _init );
} )( $, mw );