MediaWiki:Common.js/Clases/CreaEnlacesDex.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.
// <pre>
/******************************
* CreaEnlacesDex: Obtiene la información esencial de las plantillas Cuadro Pokémon o
* Cuadro Movimiento para generar una lista de enlaces a otras Pokédex. Guarda en almacenamiento local
* la información para poder generar la información al editar una sección cualquiera o previsualizar
*
* Copyright (C) 2007 - 2013 Jesús Martínez Novo ([[User:Ciencia Al Poder]])
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*/
window.CreaEnlacesDex = (function($, mw) {
'use strict';
var T_POKEMON = 'p',
T_MOVIMIENTO = 'm',
T_BAYA = 'b',
// Constantes
T_EN = ' (en inglés)',
T_G = ' Generación',
T_UBP = 'http://bulbapedia.bulbagarden.net/wiki/',
T_UGN = 'http://www.guiasnintendo.com/',
T_UGN3 = T_UGN+'3_GB_GameBoy/',
T_UGN1 = T_UGN+'1_GAMEBOY_ADVANCE/',
T_UGN0 = T_UGN+'0_NINTENDO_DS/Pokemon_',
T_UVE = 'http://veekun.com/dex/',
T_USP = 'http://www.serebii.net/pokedex',
T_USA = 'http://www.serebii.net/attackdex',
T_USM = 'http://www.smogon.com/dex/sm/',
T_GN = 'Guías Nintendo',
T_GNP = T_GN+': Pokémon ',
T_S = 'Serebii',
T_SM = 'Smogon',
SHTML = '.shtml',
_generaciones = ['Primera', 'Segunda', 'Tercera', 'Cuarta', 'Quinta', 'Sexta', 'Séptima'],
_storeTag = 'DexItem',
_vars = {
// Tipo: Pokémon o movimiento
tipo: null,
// Nombre del artículo
nombreArt: null,
// Nombre del Pokémon/Movimiento
nombre: null,
// Nombre en inglés
ingles: null,
// Número en Pokédex Nacional
num: null,
// Número en Pokédex Hoenn
hoenn: null,
// Generación
generacion: 999
},
_renderFn = null,
_renderLink = null,
_rendered = false,
// ** Funciones **
// Inicio
init = function() {
if ( getFromPage() || getFromStorage() ) {
saveOnExit();
if (_vars.tipo === T_POKEMON) genPoke();
if (_vars.tipo === T_MOVIMIENTO) genMov();
if (_vars.tipo === T_BAYA) genBaya();
setToStorage();
}
},
// Obtener guardado de storage
// formato: "tipo:p|nombre:asdf|num:000|hoenn:000"
getFromStorage = function() {
var storeStr;
try {
storeStr = localStorage.getItem(_storeTag);
} catch (e) { }
if (!storeStr) {
return false;
}
for (var i = 0, p = storeStr.split('|'); i < p.length; i++) {
var ar = p[i].split(':');
if (ar.length == 2) _vars[ar[0]] = ar[1];
}
if (!_vars.nombreArt || !_vars.nombre) {
return false;
}
return (_vars.nombreArt === mw.config.get('wgPageName'));
},
// Obtener de la página
getFromPage = function() {
var eNombrePoke = $('#nombrepokemon'),
eNumNacional = $('#numeronacional'),
eNombreMov = $('#nombremovimiento'),
eNumBaya = $('#numerobaya'), n;
_vars.nombreArt = mw.config.get('wgPageName');
if ( eNombrePoke.length && eNumNacional.length ) {
_vars.tipo = T_POKEMON;
_vars.nombre = $.trim(eNombrePoke.text());
n = parseInt($.trim(eNumNacional.text()), 10);
_vars.num = (!isNaN(n) && n > 0) ? n : 0;
n = parseInt($.trim($('#numerohoenn').text()), 10);
_vars.hoenn = (!isNaN(n) && n > 0) ? n : 0;
return true;
} else if (eNombreMov.length) {
_vars.tipo = T_MOVIMIENTO;
_vars.nombre = $.trim(eNombreMov.text());
_vars.ingles = $.trim($('#nombreingles').text());
for (var i = 0, gentxt = $.trim($('a:eq(0)', '#generacion').text()); i < _generaciones.length; i++) {
if (_generaciones[i] === gentxt) {
_vars.generacion = i+1;
break;
}
}
return true;
} else if (eNumBaya.length) {
_vars.tipo = T_BAYA;
_vars.nombre = _vars.nombreArt;
_vars.ingles = $.trim($('#nombreingles').text());
n = parseInt($.trim($('#numerobaya').text()), 10);
_vars.num = (!isNaN(n) && n > 0) ? n : 0;
return true;
}
return false;
},
// Setea al salir
saveOnExit = function() {
$(window).bind('unload', setToStorage);
},
// Guarda en storage
setToStorage = function() {
var sz = [];
for (var elem in _vars) {
if (_vars[elem]) sz.push(elem, ':', _vars[elem], '|');
}
if (sz.length > 0) sz.pop();
try {
localStorage.setItem(_storeTag, sz.join(''));
} catch (e) { }
},
zPadLeft = function(item, num) {
var sz = [];
for (var i = item.length; i < num; i++) {
sz.push(0);
}
sz.push(item);
return sz.join('');
},
toCamel = function(text) {
var res = text.substr(0, 1).toUpperCase() + text.substr(1).toLowerCase();
res = res.replace(new RegExp('([ \-])(\\w+)', 'g'), function(match, p1, p2, offset) {
// Omite palabra después de prefijo de 1 letra (U-turn) o la palabra "or" (Trick-or-Treat)
//if (offset == 1 || p2 == 'or') {
// return match;
//}
return p1 + p2.substr(0, 1).toUpperCase() + p2.substr(1);
});
return res;
},
genPoke = function() {
var m = _vars.nombre,
n = _vars.num,
sn = n.toString(),
h = 0,
alola;
if (_vars.hoenn !== null && !isNaN(parseInt(_vars.hoenn, 10))) {
h = parseInt(_vars.hoenn, 10);
}
alola = (mw.config.get('wgPageName').indexOf('de_Alola')>0);
// Pokexperto
n && link('http://www.pokexperto.net/index2.php?seccion=nds/nationaldex/pkmn&pk='+sn,'Pokexperto 3-6Gen','Pokexperto: 3ª a 6ª'+T_G);
// Guias nintendo
if (!alola) {
n && n<=150 && link(T_UGN3+'pokemon/pokemon_sp/Pokedex/'+m.toLowerCase().replace('mr. ','')+'.asp',T_GN+' RAA',T_GN+': 1ª'+T_G);
n && n<=251 && link(T_UGN3+'pokeoroplata/Pokedex/'+zPadLeft(sn,2)+'-'+m.replace(' ','')+'.htm',T_GN+' OPC',T_GN+': 2ª'+T_G);
h && h<=200 && link(T_UGN1+'pokemonrubizafiro/pok_rubi_zafiro_SP/pokedex/pokemon'+zPadLeft(h.toString(),3)+m.toLowerCase()+'.htm',T_GN+' RZ',T_GNP+'ediciones Rubí y Zafiro');
h && h<=202 && link(T_UGN1+'Pokemon_Esmeralda/pok_esmeralda_SP/pokedex/pokemon'+zPadLeft(h.toString(),3)+m.toLowerCase()+'.html',T_GN+' E(H)',T_GNP+'edición Esmeralda, Pokédex de Hoenn');
n && n<=386 && link(T_UGN1+'Pokemon_Esmeralda/pok_esmeralda_SP/pokedex_nacional/'+zPadLeft(sn,3)+'.html',T_GN+' E(N)',T_GNP+'edición Esmeralda, Pokédex Nacional');
n && n<=386 && link(T_UGN1+'pokemon_rojofuego_verdehoja/pokemon_rojofuego_verdehoja_sp/pokedex/'+zPadLeft(sn,3)+'.html',T_GN+' RfVh',T_GNP+'ediciones Rojo Fuego y Verde Hoja');
n && n<=490 && link(T_UGN0+'perla_diamante/Pokemon_perla_diamante_sp/pokedex_nacional/'+zPadLeft(sn,3)+'.html',T_GN+' DP',T_GNP+'ediciones Diamante y Perla');
n && n<=492 && link(T_UGN0+'platino/Pokemon_platino_sp/pokedex_nacional/'+zPadLeft(sn,3)+'.html',T_GN+' Pt',T_GNP+'edición Platino');
}
// Otras/otros idiomas
link(T_UBP+m+'_(Pokémon)', 'Bulbapedia [en]','Bulbapedia'+T_EN);
if (!alola) {
n && n <= 721 && link(T_UVE+'pokemon/'+m.toLowerCase(),'Veekun 1-6Gen [en]','Veekun: 1ª a 6ª'+T_G+T_EN);
n && n <= 251 && link(T_USP+'/'+zPadLeft(sn,3)+SHTML,T_S+' 1-2Gen [en]',T_S+': 1ª y 2ª'+T_G+T_EN);
n && n <= 386 && link(T_USP+'-rs/'+zPadLeft(sn,3)+SHTML,T_S+' 3Gen [en]',T_S+': 3ª'+T_G+T_EN);
n && n <= 493 && link(T_USP+'-dp/'+zPadLeft(sn,3)+SHTML,T_S+' 4Gen [en]',T_S+': 4ª'+T_G+T_EN);
n && n <= 649 && link(T_USP+'-bw/'+zPadLeft(sn,3)+SHTML,T_S+' 5Gen [en]',T_S+': 5ª'+T_G+T_EN);
n && n <= 721 && link(T_USP+'-xy/'+zPadLeft(sn,3)+SHTML,T_S+' 6Gen [en]',T_S+': 6ª'+T_G+T_EN);
}
n && n <= 802 && link(T_USP+'-sm/'+zPadLeft(sn,3)+SHTML,T_S+' 7Gen [en]',T_S+': 7ª'+T_G+T_EN);
n && n <= 802 && link(T_USM+'pokemon/'+m.toLowerCase().replace(new RegExp('\\s', 'g'),'_').replace(new RegExp('[.\']', 'g'), '') + (alola?'-alola':''),T_SM+' [en]',T_SM+': 7ª'+T_G+T_EN);
},
genMov = function() {
var i = (_vars.ingles || 0),
g = (_vars.generacion || 999);
i && g <= 7 && link(T_UBP+'Special:Search/'+i+'_(move)','Bulbapedia [en]','Bulbapedia'+T_EN);
i && g <= 6 && link(T_UVE+'moves/'+i.toLowerCase(),'Veekun 1-6Gen [en]','Veekun: 1ª a 6ª'+T_G+T_EN);
i && g <= 3 && link(T_USA+'/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'')+SHTML,T_S+' 3Gen [en]',T_S+': 3ª'+T_G+T_EN);
i && g <= 4 && link(T_USA+'-dp/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'')+SHTML,T_S+' 4Gen [en]',T_S+': 4ª'+T_G+T_EN);
i && g <= 5 && link(T_USA+'-bw/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'')+SHTML,T_S+' 5Gen [en]',T_S+': 5ª'+T_G+T_EN);
i && g <= 6 && link(T_USA+'-xy/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'')+SHTML,T_S+' 6Gen [en]',T_S+': 6ª'+T_G+T_EN);
i && g <= 7 && link(T_USA+'-sm/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'')+SHTML,T_S+' 7Gen [en]',T_S+': 7ª'+T_G+T_EN);
i && g <= 7 && link(T_USM+'moves/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'_'),T_SM+' 7Gen [en]',T_SM+': 7ª'+T_G+T_EN);
},
genBaya = function() {
var i = _vars.ingles,
n = _vars.num,
sn = n.toString();
link('http://www.pokexperto.net/index2.php?seccion=nds/berrydexDS&baya='+sn, 'Pokexperto 4Gen', 'Pokexperto: 4ª'+T_G);
link(T_UBP+toCamel(i),'Bulbapedia [en]','Bulbapedia'+T_EN);
link(T_UVE+'items/berries/'+i.toLowerCase(),'Veekun [en]','Veekun'+T_EN);
link('http://www.serebii.net/berrydex-dp/'+zPadLeft(sn,2)+SHTML,T_S+' 4Gen [en]',T_S+': 4ª'+T_G+T_EN);
link(T_USM+'items/'+i.toLowerCase().replace(new RegExp('\\s', 'g'),'_'),T_SM+' [en]',T_SM+T_EN);
},
link = function(url, text, caption) {
if (!_rendered && _renderFn) {
_renderFn(_vars.tipo);
_rendered = true;
}
if (_rendered && _renderLink) {
_renderLink(url, text, caption);
}
},
registerRenderFn = function(fn) {
if (typeof fn === 'function') {
_renderFn = fn;
}
},
registerLinkFn = function(fn) {
if (typeof fn === 'function') {
_renderLink = fn;
}
};
// Funciones publicadas
return {
init: init,
registerRenderFn: registerRenderFn,
registerLinkFn: registerLinkFn
};
})(jQuery, mw);
// </pre>