Module:Infobox/Biographie
Documentation for this module may be created at Module:Infobox/Biographie/doc
local localdata = require 'Module:Infobox/Localdata'
local person = require 'Module:Infobox/Fonctions/Personne'
local wd = require 'Module:Wikidata'
local linguistic = require 'Module:Linguistique'
local occupationformats = require 'Module:Infobox/Biographie/Chartes'
local function setformat() --retourne une table contenant la couleur principale de l'infobox et l'icône de titre
local occupations = wd.getIds(localdata.item, {property = 'P106'}) -- récupère les Qid des professions
if not occupations or (#occupations > 1) then -- si plusieurs occupations, on ne sait pas laquelle choisir
return {'Q', {'par défaut'}, '#EEEEFF', '#F6F6FF', '#000000', 'defaut'}
end
occupations = wd.addVals(occupations, {property = 'P279'}, 2) -- nombre d'étages de sous-classes à remonter
for i, j in pairs(occupations) do
for k, l in pairs(occupationformats) do
local chartIds = l[1]
if type(chartIds) == 'string' then chartIds = {chartIds} end
if wd.isHere(chartIds,j) then
return l --retourne une ligne de la table occupationformats, correspondant à l'occupation du sujet
end
end
end
return {'Q', {'par défaut'}, '#EEEEFF', '#F6F6FF', '#000000', 'defaut'}
end
local function setcharte()
local charte = localdata['charte']
if charte then
for i, j in pairs(occupationformats) do
local knowncharts = j[2]
if type(knowncharts) == 'table' then
if wd.isHere(knowncharts,charte) then
return j
end
end
end
end
return setformat()
end
local personformat = setcharte()
local function documentation()
local lines = {}
table.insert(lines , '{| class="wikitable sortable" style="width:100%"')
table.insert(lines , '|-')
table.insert(lines , '! style="width:10%" | Charte')
table.insert(lines , '! style="width:10%" | Élément Wikidata')
table.insert(lines , '! style="width:10%" | Valeur primaire<br />(fond titre)')
table.insert(lines , '! style="width:10%" | Valeur secondaire<br />(sous-titre)')
table.insert(lines , '! style="width:10%" | Valeur tertiaire<br />(texte titre)')
table.insert(lines , '! style="width:10%" | Icône<br />([[Projet:Infobox/Pictogramme|liste]])')
table.insert(lines , '! style="width:20%" | rendu titre')
table.insert(lines , '! style="width:20%" | rendu sous-titre')
table.sort(occupationformats, function (left, right)
return string.lower(left[2][1] or ''):gsub('é','e') < string.lower(right[2][1] or ''):gsub('é','e')
end)
table.insert(occupationformats, 1, {nil, nil, nil, nil, nil, nil})
for i, j in pairs(occupationformats) do
local wdsource = j[1] or {"Q"}
if type(wdsource) == 'string' then wdsource = {wdsource} end
local wd = table.concat(wdsource, ", ")
local chartesource = j[2] or {"par défaut"}
if type(chartesource) == 'string' then chartesource = {chartesource} end
local charte = table.concat(chartesource or {}, ", ")
local couleur1 = j[3] or '#CCCCAA'
local couleur2 = j[4] or '#D1CFAD'
local couleur3 = j[5] or '#000000'
local icone = j[6] or ''
local pict = ''
if icone ~= '' and icone ~= 'defaut' then
pict = mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Infobox/Pictogramme/' .. mw.text.trim(icone) .. '.css'})
end
table.insert(lines , '|-')
table.insert(lines , '! style="text-align:left;" | ' .. charte)
table.insert(lines , '| style="text-align:center;" | ' .. wd)
table.insert(lines , '| style="text-align:center;" | ' .. couleur1)
table.insert(lines , '| style="text-align:center;" | ' .. couleur2)
table.insert(lines , '| style="text-align:center;" | ' .. couleur3)
table.insert(lines , '| style="text-align:center;" | ' .. icone)
table.insert(lines , '| class="entete ' .. icone .. '" style="background-color:' .. couleur1 .. '; height:45px; text-align:center; font-size:150%; font-weight:bolder; color:' .. couleur3 .. ';" | titre ' .. pict)
table.insert(lines , '| style="background-color:' .. couleur2 .. '; height:45px; text-align:center; font-size:150%; font-weight:bolder; color:#000000;" | sous-titre')
end
table.insert(lines , '|}')
return table.concat(lines, "\n" )
end
--catégorisation par charte utilisée (qu'elle soit déclarée manuellement ou déduite de Wikidata)
local chartcatlabel = (personformat[2] or {})[1] or "par défaut"
chartcatlabel = "Article utilisant l'infobox Biographie2 avec la charte " .. chartcatlabel
local categories
if not mw.title.makeTitle('Catégorie', chartcatlabel ).exists then chartcatlabel = "Article utilisant l'infobox Biographie2 avec une charte sans catégorie" end
return {
maincolor = personformat[3],
secondcolor = personformat[4],
thirdcolor = personformat[5],
categories = {chartcatlabel},
documentation = documentation,
parts = {
person.title(personformat[6]),
person.mainimage(),
person.officialposition(),
person.specialrole(),
person.nobilitytitle(),
{type = 'table',title='Biographie',rows = {
person.birth(),
person.death(),
person.placeofburial(),
person.othernames(),
{type = 'row', label = 'Époque', value = 'époque', wikidata = {property = 'P2348'}},
person.nationality(),
{type = 'row', label = 'Allégeance', plurallabel = 'Allégeances', value = 'allégeance', wikidata = {property = 'P945'}},
person.places(),
person.education(),
person.occupation(),
person.floruit(),
person.writinglanguage(),
person.haswrittenfor(),
{
type = 'row',
label = 'Appartenance ethno-culturelle',
plurallabel = 'Appartenances ethno-culturelles',
value= 'ethnicité',
wikidata = {
-- ethnicité veut dire appartenance à une ethnie d'après [[Ethnie]]
-- essai de expl=true qui est normalement fait pour données mises à jour
-- mais à utilité dans chaque article difficile à décider automatiquement
property = 'P172',
expl = true,
-- désactivé si la valeur est une instance de race humaine (Q3254959)
condition = function(claim)
local v = wd.getMainId(claim)
return (not wd.isInstance('Q3254959', v, 2))
end
}
},
person.family(),
person.gens(),
person.slavery(),
}},
{type = 'table',title='Autres informations',rows = {
{type = 'row', label = 'Organisation', plurallabel = 'Organisations', value = 'organisation', wikidata = {property = 'P1268', showdate = true}},
person.employer(),
{type = 'row', label = 'Chaire', plurallabel = 'Chaires', value = 'chaire', wikidata = {property = 'P803'}},
{type = 'row', label = 'Domaine', plurallabel = 'Domaines', value = 'domaine'}, --l'appel à P101 doublonne généralement l'Activité
{type = 'row', label = 'Propriétaire de', value = 'propriétaire de', wikidata = {property = 'P1830', showdate = true, sorttype= 'chronological'}},
person.religion(),
person.politicalparty(),
{type = 'row', label = 'Idéologie', value = 'idéologie', wikidata = {property = 'P1142'}},
person.memberof(),
{
type = 'row',
label = '[[Huit Bannières|Bannière]]',
plurallabel = '[[Huit Bannières|Bannières]]',
value = "bannière d'appartenance",
wikidata = {
property = 'P470',
labelformat = function(id)
local label = wd.getLabel(id)
if label then
return mw.ustring.gsub(label, '[Bb]annière ', '')
end
end
}
},
person.military(),
person.movement(),
person.appearance(),
person.sport(),
{type = 'row', label = 'Grade', plurallabel = 'Grades', value= {'grade dan/kyu','grade'}, wikidata = {property = 'P468', numval = '1', sorttype = 'inverted', showdate = true, precision = 'year', removedupes = true}},
--{type = 'row',label = 'Commandement',plurallabel = 'Commandements',wikidata = {property = 'P598', sorttype= 'chronological', showdate = true, precision = 'year'},}, --propriété obsolète sur Wikidata
--{type = 'row', label = 'A participé à', value = 'participant à', property = 'P1344'}, --risque de générer de longue listes sans grande pertinence
person.torero(),
person.music(),
person.contacts(),
{type = 'row', label = 'Monture', plurallabel= 'Montures', value= 'monture', wikidata = {property = 'P3091', showdate = true}},
{type = 'row', label = 'Genre artistique', plurallabel= 'Genres artistiques', value= {'genre artistique','genre'}, wikidata = {property = 'P136'}},
person.influencedby(),
person.victims(),
person.penalties(),
{type = 'row', label = 'Adjectifs dérivés', value = 'adjectifs dérivés'},
person.website(),
{type = 'row', label = 'Blog officiel', value = 'blog officiel', wikidata={property = 'P1581' , conjtype = 'new line', showlang = true }},
person.awards(),
person.filmography(),
person.discography(),
{type = 'row', label = 'Abréviation en botanique', plurallabel = 'Abréviations en botanique', value = 'abréviation en botanique', wikidata={property = 'P428'}},
{type = 'row', label = 'Abréviation en zoologie', plurallabel = 'Abréviations en zoologie', value = 'abréviation en zoologie', wikidata={property = 'P835'}},
person.archivesat(),
person.feast(),
}},
person.honorifictitle(),
person.voice(),
person.prononciation(),
person.blason(),
person.sceau(),
person.monogram(),
person.flag(),
person.logo(),
person.works{title = localdata['intitulé œuvres'] or localdata['intitulé oeuvres']},
person.signature(),
person.plaque(),
person.tombe(),
}
}