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 = {};
local linguistic = require "Module:Linguistique"
local gdomain = mw.loadData ( "Module:Drapeau/Domaine" )
local gdata = mw.loadData ("Module:Country data/liste" )
local function _getCompetition(c,aaaa)
local symbs = {
['cm'] = "à la Coupe du monde",
['coupedumonde'] = "à la Coupe du monde",
['ce'] = "au championnat d'Europe",
['euro'] = "au championnat d'Europe",
['chm'] = "au championnat du monde",
['can'] = "à la Coupe des Confédérations",
['coupedesconfederations'] = "à la Coupe des Confédérations",
['en'] = "en",
['jo'] = "aux Jeux olympiques",
['jp'] = "aux Jeux paralympiques",
}
local str = symbs[string.lower(c or '')] or ""
--edition
if(aaaa ~= nil and aaaa ~= "") then
if(c=="jo" or c=="jp" ) then
local o=gdomain.jo["_"..aaaa];
if(o ~= nil) then
str = str .." "..o
end
else
str = str .." "..aaaa
end
end
return str
end
local function printFlag(flagfile, alt, displayformat)
displayformat = displayformat or {}
local size = displayformat.size or '20x15'
local border = displayformat.border or '1px' or 'border|'
if (border ~= '-') then
border = 'border|'
end
if not alt then
alt = ''
end
return '<span class="flagicon">' ..
'[[Fichier:' .. flagfile .. '|' .. size ..'px|' .. border .. alt ..']]' ..
'</span>';
end
local function bestfordate(data, period) -- data contient une table dont les clés sont des dates au format ['2010'] = ou ['2010-05-04'] =
if type(data) == string then
return data
end
if (not period) or (period == 'default') then
return data.default
end
local year, month, day
if type(period) == 'table' then
year, month, day = period.year, period.month, period.day
end
if type(period) == 'string' then
year, month, data = period:match("(%d+)%-(%d+)%-(%d+)")
end
local val = datatable["default"]
local numericyear = tonumber(year)-- ne prend en compte que les années // à améliorer
if numericyear then
local bestdate = -10000
for i, j in pairs (datatable) do
local k = tonumber(i)
if k and (k < numericdate) and (k > bestdate) then
val = j
bestdate = k
end
end
end
return val
end
local function valueAtDate(data, period, topic) -- topic: type de drapeau, genre de l'adjectif, etc.
if type(data) == 'string' or type(data) == 'nil' then
return data
end
if type(data) ~= 'table' then
return error('bad datatabpe ' .. type(data))
end
if topic and data[topic] then
return valueAtDate(data[topic])
elseif type(data.default) == 'table' then -- si default est une table, ça veut dire defaulttopic, pas defaultdata
return valueAtDate(data.default)
end
return bestfordate(data, period)
end
local function getData(datatable, typedata, topic, period) -- récupère la chaîne de caractère la plus appropriée dans la datatable
-- datatable: la table de sous module par exemple [[Module:Country data/grenade]]
-- typedata: "flag" / "name" / "adjective"
-- period: data in ISO format
-- topic: for instance "navy" for naval ensign
local val = datatable[typedata]
if not val then -- error handling ?
return nil
end
local val = valueAtDate(val, period, topic)
if type(val) ~= 'string' then -- error handling ?
return error()
end
return val
end
local function getAdjective(data, gender, number)
if not gender then
gender = 'm'
end
if not number then
number = 's'
end
if (gender ~= 'm' and gender ~= 'f') then
return error('gender should be m or f is ' .. gender)
end
if (number ~= 's' and number ~= 'p') then
return error('number should be s or p is ' .. number)
end
return getData(data, 'adjective', (gender .. number))
end
local function getLabel(data, topic, period, form)
local label
if (not form) or form == 'short' then
label = getData(data, 'shortname', topic, period)
end
if not label then
label = getData(data, 'name')
end
if (not label) and data.item then
label = mw.wikibase.label(getData(data, 'item'))
end
return label
end
local function getLink(data, topic, period)
local link = getData(data, 'link', topic, period)
if (not link) and data.item then
link = mw.wikibase.label(getData(data, 'item'))
end
return link
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 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
local function flagIcon(data, flagtype, period, displayformat)
local flagimage = getData(data, 'flag', flagtype, period)
if flagimage then
return printFlag(flagimage, alt, displayformat)
end
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 period = 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 flag = flagIcon(data, flagtype)
if (label == '-') then
return flag
end
if (not link) then
link = getLink(data, flagtype)
end
if (not label) then
label = getLabel(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 .. ' ' .. flag
else
val = flag .. ' ' .. text
end
return val, true -- true indique le succès
end
function p.nationality(zone, gender, number, topic, period)
local success, data = pcall(getDatatable, zone)
if not success then return
zone
end
local str = getAdjective(data, gender, number)
if not str then
return zone
end
local link = getLink(data, topic, period)
if link then
str = '[[' .. link .. '|' .. str .. ']]'
end
return str, 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