Módulo:Equipo
De WikiDex
Ir a la navegaciónIr a la búsqueda
La documentación para este módulo puede ser creada en Módulo:Equipo/doc. También existe una plantilla con el mismo nombre; puedes obtener más información sobre la plantilla en Plantilla:Equipo
--[[
Copyright (c) 2021-2022 Ciencia Al Poder / wikidex.net
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO nTHE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
]]--
local p = {} -- variable que tendrá todas las funciones accesibles externamente
local _pokemon_con_sprite_hembra = {
['Abomasnow'] = true, ['Aipom'] = true, ['Alakazam'] = true, ['Ambipom'] = true, ['Basculegion'] = true, ['Beautifly'] = true, ['Bibarel'] = true, ['Bidoof'] = true, ['Blaziken'] = true, ['Buizel'] = true, ['Butterfree'] = true, ['Cacturne'] = true, ['Camerupt'] = true, ['Combee'] = true, ['Combusken'] = true, ['Croagunk'] = true, ['Dodrio'] = true, ['Doduo'] = true, ['Donphan'] = true, ['Dustox'] = true, ['Finneon'] = true, ['Floatzel'] = true, ['Frillish'] = true, ['Gabite'] = true, ['Garchomp'] = true, ['Gible'] = true, ['Girafarig'] = true, ['Gligar'] = true, ['Gloom'] = true, ['Golbat'] = true, ['Goldeen'] = true, ['Gulpin'] = true, ['Gyarados'] = true, ['Heracross'] = true, ['Hippopotas'] = true, ['Hippowdon'] = true, ['Houndoom'] = true, ['Hypno'] = true, ['Indeedee'] = true, ['Jellicent'] = true, ['Kadabra'] = true, ['Kricketot'] = true, ['Kricketune'] = true, ['Ledian'] = true, ['Ledyba'] = true, ['Ludicolo'] = true, ['Lumineon'] = true, ['Luxio'] = true, ['Luxray'] = true, ['Magikarp'] = true, ['Mamoswine'] = true, ['Medicham'] = true, ['Meditite'] = true, ['Meganium'] = true, ['Meowstic'] = true, ['Milotic'] = true, ['Murkrow'] = true, ['Numel'] = true, ['Nuzleaf'] = true, ['Oinkologne'] = true, ['Octillery'] = true, ['Pachirisu'] = true, ['Pikachu'] = true, ['Piloswine'] = true, ['Politoed'] = true, ['Pyroar'] = true, ['Quagsire'] = true, ['Raichu'] = true, ['Raticate'] = true, ['Rattata'] = true, ['Relicanth'] = true, ['Rhydon'] = true, ['Rhyhorn'] = true, ['Rhyperior'] = true, ['Roselia'] = true, ['Roserade'] = true, ['Scizor'] = true, ['Scyther'] = true, ['Seaking'] = true, ['Shiftry'] = true, ['Shinx'] = true, ['Sneasel'] = true, ['Snover'] = true, ['Staraptor'] = true, ['Staravia'] = true, ['Starly'] = true, ['Steelix'] = true, ['Sudowoodo'] = true, ['Swalot'] = true, ['Tangrowth'] = true, ['Torchic'] = true, ['Toxicroak'] = true, ['Unfezant'] = true, ['Ursaring'] = true, ['Venusaur'] = true, ['Vileplume'] = true, ['Weavile'] = true, ['Wobbuffet'] = true, ['Wooper'] = true, ['Xatu'] = true, ['Zubat'] = true
}
-- Sufijo del sprite del Pokémon en cada generación
local _sufijo_sprite_gen = {
[9] = '_EP',
[8] = '_EpEc',
[7] = '_SL',
[6] = '_XY',
[5] = '_NB',
[4] = '_HGSS',
[3] = 'RFVH',
[2] = '_oro',
[1] = '_A'
}
-- Si el valor es nulo o vacío, retorna el siguiente
local function _coalesce( valor, def )
if ( valor or '' ) == '' then
return def or ''
end
return valor
end
local function _claseTipos( tipo1, tipo2 )
tipo1 = mw.ustring.lower( tipo1 or '' )
tipo2 = mw.ustring.lower( tipo2 or '' )
-- Si tiene tipo 2 y el tipo 1 es normal, usar tipo 2
if tipo2 ~= '' and tipo1 == 'normal' then
return string.format( 'tipo-%s', tipo2 )
end
return string.format( 'tipo-%s', tipo1 )
end
local function _iconos( teratipo, dinamax, mega, oscuro )
nodo = nil
if _coalesce( teratipo, '' ) ~= '' then
teratipo = mw.ustring.lower( teratipo )
nodo = mw.html.create( 'span' )
:attr( 'class', 'iconos' )
:wikitext( string.format( '[[Archivo:Teratipo %s icono EP.png|30px|link=Teratipo|alt=Teratipo %s|Teratipo %s]]', teratipo, teratipo, teratipo ) )
elseif dinamax == 'Sí' or mega == 'Sí' or oscuro == 'Sí' then
nodo = mw.html.create( 'span' )
:attr( 'class', 'iconos' )
if dinamax == 'Sí' then
nodo:wikitext( '[[Archivo:Botón Dinamax.svg|26px|link=Dinamax|alt=Dinamax|Dinamax]]' )
elseif mega == 'Sí' then
nodo:wikitext( '[[Archivo:Icono megaevolución.png|15px|link=Megaevolución|alt=Megaevolución|Megaevolución]]' )
elseif oscuro == 'Sí' then
nodo:wikitext( '[[Archivo:Símbolo oscuro GO.png|20px|link=Pokémon oscuro|alt=Pokémon oscuro|Pokémon oscuro]]' )
end
end
return nodo
end
local function _sprite( nombre, generacion, edPok, sexo, imagen )
local sufed, tamano, link, sufsexo, ext
if _coalesce( nombre, '' ) == '' then
return '[[Archivo:Desconocido_G4.png|link=]]'
end
tamano = ''
if generacion >= 6 then
tamano = '|96px'
elseif edPok == 'St' or edPok == 'St2' then
tamano = '|80px'
end
link = nombre
if imagen ~= nil then
return string.format( '[[Archivo:%s%s|%s|link=%s]]', imagen, tamano, nombre, link )
end
if nombre == 'Nidoran♂' then
nombre = 'Nidoran macho'
elseif nombre == 'Nidoran♀' then
nombre = 'Nidoran hembra'
end
if ( edPok or '' ) ~= '' then
if edPok == 'RFVH' then
sufed = edPok
else
sufed = '_' .. edPok
end
else
sufed = _sufijo_sprite_gen[generacion]
end
sufsexo = ''
if sexo == '♀' then
if sufed == '_icono_HD' then
if mw.language.getContentLanguage():ucfirst( nombre ) == 'Oinkologne' then
-- Los icono_HD no tienen diferencia de sexo, excepto casos muy contados
sufsexo = '_hembra'
end
elseif generacion >= 4 and sexo == '♀' and _pokemon_con_sprite_hembra[ mw.language.getContentLanguage():ucfirst( nombre ) ] then
sufsexo = '_hembra'
end
end
ext = 'png'
if generacion == 1 and (edPok == '' or edPok == 'A') then
ext = 'gif'
elseif edPok == 'cristal' then
ext = 'gif'
end
return string.format( '[[Archivo:%s%s%s.%s%s|link=%s|%s]]', nombre, sufed, sufsexo, ext, tamano, link, link )
end
local function _tipo_pokemon( tipo )
if _coalesce( tipo ) == '' then
return ''
end
tipo = mw.ustring.lower( tipo )
return string.format( '[[Archivo:Tipo %s.png|80px|link=Tipo %s]]', tipo, tipo )
end
-- Dato movimiento
local function _movimiento_pokemon( movimiento )
local tag
tag = mw.html.create( 'div' )
:attr( 'class', 'mov' )
:wikitext( _coalesce( movimiento, '-' ) )
return tag
end
-- Se llamará para cada uno de los Pokémon
local function _elemento_pokemon( args, numPoke, generacion )
local container, pokemon, imagen, sexo, nivel, tipo1, tipo2, objeto, habilidad, m1, m2, m3, m4, nombre, nodosexo, dinamax, mega, oscuro, nodoiconos, pos, edPok, teratipo
edPok = args[ 'EdPok' ] or ''
pokemon = args[ string.format( 'P%d', numPoke ) ]
imagen = args[ string.format( 'ImagenP%d', numPoke ) ]
sexo = _coalesce( args[ string.format( 'SP%d', numPoke ) ], args[ string.format( 'GP%d', numPoke ) ] )
nivel = args[ string.format( 'NvP%d', numPoke ) ]
tipo1 = args[ string.format( 'T1P%d', numPoke ) ]
tipo2 = args[ string.format( 'T2P%d', numPoke ) ]
dinamax = args[ string.format( 'DinamaxP%d', numPoke ) ]
mega = args[ string.format( 'MegaevoluciónP%d', numPoke ) ]
teratipo = args[ string.format( 'TeratipoP%d', numPoke ) ]
oscuro = args[ string.format( 'OscuroP%d', numPoke ) ]
objeto = args[ string.format( 'ObjP%d', numPoke ) ]
habilidad = args[ string.format( 'HabP%d', numPoke ) ]
m1 = args[ string.format( 'M1P%d', numPoke ) ]
m2 = args[ string.format( 'M2P%d', numPoke ) ]
m3 = args[ string.format( 'M3P%d', numPoke ) ]
m4 = args[ string.format( 'M4P%d', numPoke ) ]
-- El parámetro Pokémon puede tener un mote con {{!}}
pos = mw.ustring.find( pokemon, '|', 1, false )
if pos ~= nil then
nombre = mw.ustring.sub( pokemon, pos - mw.ustring.len( pokemon ) )
pokemon = mw.ustring.sub( pokemon, 1, pos - 1 )
else
nombre = pokemon
end
nodosexo = nil
if generacion > 1 then
if sexo == 'Macho' or sexo == 'macho' or sexo == '♂' then
nodosexo = '<span class="sexo macho">[[Sexo|♂]]</span>'
elseif sexo == 'Hembra' or sexo == 'hembra' or sexo == '♀' then
nodosexo = '<span class="sexo hembra">[[Sexo|♀]]</span>'
elseif sexo == 'Aleatorio' or sexo == 'aleatorio' or sexo == '♂/♀' then
nodosexo = '<span class="sexo"><span class="macho">[[Sexo|♂]]</span>/<span class="hembra">[[Sexo|♀]]</span></span>'
end
if mw.ustring.find( pokemon, 'Nidoran', 1, true ) == 1 and nombre == pokemon then
nombre = 'Nidoran'
end
end
if generacion < 3 or edPok == 'LGPE' then
habilidad = "''Ninguna''"
end
if generacion == 1 then
objeto = "''Ninguno''"
end
nodoiconos = _iconos( teratipo, dinamax, mega, oscuro )
container = mw.html.create( 'div' )
:attr( 'class', string.format( 'e-pokemon %s', _claseTipos( tipo1, tipo2 ) ) )
:tag( 'div' )
:attr( 'class', 'pri float-app' )
:tag( 'div' )
:attr( 'class', 'pri-nombre' )
:tag( 'span' )
:attr( 'class', 'nombre' )
:wikitext( string.format( '[[%s|%s]]', pokemon, nombre ) )
:done()
:node( nodosexo )
:tag( 'span' )
:attr( 'class', 'nivel' )
:wikitext( string.format( '[[Nivel|Nv.]] %s', _coalesce( nivel, '?' ) ) )
:done()
:node( nodoiconos )
:done()
:tag( 'div' )
:attr( 'class', 'pri-tipo' )
:tag( 'div' )
:attr( 'class', 'e-d-tipo' )
:attr( 'class', 'val' )
:wikitext(
_tipo_pokemon( tipo1 ),
_tipo_pokemon( tipo2 ) )
:done()
:done()
:done()
:tag( 'div' )
:attr( 'class', 'col e-d-col1 float-app' )
:tag( 'div' )
:attr( 'class', 'e-d-sprite' )
:wikitext( _sprite( pokemon, generacion, edPok, sexo, imagen ) )
:done()
:done()
:tag( 'div' )
:attr( 'class', 'col e-d-col2 float-app' )
:tag( 'div' )
:attr( 'class', 'e-d-movs fcont' )
:tag( 'div' )
:attr( 'class', 'lbl' )
:wikitext( "[[Movimiento|Movimientos]]" )
:done()
:tag( 'div' )
:attr( 'class', 'val' )
:node( _movimiento_pokemon( m1 ) )
:node( _movimiento_pokemon( m2 ) )
:node( _movimiento_pokemon( m3 ) )
:node( _movimiento_pokemon( m4 ) )
:done()
:done()
:done()
:tag( 'div' )
:attr( 'class', 'col e-d-col3 float-app' )
:tag( 'div' )
:attr( 'class', 'e-d-hab fcont' )
:tag( 'div' )
:attr( 'class', 'lbl' )
:wikitext( "[[Habilidad]]" )
:done()
:tag( 'div' )
:attr( 'class', 'val' )
:wikitext( _coalesce( habilidad, "''Desconocida''" ) )
:done()
:done()
:tag( 'div' )
:attr( 'class', 'e-d-obj fcont' )
:tag( 'div' )
:attr( 'class', 'lbl' )
:wikitext( "[[Objeto]]" )
:done()
:tag( 'div' )
:attr( 'class', 'val' )
:wikitext( _coalesce( objeto, "''Ninguno''" ) )
:done()
:done()
:done()
return container
end
-- Función principal
function p.main( frame )
local parts, containerDiv, numPoke, generacion
if frame.args['local'] == '1' then
sourceargs = frame.args
--function frame:extensionTag()
-- return ''
--end
else
sourceargs = frame:getParent().args
end
parts = {}
table.insert( parts, frame:extensionTag( 'templatestyles', '', { src = 'Estilos de plantilla:Equipo/estilos.css' } ) )
containerDiv = mw.html.create( 'div' )
generacion = _coalesce( tonumber( sourceargs['generación'], 10 ), 8 )
numPoke = 1
while sourceargs[string.format('P%d', numPoke)] ~= nil
do
containerDiv:node( _elemento_pokemon( sourceargs, numPoke, generacion ) )
numPoke = numPoke + 1
end
containerDiv:attr( 'class', string.format( 'equipo2 np-%s', numPoke - 1 ) )
containerDiv:allDone()
table.insert( parts, tostring( containerDiv ) )
return table.concat( parts, '' )
end
return p -- Todos los módulos terminan retornando la variable que contiene las funciones
-- Prueba: =p.main( { ['args'] = { ['local'] = '1' } } )