Module:Country data
Apparence
[voir] [modifier] [historique] [purger]
Utilisation
Modèle permettant d'afficher des informations en rapport avec un pays ou une zone géographique en utilisant les données de ses sous-modules, par exemple Module:Country data/canada, qu'il retrouve avec l'aide de Module:Country data/liste.
Fonctions exportables
standarddisplay(zone, format)
- affiche un nom de zone formaté selon les instruction données dans paramètre format et des données données dans le sous-module dédié à la zone (voir Module:Country data/canada). Par défaut, le modèle affiche le drapeau actuel et le nom courant du pays, mais cela peut-être changé par les paramètres :- argument 1 : nom de la zone, qui peut aussi être un identifiant Wikidata, mais qui doit figurer sur Module:Country data/liste.
- argument 2 : table des paramètres de mise en forme :
date
(date au format ISO pour afficher le drapeau ou le nom de pays valable à l'époque demandée)label
'label = "-" désactive le libellé est retourné, seul le drapeau est retournétype
type de drapeau à utiliser ("civil", "navy", etc.)
nationality(zone, gender, number, topic, period)
– affiche la nationalité d'une personne sous forme d'adjectif en fonction de son genre et de l'époque
Modules externes et autres éléments dont ce module a besoin pour fonctionner
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
--[[
This module is intended to replace the functionality of {{drapeau2}} and related
templates. It provides several methods, including
]]
local p = {};
-- Chargement de la banque de données des langues avec gestion d'erreur.
local gdata
local linguistic = require "Module:Linguistique"
local success, resultat = pcall (mw.loadData, "Module:Country data/liste" )
-- chargement des données
if success then
gdata = resultat
else
-- Banque de données à minima en cas de bogue dans le Module:Langue/Data
gdata={
['france']={item="Q142", flag= "Flag_of_France.svg", name ="France"}
}
end
local gdomain
local success, resultat = pcall (mw.loadData, "Module:Drapeau/Domaine" )
if success then
gdomain = resultat
end
local function _getCompetition(c,aaaa)
local rep="";
if(c=="CM" or c=="coupedumonde") then
rep="à la Coupe du monde"
elseif(c=="CE" or c=="euro") then
rep="au championnat d'Europe"
elseif(c=="ChM") then
rep="au championnat du monde"
elseif(c=="CAN" or c=="coupedesconfederations") then
rep="à la Coupe des Confédérations"
elseif(c=="en" ) then
rep="en"
elseif(c=="jo" ) then
rep="aux Jeux olympiques"
elseif(c=="jp" ) then
rep="aux Jeux paralympiques"
end
--edition
if(aaaa ~= nil and aaaa ~= "") then
if(c=="jo" or c=="jp" ) then
local o=gdomain.jo["_"..aaaa];
if(o ~= nil) then
rep=rep.." "..o
end
else
rep=rep.." "..aaaa
end
end
return rep
end
function printIcon(filescr, alt, size, border)
if (border ~= "no") or (border == false) then
border='border|'
end
if not alt then
alt = ''
end
return '<span class="flagicon">' ..
'[[Fichier:' .. filescr .. '|' .. size ..'px|' .. border .. alt ..']]' ..
'</span>';
end
local function getData(datatable, typedata, topic, year)
-- récupères les données stockées sur datatable
-- typedata = flag ou nom
-- datedata = year
-- domain = arméée etc.)
local val = datatable[typedata] --(typedata = nom, drapeau, etc.)
if not topic then --(topic = army, air force, etc.)
topic = 'default'
end
local alt
-- si val est une chaîne, la retourner, sinon, ça doit être une table
if type(val) == 'string' then
return val
end
if type(val) ~= 'table' then
return error('demande invalide')
end
-- s'il existe une valeur spéciale pour ce topic (comme une valeur spéciale de flag pour topic = army : soit une chaîne, soit une table avec des valeurs chronologiques
if type(val[topic]) == 'table' then
val = val[topic]
end
if type(val[topic]) == 'string' then
return val[topic]
end
alt = datatable[typedata].alt
local numericdate
if year then
numericdate = tonumber(year)
end
if numericdate then
local bestdate = -10000
for i, j in pairs (datatable[typedata]) do
local k = tonumber(i)
if k and (k < numericdate) and (k > bestdate) then
val = j
bestdate = k
end
end
end
if not type(val) == 'string' then
return nil
end
return val, alt
end
local function printLabel(data, topic)
local label
if not name then
return getData(data, 'name')
end
end
local function printLink(areadata, topic)
if areadata.link then
return areadata.link[topic] or areadata.link['default']
end
return mw.wikibase.sitelink(data.item)
end
local function applyregex(str, areadata)
local cio = 'code CIO (en attente)' --require('Module:Wikidata')._formatStatements({entity= areadata.item, property= 'P984'}) or '??'
local label = getData(areadata, 'name')
local of = linguistic.of(label, areadata.genre)
str = mw.ustring.gsub(str, '$de$label', of)
str = mw.ustring.gsub(str, '$label', label)
str = mw.ustring.gsub(str, '$cio', 'cio')
if string.find(str, '$gentile') then
local function get(genre) return getData(areadata, 'adjective', genre) end
local gentileMS, gentileFS, gentileMP, gentileFP = get('ms'), get('fs'), get('mp'), get('fp')
str = mw.ustring.gsub(str, '$gentileMS', gentileMS)
str = mw.ustring.gsub(str, '$gentileFS', gentileFS)
str = mw.ustring.gsub(str, '$gentileMP', gentileMP)
str = mw.ustring.gsub(str, '$gentileFP', gentileFP)
end
return str
end
local function standardText(areadata, topicdata)
-- format standards stockées dans Module:Drapeau/domain
local link = topicdata.link
local label = topicdata.label
return link, label
end
local function getDatatable(zone)
zone = mw.ustring.lower(zone)
if gdata[zone] then
return require('Module:Country data/' .. gdata[zone])
else -- si le module existe mais n'est pas dans la liste
return require('Module:Country data/' .. zone)
end
end
function p.List(frame)
return p.list(frame)
end
function p.standarddisplay(zone, args)
if not zone then
return nil
end
-- nettoyage des paramètres
if not args then
args = {}
end
for i, j in pairs(args) do
args[i] = mw.text.trim(j) -- remove whitespaces
if args[i] == '' then args[i] = nil end
end
-- ajout des valeurs par défaut
local size = args["size"] or '20x15'
local flagtype = args["type"]
local domain
if args['domain'] and gdomain then
domain = args['domain']
domain = mw.ustring.lower(string.gsub(domain, " ", ""))
domain = linguistic.toascii(domain)
domain = gdomain.domainlist["domain"]
end
if args["domain"] and not domain then
return error("domaine non reconnu:" .. args["domain"])
end
local align = args["align"] or 'left'
local link = args["lien"]
local label = args["label"]
local year = args[2] or args["année"] or ''
local align = args["align"] or "left"
local target = args["target"]
local competition = args["compétition"]
local extra = ''
-- chargement des données
if not zone then
return nil -- error('paramètre 1 (pays) manquant')
end
local success, data = pcall(getDatatable, zone)
if not success then
if args.strict then
return error('lieu non reconnu')
end
return zone, false -- false == échec
end
-- image
local flagimage, alt = getData(data, 'flag', domain, year)
local icon -- le fichier mis en forme
if flagimage then
icon = printIcon(flagimage, alt, size, border)
end
if (label == '-') then
return icon
end
if domain then
link, label = standardText(data, domain)
end
if (not link) then
link = printLink(data, flagtype)
end
if (not label) then
label = printLabel(data, flagtype)
end
if competition then
competition = _getCompetition(linguistic.toascii(args["compétition"]),args["édition"])
end
if link and competition then
link = link .. ' ' .. competition
end
if link then
text = '[[' .. link .. '|' .. label .. ']]'
end
if target then
text = target .. ' (' .. text .. ')'
end
if string.find(text, '$') then -- si les données sont extraites d'un formulaire standard comme module:Drapeau/domain
text = applyregex(text, data)
end
local val
if align == 'right' then
val = text .. ' ' ..icon
else
val = icon .. ' ' .. text
end
return val, true -- true indique le succès
end
function p.drapeau(frame) -- pour appel depuis un modèle : {{#invoke:Country data|drapeau|nom du pays}}
local success, val = pcall(p._drapeau, frame.args)
if success then
return val
end
-- return p._drapeau(frame.args)
return frame.args[1]
end
return p