Module:Représentations antérieures

De Poképédia
Aller à la navigation Aller à la recherche

Fonction « capacite »[modifier]

Utilisation[modifier]

Ce module sert à générer automatiquement un tableau de fichiers qui montre différentes représentations d'une même capacité. L'application stricte des règles de nomenclature permet au module de détecter les bons éléments qui permettent de former les noms de fichier.

Paramètres[modifier]

Légende des icônes
Certains paramètres sont accompagnés d'une ou plusieurs icône indiquant leur(s) caractéristique(s) :
 : Ce paramètre est facultatif, et n'a donc pas besoin d'être systématiquement défini.
 : Ce paramètre classe automatiquement l'article dans une catégorie.
 : Ce paramètre influe sur les données sémantiques présentes en pied de page.
  • paramètre non nommé : définit les jeux pour lesquels il faut afficher des images. Les jeux sont à indiquer avec leurs abréviations définies par le Modèle:Jeu, et séparés par des slashs /, de la façon suivante : ROSA/EB/DEPS.
    • Ajouter des parenthèses aux codes des jeux permet aussi de préciser de préciser les jeux dans lesquels la capacité est ainsi illustrée. Ainsi, pour afficher l'animation de Pokémon Platine, en précisant qu'elle est aussi utilisée dans Pokémon Or HeartGold et Argent SoulSilver, on indiquera Pt (Pt, HGSS) au lieu de simplement Pt.
  • précision  : permet d'ajouter une précision entre parenthèses aux noms des fichiers du tableau, notamment lorsque la capacité a plusieurs animations selon le contexte. Par exemple, Champlification a une animation différente lorsqu'un Champ Brumeux est actif. On peut donc rajouter précision=Champ Brumeux (sans les parenthèses) pour faire appel à des fichiers de la forme Fichier:Champlification (Champ Brumeux) EV.mp4.
  • nom  : permet de forcer le nom à partir duquel former les noms de fichier. Par défaut, le nom est réglé sur celui de la page en cours ({{PAGENAME}}).
  • type  : permet de forcer la coloration de type de la table, s'il n'est pas bien ou s'il doit changer pour une certaine raison, par exemple dans le cas de Ball'Météo. Par défaut, la coloration est automatiquement déterminée selon le nom de la capacité.

Exemples[modifier]

On prend en exemple Ball'Météo :

Exemple basique[modifier]

{{#invoke:Représentations antérieures|capacite|E/HGSS/N2B2/ROSA/USUL/EB}}

donne :

Troisième générationQuatrième générationCinquième génération
Sixième générationSeptième générationHuitième génération

Exemple avec précision et coloration de type[modifier]

{{#invoke:Représentations antérieures|capacite|HGSS/ROSA|précision=Soleil|type=feu}}

donne :

Quatrième générationSixième génération

local p = {}

function p.capacite(frame)
	local game_to_extension = {
		RV		= "gif",
		RB		= "gif",
		J		= "gif",
		O		= "gif",
		A		= "gif",
		OA		= "gif",
		C		= "gif",
		RS		= "gif",
		RFVF	= "gif",
		E		= "gif",
		DP		= "gif",
		HGSS	= "gif",
		Pt		= "gif",
		NB		= "gif",
		N2B2	= "gif",
		XY		= "mp4|300px",
		ROSA	= "mp4|300px",
		SL		= "mp4|300px",
		USUL	= "mp4|300px",
		LGPE	= "mp4|300px",
		EB		= "mp4|300px",
		DEPS	= "mp4|300px",
		LPA		= "mp4|300px",
		EV		= "mp4|300px",
		LPZA	= "mp4|300px",

		St1		= "png|300px",
		Colo	= "mp4|300px",
		XD		= "png|300px",
		PDM1	= "png",
		PRR		= "mp4|200px"
	}
	
	-- Seuls les jeux principaux sont à renseigner
	local game_to_generation = {
		RV		= 1,
		RB		= 1,
		J		= 1,
		O		= 2,
		A		= 2,
		OA		= 2,
		C		= 2,
		RS		= 3,
		RFVF	= 3,
		E		= 3,
		DP		= 4,
		HGSS	= 4,
		Pt		= 4,
		NB		= 5,
		N2B2	= 5,
		XY		= 6,
		ROSA	= 6,
		SL		= 7,
		USUL	= 7,
		LGPE	= 7,
		EB		= 8,
		DEPS	= 8,
		LPA		= 8,
		EV		= 9,
		LPZA	= 9,
	}
	local generation_number_to_text = {"[[Première génération]]", "[[Deuxième génération]]", "[[Troisième génération]]", "[[Quatrième génération]]", "[[Cinquième génération]]", "[[Sixième génération]]", "[[Septième génération]]", "[[Huitième génération]]", "[[Neuvième génération]]"}
	
	local name_untouched = frame.args["nom"]
	if name_untouched == nil
	then name_untouched = frame:preprocess("{{PAGENAME}}")
	end
	if name_untouched == nil
	then name_untouched = "Charge"
	end
	
	local name = string.gsub(name_untouched, " %(capacité%)", "")
	
	local table_type = frame.args["type"]
	if table_type == nil
	then local datatype = require("Module:Data/TypesCapacités")
		table_type = datatype[name_untouched]
		if table_type == nil
		then table_type = ""
		else table_type = mw.ustring.lower(table_type)
		end
	end
	
	local precision = frame.args["précision"]
	if precision
	then precision = " (" .. precision .. ")"
	else precision = ""
	end
	
	local result = {"<table class='tableaustandard centre " .. table_type .. "'>"}
	
	local games = frame.args[1]
	local games_split = {}
	if games ~= nil
	then games_split = mw.text.split(games, "/")
	end
	
	-- First pass to check duplicate generations
	local generations_seen = {}
	local duplicate_generations = {}
	local i = 1
	while games_split[i] ~= nil do
		local game_image = mw.ustring.gsub(games_split[i], "(.-) %((.-)%)", "%1")
		local generation_number = game_to_generation[game_image]
		if generation_number == nil
		then generation_number = 1
		end
		
		if generations_seen[generation_number] == nil
		then generations_seen[generation_number] = true
		else duplicate_generations[generation_number] = true
		end
		
		i = i + 1
	end
	
	local i = 1
	local image_line = {}
	local game_line = {}
	while games_split[i] ~= nil do
		-- Start of line
		if i % 3 == 1
		then table.insert(image_line, "<tr>")
			table.insert(game_line, "<tr>")
		end
		
		local game_input = games_split[i]
		local game_image = mw.ustring.gsub(game_input, "(.-) %((.-)%)", "%1")
		local game_text_list = {game_input}
		local custom_game_text = false
		if game_image ~= game_input
		then local game_text_list_unsplit = mw.ustring.gsub(game_input, "(.-) %((.-)%)", "%2")
			game_text_list = mw.text.split(game_text_list_unsplit, ", ")
			custom_game_text = true
		end
		
		local game_text = ""
		local first_game_text = true
		local j = 1
		while game_text_list[j] do
			if first_game_text
			then first_game_text = false
			else game_text = game_text .. ", "
			end
			game_text = game_text .. frame:expandTemplate{title='Jeu', args={game_text_list[j]}}
			j = j + 1
		end
			
		
		local extension = game_to_extension[game_image]
		if extension == nil
		then extension = "mp4"
		end
		local generation_number = game_to_generation[game_image]
		if generation_number == nil
		then generation_number = 0
		end
		
		local generation
		if generation_number == 0
		then generation = frame:expandTemplate{title='Jeu', args={game_image}}
		else generation = generation_number_to_text[generation_number]
		end
		
		-- Cell
		table.insert(image_line, "<td>[[Fichier:" .. name .. precision .. " " .. game_image .. "." .. extension .. "]]</td>")
		table.insert(game_line, "<td>" .. generation)
		-- Adding game for duplicate generations
		if custom_game_text or (generation ~= 0 and (generation_number >= 8 or duplicate_generations[generation_number] ~= nil))
		then table.insert(game_line, "<br><div style='width:280px; margin-left:auto; margin-right:auto'><small>(" .. game_text .. ")</small></div>")
		end
		table.insert(game_line, "</td>")
		
		-- End of line
		if i % 3 == 0
		then 
			table.insert(image_line, "</tr>")
			table.insert(game_line, "</tr>")
			table.insert(result, table.concat(image_line, ""))
			table.insert(result, table.concat(game_line, ""))
			image_line = {}
			game_line = {}
		end
		
		i = i + 1
	end
	
	-- Adding the incomplete line
	if i % 3 ~= 1
	then
		table.insert(image_line, "</tr>")
		table.insert(game_line, "</tr>")
		table.insert(result, table.concat(image_line, ""))
		table.insert(result, table.concat(game_line, ""))
	end
	
	table.insert(result, '</table>')
	return table.concat(result, "")
end

return p