« Module:Country data » : différence entre les versions
Aucun résumé des modifications |
spinoff de Module:Drapeau |
||
| Ligne 1 : | Ligne 1 : | ||
--[[ | |||
This module is intended to replace the functionality of {{drapeau2}} and related | |||
templates. It provides several methods, including | |||
]] | |||
local | local p = {}; | ||
-- | -- Chargement de la banque de données des langues avec gestion d'erreur. | ||
-- | local gdata | ||
if not data or | 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, alt | |||
if (not datatable[typedata]) and ((typedata == 'naval') or (typedata == 'army') or (typedata == 'air force')) then -- s'il n'y a pas de drapeau spécialisé | |||
typedata = 'flag' | |||
end | |||
if not datatable[typedata] then | |||
return error('demande invalide') | |||
end | |||
if type(datatable[typedata]) == 'string' then | |||
return datatable[typedata] | |||
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 val then | |||
val = datatable[typedata][topic] or datatable[typedata]['default'] | |||
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 | return nil | ||
end | end | ||
if type( | -- nettoyage des paramètres | ||
return data[ | 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 | end | ||
if link then | |||
text = '[[' .. link .. '|' .. label .. ']]' | |||
if | end | ||
if target then | |||
text = target .. ' (' .. text .. ')' | |||
end | end | ||
if | |||
if string.find(text, '$') then -- si les données sont extraites d'un formulaire standard comme module:Drapeau/domain | |||
text = applyregex(text, data) | |||
end | end | ||
if | local val | ||
if align == 'right' then | |||
val = text .. ' ' ..icon | |||
else | else | ||
val = icon .. ' ' .. text | |||
end | end | ||
return | 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 | end | ||
return p | return p | ||
Version du 10 mars 2015 à 06:51
--[[
This module is intended to replace the functionality of
[[Modèle:Drapeau2/Libellé]] 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 '' ..
'' .. border .. alt ..'' ..
'';
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, alt
if (not datatable[typedata]) and ((typedata == 'naval') or (typedata == 'army') or (typedata == 'air force')) then -- s'il n'y a pas de drapeau spécialisé typedata = 'flag' end if not datatable[typedata] then return error('demande invalide') end if type(datatable[typedata]) == 'string' then return datatable[typedata] 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 val then val = datatable[typedata][topic] or datatable[typedata]['default'] 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 = '' .. 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 : 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