Aller au contenu

Module:Country data

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 10 mars 2015 à 09:54 et modifiée en dernier par Zolo (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[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

--[[
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 .. '&nbsp;' ..icon
	else
		val = icon .. '&nbsp;' .. 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