Module:Infobox/Fonctions
La documentation pour ce module peut être créée à Module:Infobox/Fonctions/doc
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
-- Fonctions communes à diverses infobox
local localdata = require 'Module:Infobox/Localdata'
local wikidata = require 'Module:Wikidata'
local linguistic = require "Module:Linguistique"
local item = localdata.item
local p = {}
function p.title(icon, style, subtitleparam, subtitlequery, italic)
local function hide(param, value)
if localdata[param] ~= '-' then
return value
end
end
return {
type = 'title',
value = function()
return localdata['non'] or localdata['association_nom'] or localdata['nom_think'] or localdata['acronymelaboratoire'] or localdata['tit']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = function() if localdata[subtitleparam] ~= '-' then return localdata[subtitleparam] end end,
wikidatasubtitle = hide(subtitleparam, subtitlequery),
icon = icon,
style = style,
italic = italic,
setdisplaytitle = italic,
}
end
function p.standardImage(imageType, imageparameters, property, upright)
return {
type = 'images',
imageparameters = imageparameters or {imageType},
captionparameter = 'légende ' .. imageType,
property = property,
defaultupright = upright,
classparameter = 'classe ' .. imageType,
uprightparameter = 'upright ' .. imageType,
sizeparameter = 'taille ' .. imageType,
altparameter = 'alternative ' .. imageType,
numval = 1,
}
end
function p.mainimage(args, defaultimage)
if type( args ) ~= 'table' then
args = { cat = args, defaultimage = defaultimage }
end
local tableReturned = p.standardImage('image', {'image', 'photo', 'Photo'}, {'P18', 'P5252'}, upright or '1')
tableReturned.defaultimages = args.defaultimage or defaultimage
tableReturned.defaultimagelink = 'Aide:Insérer une image'
tableReturned.uprightparameter = 'upright'
tableReturned.defaultupright = args.upright
tableReturned.defaultsize = args.size
tableReturned.maintenancecat = args.cat or 'Article à illustrer'
tableReturned.captionparameter = {'légende', 'légende image', 'Légende'}
tableReturned.altparameter = args.altparameter or 'alternative image'
tableReturned.defaultimagealt = args.defaultimagealt
tableReturned.property = nil
tableReturned.wikidata = args.wikidata or {property = {'P18', 'P5252'}}
return tableReturned
end
function p.interior(upright)
return p.standardImage('intérieur', {'intérieur', 'interior'}, 'P5775', upright or '1')
end
function p.logo(upright)
return p.standardImage('logo', {'logo', 'association_logo'}, 'P154', upright or '0.6')
end
function p.blason(upright)
local tableReturned = p.standardImage('blason', {'blason', 'sceau'}, {'P94', 'P158'}, upright or '0.8')
tableReturned.captionparameter = {'légende blason', 'légende sceau'}
tableReturned.uprightparameter = {'upright blason', 'upright sceau'}
tableReturned.sizeparameter = {'taille blason', 'taille sceau'}
return tableReturned
end
-- Il n'y a aucune preuve que le paramètre id ai une utilité: aucun appel avec ce paramètre et pas de documentation (2022-08-20).
function p.flag(upright, id)
local tableReturned = p.standardImage('drapeau', {'drapeau'}, 'P41', upright or '1')
local drapeau = wikidata.formatStatements{entity = id, property = 'P163', defaultlink = '-'}
tableReturned.captionparameter = drapeau or 'légende drapeau'
return tableReturned
end
function p.sign(upright)
return p.standardImage('signalisation', {'signalisation'}, 'P14', upright or '0.4')
end
function p.icon(upright)
return p.standardImage('icône', {'icône'}, 'P2910', upright or '0.4')
end
function p.bathymetricmap(upright)
return p.standardImage('carte bathymétrique', {'carte bathymétrique'}, 'P207', upright or '1')
end
function p.routemap(upright)
return {
type = 'images',
imageparameters = {'tracé'},
-- defaultimage = {},
-- maintenancecat =
captionparameter = 'légende tracé',
property = 'P15',
defaultupright = upright or '1',
uprightparameter = 'upright tracé',
sizeparameter = 'taille tracé',
numval = 1,
}
end
-- Liens externes
function p.website(localparam) -- texte libre [http://example.org example.org] ou url seule localparam est désigne le paramètre utilisé historiquement dans le modèle pour le site web (legacy)
return {
type = 'mixed',
label = 'Sit wèb',
plurallabel = 'Sit entènet',
wikidata = function()
local values, num = wikidata.formatAndCat {
entity = localdata.item,
displayformat = 'weblink',
conjtype = '<br />',
property = 'P856',
isinlang = 'fr',
excludespecial = true, -- excludespecial car il peut y avoir marqué "aucune valeur" pour le français, mais y avoir un site en anglais
returnnumberofvalues = true,
}
if not values then
values, num = wikidata.formatAndCat {
entity = localdata.item,
displayformat = 'weblink',
conjtype = '<br />',
property = 'P856',
showlang = true,
excludespecial = true,
returnnumberofvalues = true,
}
end
return values, num
end,
value =
function()
local siteurl = localdata[localparam] or localdata['site web'] or localdata['site_web'] or localdata['site officiel'] or localdata['site internet'] or localdata['web'] or localdata['sit wèb'] or localdata['sit ofisyèl']
local sitename = localdata['nom site']
if siteurl then
if siteurl == '-' then
return '-'
else
return require("Module:Weblink").makelink(siteurl, sitename)
end
end
end,
}
end
-- Son, prononciation
function p.selectSound(prop)
-- priorité au français
if wikidata.getClaims{entity = localdata.item, property = prop, qualifier = {'P407'}, qualifiervalue = {'Q150'} } then
return {property = prop, qualifier = {'P407'}, qualifiervalue = {'Q150'} }
end
return {property = prop}
end
function p.prononciation()
return {
type = 'images',
style = {['padding-top'] = '25px'},
defaultcaption = 'Prononciation',
captionparameter = 'légende prononciation',
imageparameters = 'prononciation',
defaultsize = '280',
wikidata = p.selectSound('P443'),
numval = 1,
}
end
-- Fonctions de géolocalisation
function p.country(default)
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
return coordfunctions.country(default)
end
--- localisation administrative par Wikidata
function p.wikidataDivRows(countryid) -- liste de lignes de divisions administratives basée sur des données de Wikidata
if not localdata.item then
return nil
end
-- récupération des valeurs
local list = wikidata.transitiveVals(localdata.item, {property = "P131", atdate = "today", excludespecial = true}, 3, 5, countryid)
if not list then
return nil
end
-- création des colonnes
local rows = {}
for i, div in pairs(list) do
if (div == countryid) then
break
end
local rowlabel, rowlabelid, rowlabeltext, rowlabellink, rowvalue
rowlabelid = wikidata.formatStatements{entity= div, property = 'P31', numval = 1, displayformat = 'raw', excludespecial = true}
rowlabeltext = wikidata.getLabel(rowlabelid)
if rowlabeltext then
rowlabeltext = linguistic.ucfirst(linguistic.removecomplement(rowlabeltext)) -- imposé par les libellés pas très logiques sur Wikidata du genre "canton de Suisse" plutôt que "canton" else
else
rowlabeltext = ''
end
if (not rowlabeltext) then
rowlabeltext = 'Divizyon'
end
if rowlabelid then
rowlabellink = wikidata.siteLink(rowlabelid, {defaultlink = '-', defaultlinkquery= {property = "P2354"}} ) -- si pas de lien, lier vers la page de liste e.g liste des Etats de Californie
end
if rowlabellink then
rowlabel = "[[" .. rowlabellink .. "|" .. rowlabeltext .. "]]"
else
rowlabel = rowlabeltext
end
rowvalue = wikidata.formatEntity(div, {labelformat = function(id)
local str = wikidata.getLabel(id) or ""
if mw.ustring.match(rowlabel, str) then
str = linguistic.keepcomplement(str)-- si le nom de la division administrative affiché est présent, ne pas le répéter
end
return str
end})
local capitalid
capitalid = wikidata.formatStatements{entity= div, property = 'P36', numval = 1, displayformat = 'raw', excludespecial = true}
local function capitalstring(div)
if wikidata.isInstance('Q35657',div) then return '[[Lis kapital nan Etazini|kapital]]' end
if wikidata.isInstance('Q107390',div) or wikidata.isInstance('Q96196009',div) or wikidata.isInstance('Q34876',div) then return '[[kapital]]' end --État ou province
if wikidata.isInstance('Q28575',div) then return '[[syèj konte|syèj]]' end
return '[[chèflye]]'
end
if capitalid == localdata.item then
rowvalue = rowvalue .. '<small> (' .. capitalstring(div) .. ')</small>'
end
table.insert(rows, 1, {type = "row", label = rowlabel, value = function() return rowvalue end})
end
return rows
end
function p.geoloc(params)
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
return coordfunctions.geoloc(params)
end
function p.coordinates(params)
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
return coordfunctions.coordinates(params)
end
function p.locationmap(params)
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
return coordfunctions.locationmap(params)
end
function p.detailedmap(params)
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
return coordfunctions.detailedmap(params)
end
return p