Module:ImagerieTest
Apparence
Ce module est une version test du Module:Imagerie.
local p = {}
local ressources = {
indexTableau = require("Module:Ressources/indexTableau"),
tailleTableau = require("Module:Ressources/tailleTableau")
}
function p.pokemon( frame )
-- CONFIGURATION INITIALE
local num, generation
if frame.args[1] == nil then return "Erreur : le numéro du Pokémon n'a pas été défini." else num = frame.args[1] end
if frame.args['génération'] == nil then generation = 9 else generation = tonumber( frame.args['génération'] ) end
if frame.args['forme'] then forme = frame.args['forme'] .. ' ' else forme = '' end
local nom_gen= ''
local symbole_chromatique = ''
local jeux = {}
-- tableau de deux éléments
-- le premier liste les groupes de jeux ayant un sprite de face commun,
-- le second liste les groupes de jeux ayant un sprite de dos commun
local sprites = {}
if generation == 1 then
nom_gen = 'première'
jeux = {"RV", "RB", "J"}
sprites = { { RV = {"RV"}, RB = {"RB"}, J = {"J"} }, { RV = {"RV", "RB", "J"} } }
elseif generation == 2 then
nom_gen = 'deuxième'
symbole_chromatique = '[[Fichier:Miniature Chromatique OA.png]]'
jeux = {"OA", "O", "A", "C"}
sprites = { { O = {"O"}, A = {"A"}, C = {"C"} }, { OA = {"O", "A", "C"} } }
elseif generation == 3 then
nom_gen = 'troisième'
symbole_chromatique = '[[Fichier:Miniature Chromatique RFVF.png]]'
jeux = {"RS", "RFVF", "E"}
sprites = { { RS = {"RS", "RFVF"}, E = {"E"} }, { RS = {"RS", "RFVF", "E"} } }
elseif generation == 4 then
nom_gen = 'quatrième'
symbole_chromatique = '[[Fichier:Miniature Chromatique DP.png]]'
jeux = {"DP", "Pt", "HGSS"}
sprites = { { DP = {"DP", "Pt"}, HGSS = {"HGSS"} }, { DP = {"DP", "Pt", "HGSS"} } }
elseif generation == 5 then
nom_gen = 'cinquième'
symbole_chromatique = '[[Fichier:Miniature Chromatique NB.png]]'
jeux = {"NB", "N2B2"}
sprites = { { NB = {"NB", "N2B2"} }, { NB = {"NB", "N2B2"} } }
elseif generation == 6 then
nom_gen = 'sixième'
symbole_chromatique = '[[Fichier:Miniature Chromatique XY.png]]'
jeux = {"XY", "ROSA"}
sprites = { { XY = {"XY", "ROSA"} }, { XY = {"XY", "ROSA"} } }
elseif generation == 7 then
nom_gen = 'septième'
symbole_chromatique = '[[Fichier:Miniature Chromatique SL.png]]'
jeux = {"SL", "USUL", "LGPE"}
sprites = { { SL = {"SL", "USUL"}, LGPE = {"LGPE"} }, { SL = {"SL", "USUL"}, LGPE = {"LGPE"} } }
elseif generation == 8 then
nom_gen = 'huitième'
symbole_chromatique = '[[Fichier:Miniature Chromatique EB.png|x20px]]'
jeux = {"EB", "DEPS", "LPA", "HOME"}
sprites = { { EB = {"EB", "DEPS"}, LPA = {"LPA"}, HOME = {"HOME"} }, { EB = {"EB", "DEPS"}, LPA = {"LPA"}, HOME = {"HOME"} } }
elseif generation == 9 then
nom_gen = 'neuvième'
symbole_chromatique = '[[Fichier:Miniature Chromatique EV.png|x20px]]'
jeux = {"EV", "HOME"}
sprites = { { EV = {"EV"}, HOME = {"HOME"} }, { EV = {"EV"}, HOME = {"HOME"} } }
else return "Erreur : génération inconnue."
end
-- GESTION DES PARAMETRES DE CONFIGURATION PRINCIPAUX
if not frame.args['absence-lgpe'] then frame.args['absence-lgpe'] = 'oui' end
if not frame.args['absence-dos-home'] then frame.args['absence-dos-home'] = 'oui' end
if not frame.args['absence-miniature'] then frame.args['absence-miniature'] = 'non' end
local remove = {}
for _, jeu in ipairs(jeux) do
-- gestion des absences dans un jeu donné
-- si l'absence a lieu pour un jeu qui servait de référence à un groupe, le reste du groupe est éclaté afin de conserver les autres membres
-- (les valeurs deviennent des clés/valeurs supplémentaires du tableau parent)
if frame.args['absence-' .. string.lower(jeu)] and frame.args['absence-' .. string.lower(jeu)] ~= 'non' then
table.insert(remove, jeu)
for _2, spritesN in ipairs(sprites) do
if spritesN[jeu] then
if #spritesN[jeu] > 1 then
for _3, jeuN in ipairs(spritesN[jeu]) do
if jeuN ~= jeu then
spritesN[jeuN] = { jeuN }
end
end
end
spritesN[jeu] = nil
else
for _3, spriteN in pairs(spritesN) do
if ressources.indexTableau(spriteN, jeu) then
table.remove(spriteN, ressources.indexTableau(spriteN, jeu))
break
end
end
end
end
end
local paramsSprites = { 'face', 'dos' }
for numParam, paramSprites in ipairs(paramsSprites) do
-- gestion des sprites de face/dos non prévus par le scénario standard, déclarés manuellement
-- (les sprites sont supposés communs par groupes de jeux mais des exceptions existent)
if frame.args['sprite-' .. paramSprites .. '-' .. string.lower(jeu)] then
local param = frame.args['sprite-' .. paramSprites .. '-' .. string.lower(jeu)]
for _2, jeu2 in ipairs(jeux) do
if string.lower(jeu2) == string.lower(param) then
param = jeu2
break
end
end
if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
else
for _2, sprite in pairs(sprites[numParam]) do
if ressources.indexTableau(sprite, jeu) then
table.remove(sprite, ressources.indexTableau(sprite, jeu))
break
end
end
end
if sprites[numParam][param] then table.insert(sprites[numParam][param], jeu)
else sprites[numParam][param] = { jeu }
end
end
-- gestion des jeux sans sprite de face ou de dos
if frame.args['absence-' .. paramSprites .. '-' .. string.lower(jeu)] and frame.args['absence-' .. paramSprites .. '-' .. string.lower(jeu)] ~= 'non' then
if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
else
for _2, sprite in pairs(sprites[numParam]) do
if ressources.indexTableau(sprite, jeu) then
table.remove(sprite, ressources.indexTableau(sprite, jeu))
break
end
end
end
end
end
end
for _, jeu in ipairs(remove) do
table.remove(jeux, ressources.indexTableau(jeux, jeu))
end
-- CREATION VIRTUELLE DU TABLEAU ET PARAMETRES DE CONFIGURATION SPECIFIQUES
local tableau = {}
if generation == 1 then
tableau[1] = { "", {}, {} }
for _, jeu in ipairs(jeux) do
if sprites[1][jeu] then
table.insert(tableau[1][2], {jeu, jeu, sprites[1][jeu], 1})
end
if sprites[2][jeu] then
table.insert(tableau[1][3], {jeu, "dos " .. jeu, sprites[2][jeu], 1})
end
end
elseif generation >= 4 and (frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe']) then
tableau = {
{ "♂<br />[[Sexe des Pokémon|Mâle]]", {}, {} },
{ "♂ " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Mâle]] [[Pokémon chromatique|chromatique]]", {}, {} },
{ "♀<br />[[Sexe des Pokémon|Femelle]]", {}, {} },
{ "♀ " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Femelle]] [[Pokémon chromatique|chromatique]]", {}, {} }
}
for _, jeu in ipairs(jeux) do
if sprites[1][jeu] then
if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] then
table.insert(tableau[1][2], {jeu, forme .. "♂ " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[2][2], {jeu, forme .. "♂ chromatique " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[3][2], {jeu, forme .. "♀ " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[4][2], {jeu, forme .. "♀ chromatique " .. jeu, sprites[1][jeu], 1})
elseif frame.args['diff-sprites-dos-sexe'] then
table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
table.insert(tableau[2][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
table.insert(tableau[3][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
table.insert(tableau[4][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
else
table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 2})
table.insert(tableau[3][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 2})
end
end
if sprites[2][jeu] then
if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-dos-sexe'] then
table.insert(tableau[1][3], {jeu, forme .. "♂ dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[2][3], {jeu, forme .. "♂ chromatique dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[3][3], {jeu, forme .. "♀ dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[4][3], {jeu, forme .. "♀ chromatique dos " .. jeu, sprites[2][jeu], 1})
else
table.insert(tableau[1][3], {jeu, forme .. "dos " .. jeu, sprites[2][jeu], 2})
table.insert(tableau[3][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][jeu], 2})
end
end
end
else
tableau = { { "", {}, {} }, { symbole_chromatique .. "<br />[[Pokémon chromatique|Chromatique]]", {}, {} } }
for _, jeu in ipairs(jeux) do
if sprites[1][jeu] then
table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
table.insert(tableau[2][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
end
if sprites[2][jeu] then
table.insert(tableau[1][3], {jeu, forme .. "dos " .. jeu, sprites[2][jeu], 1})
table.insert(tableau[2][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][jeu], 1})
end
end
end
-- ENTETE DU TABLEAU et ARTWORK
local resultat = {'<div class="center"><table class="tableaustandard centre tableau-overflow liensrougesreduits">'}
local colspanMax = 2 * #jeux + 3
if frame.args['artwork'] then
table.insert(resultat, '<tr><th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Artwork officiel</th></tr><tr><td colspan="' .. colspanMax .. '">[[Fichier:' .. mw.text.split(frame:getParent():getTitle(),"/",true)[1])
if frame.args['artwork-précisions'] then table.insert(resultat, ' (' .. frame.args['artwork-précisions'] .. ')') end
if frame.args['artwork'] ~= "oui" then table.insert(resultat, '-' .. frame.args['artwork']) end
table.insert(resultat, '.png|175px]]</td></tr>')
end
table.insert(resultat, '<tr>')
if frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Miniatures et sprites de la [[' .. nom_gen .. ' génération]]</th>')
else
table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Sprites de la [[' .. nom_gen .. ' génération]]</th>')
end
table.insert(resultat, '</tr>')
local colonnesFace, colonnesDos
-- if ressources.tailleTableau(sprites[1]) == 1 then colonnesFace = false else colonnesFace = true end
-- if ressources.tailleTableau(sprites[2]) == 1 then colonnesDos = false else colonnesDos = true end
colonnesFace = true
colonnesDos = true
if generation ~= 1 then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
table.insert(resultat, '></th>')
end
if frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
if frame.args['miniature2']
then table.insert(resultat, '>Miniatures</th>')
else table.insert(resultat, '>Miniature</th>')
end
end
local colspanFace = 0
local colspanDos = 0
for _, jeuSprite in ipairs(jeux) do
if sprites[1][jeuSprite] then
for _2, jeu in ipairs(sprites[1][jeuSprite]) do
colspanFace = colspanFace + 1
end
end
if sprites[2][jeuSprite] then
for _2, jeu in ipairs(sprites[2][jeuSprite]) do
colspanDos = colspanDos + 1
end
end
end
if colspanFace > 0 then
table.insert(resultat, '<th')
if colonnesFace then table.insert(resultat, ' colspan="' .. colspanFace .. '"')
elseif colonnesDos then table.insert(resultat, ' rowspan="2"')
end
table.insert(resultat, '>Sprites de face</th>')
end
if colspanDos > 0 then
table.insert(resultat, '<th')
if colonnesDos then table.insert(resultat, ' colspan="' .. colspanDos .. '"')
elseif colonnesFace then table.insert(resultat, ' rowspan="2"')
end
table.insert(resultat, '>Sprites de dos</th>')
end
if generation == 4 then
table.insert(resultat, '<th')
if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
table.insert(resultat, '>Compagnon' .. frame:expandTemplate{ title = 'Sup', args = { 'HGSS' }} .. '</th>')
end
table.insert(resultat, '</tr>')
if colonnesFace or colonnesDos then
table.insert(resultat, '<tr>')
if colonnesFace then
for _, jeuSprite in ipairs(jeux) do
if sprites[1][jeuSprite] then
for _2, jeu in ipairs(sprites[1][jeuSprite]) do
table.insert(resultat, '<th>' .. frame:expandTemplate{ title = 'Abréviation', args = { jeu, '' } } .. '</th>')
end
end
end
end
if colonnesDos then
for _, jeuSprite in ipairs(jeux) do
if sprites[2][jeuSprite] then
for _2, jeu in ipairs(sprites[2][jeuSprite]) do
table.insert(resultat, '<th>' .. frame:expandTemplate{ title = 'Abréviation', args = { jeu, '' } } .. '</th>')
end
end
end
end
table.insert(resultat, '</tr>')
end
-- CORPS DU TABLEAU
local i = 1
while tableau[i] do
if generation ~= 1 then table.insert(resultat, '<tr><th>' .. tableau[i][1] .. '</th>') end
local miniatExtension = "png"
if generation >= 2 and generation <= 5 then miniatExtension = "gif" end
if i == 1 and frame.args['absence-miniature'] == 'non' then
table.insert(resultat, '<td rowspan="')
if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe'] then table.insert(resultat, 4) else table.insert(resultat, 2) end
table.insert(resultat, '">[[Fichier:Miniature ' .. num .. ' ' .. forme)
if frame.args['diff-miniatures-sexe'] then table.insert(resultat, '♂ ') end
table.insert(resultat, jeux[1] .. '.' .. miniatExtension .. '|class=miniature_' .. jeux[1] .. ']]')
if frame.args['diff-miniatures-sexe'] then
table.insert(resultat, ' (mâle)<br>[[Fichier:Miniature ' .. num .. ' ' .. forme .. '♀ ' .. jeux[1] .. '.' .. miniatExtension .. '|class=miniature_' .. jeux[1] .. ']] (femelle)')
elseif frame.args['miniature2'] then
local prochaine_miniature = mw.ustring.lower(frame.args['miniature2'])
local prochain_numero = 2
for _, jeu in ipairs(jeux) do
if mw.ustring.lower(jeu) == prochaine_miniature
then table.insert(resultat, '<br>[[Fichier:Miniature ' .. num .. ' ' .. forme .. jeu .. '.' .. miniatExtension .. '|class=miniature_' .. jeu .. ']]')
if frame.args['miniature' .. prochain_numero + 1]
then prochain_numero = prochain_numero + 1
prochaine_miniature = mw.ustring.lower(frame.args['miniature' .. prochain_numero])
end
end
if jeu ~= "OA" and jeu ~= "HOME" then table.insert(resultat, frame:expandTemplate{ title = 'Sup', args = { jeu }}) end
end
end
table.insert(resultat, '</td>')
end
if frame.args['shinylock'] and i % 2 == 0 then
table.insert(resultat, '<td colspan="' .. colspanMax .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
else
for _, sprite in ipairs(tableau[i][2]) do
if frame.args['shinylock-' .. string.lower(sprite[1])] and i % 2 == 0 then
table.insert(resultat, '<td>\'\'Indisponible car ce<br>Pokémon est [[Shiny Lock]]\'\'</td>')
else
table.insert(resultat, '<td')
if colonnesFace then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. '.')
if sprite[1] == "C" or sprite[1] == "E" then table.insert(resultat, 'gif') else table.insert(resultat, 'png') end
table.insert(resultat, '|class=maxheight100px]]</td>')
end
end
for _, sprite in ipairs(tableau[i][3]) do
if frame.args['shinylock-' .. string.lower(sprite[1])] and i % 2 == 0 then
table.insert(resultat, '<td>\'\'Indisponible car ce<br>Pokémon est [[Shiny Lock]]\'\'</td>')
else
table.insert(resultat, '<td')
if colonnesDos then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. '.png|class=maxheight100px]]</td>') end
end
-- Compagnons HGSS
if generation == 4 then
if i == 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'ouest HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'nord HGSS.gif]]</td>')
elseif i == #tableau / 2 + 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique ouest HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique nord HGSS.gif]]</td>')
end
end
end
table.insert(resultat, '</tr>')
i = i + 1
end
-- Animations d'attaque 6G
if generation == 6 then
if frame.args['animations-attaque'] then
table.insert(resultat, '<tr><th colspan="' .. colspanMax .. ' style="background-color: #C0C0FF;">Animations d\'attaque</td></tr><tr><td colspan="' .. colspanMax .. '>')
if frame.args['diff-animations-attaque-sexe'] then
sexe = "♂ "
table.insert(resultat, 'Mâle : ')
else sexe = "" end
for i = 1, frame.args['animations-attaque'] do
table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. forme .. sexe .. i .. ' XY.png]]')
end
if frame.args['diff-animations-attaque-sexe'] then
sexe = "♀ "
table.insert(resultat, '<br />Femelle : ')
for i = 1, frame.args['animations-attaque'] do
table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. forme .. sexe .. i .. ' XY.png]]')
end
end
table.insert(resultat, '</td></tr>')
end
end
-- Images du Pokédex 9G
local pokedex = frame.args['pokédex']
if generation == 9 and pokedex ~= "non" and frame.args['absence-ev'] ~= "oui" then
local forme_split = mw.text.split(forme, " ")
local forme_pokedex = ""
if forme_split[1] == "Alola" or forme_split[1] == "Galar" or forme_split[1] == "Hisui" or forme_split[1] == "Paldea" then forme_pokedex = " " .. forme_split[1] end
table.insert(resultat, '<tr><th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Illustration du Pokédex</td></tr>')
if pokedex == nil then pokedex = 'EV' end
local pokedex_split = mw.text.split(pokedex, '/')
for _,jeu in ipairs(pokedex_split) do
table.insert(resultat, '<tr><td colspan="' .. colspanMax .. '>[[Fichier:Pokédex ' .. num .. forme_pokedex .. ' ' .. jeu .. '.png|x200px]]')
if #pokedex_split > 1 then table.insert(resultat, '<br />' .. frame:expandTemplate{ title = 'Jeu', args = { jeu }}) end
table.insert(resultat, '</td></tr>')
end
end
table.insert(resultat, '</table></div>')
return table.concat(resultat, '')
end
return p