Module:BaS Infobox/Fonctions/Personne
[voir] [modifier] [historique] [purger]
Cette page est un fork de Module:Infobox/Fonctions/Personne créé pour faire des tests de modifications de {{Infobox Biographie2}} sans perturber les pages incluant le modèle.
Autre fork : Module:Infobox/Fonctions/Personne/Bac à sable
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 (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Functions utilisées par les infobox personnes
local p = {}
local wikidata = require "Module:Wikidata"
local general = require "Module:Infobox/Fonctions"
local datemodule = require "Module:Date"
local complexdate = require "Module:Date complexe"
local linguistic = require "Module:Linguistique"
--=== Accord en genre
-- établit la variable gender pour l'élément
local function setgender()
local vals = {
['Q6581072'] = 'f',
['Q6581097'] = 'm',
default = '?'
}
local gender = wikidata.formatStatements{entity = item, property = 'P21', displayformat = 'raw'}
return vals[gender] or vals.default
end
local gender = setgender()
-- récupération des libellés spéciaux codés en dur sur Wikipédia (attention : contient à la fois le libellé et le lien)
local hardcodedlabels = require "Module:Dictionnaire Wikidata/Métiers"
local function specialgenderedlabels()
if gender == 'f' then
return hardcodedlabels.female
elseif gender == 'm' then
return hardcodedlabels.male
end
end
local genderedlabellist = genderedlabellist or specialgenderedlabels()
-- récupération des libellés genrés de Wikidata
local function genderedlabel(id)
local label
if gender == 'f' then -- femme : chercher le libellé dans P2521 (libellé féminin)
label = wikidata.formatStatements{entity = id, property = 'P2521', isinlang = 'fr', numval = 1}
end
if not label then
label = wikidata.getLabel(id)
end
return label
end
-- === Gestion des dates
-- Liens thématiques vers les dates
local datelinks = { -- lien vers le domaine d'activité approprié
Q483501 = 'en arts plastiques', -- artiste
Q1028181 = 'en arts plastiques', -- peintre
Q1281618 = 'en arts plastiques', -- sculpteur
Q2309784 = 'en cyclisme', -- cycliste
Q16947657 = 'en arts plastiques', -- lithographe
}
local function getdatetopic() -- obtient le lien le plus approprié pour une date en fonction de la profession
local claims = wikidata.getClaims{entity = item, property = 'P106', excludespecial = true}
if not claims then
return nil
end
for i, j in pairs(claims) do
local v = wikidata.getMainId(j)
if datelinks[v] then
return datelinks[v]
end
end
end
local linktopic = getdatetopic()
--=====
local function wikidatadate(prop) -- fonction à vocation généraliste, à externaliser
return wikidata.formatStatements{ property = prop, entity = item, linktopic = linktopic }
end
local birthdate = localdata['naissance'] or localdata['date de naissance'] or wikidatadate('P569')
local deathdate = localdata['décès'] or localdata['date de décès'] or wikidatadate('P570')
local function format1(event, period, predecessor, successor, displayformat)
local mainstr = event
if predecessor then
local s = 'précédé par ' .. predecessor
if gender == 'f' then
s = 'précédée par ' .. predecessor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
return {type = 'row', label = period or '', value = function() return mainstr end}
end
-----------------
local function format2(event, period, predecessor, successor, displayformat)
if (not event) then
return nil
end
local rows = {}
local eventrow = {type = 'row1col', color = 'secondcolor', value = event }
table.insert(rows, eventrow)
if period then
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, periodrow)
end
if predecessor then
local prederow = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
table.insert(rows, prederow)
end
if successor then
local succrow = {type = 'row', label = 'Successeur', value = function() return successor end}
table.insert(rows, succrow)
end
return {type = 'multi', rows = rows}
end
local function format3(event, period, predecessor, successor, displayformat)
if not event then
return nil
end
local rows = {}
local mainrow = {type = 'row1col', color = 'secondcolor', value = event }
table.insert(rows, mainrow)
if period then
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, periodrow)
end
if (predecessor or successor) then
local text = {}
text.before = predecessor
text.after = successor
local row3 = {type = 'succession', color = displayformat['background-color'] or 'default', value = text }
table.insert(rows, row3)
end
return {type = 'multi', rows = rows}
end
local function timeline(statements, prop, timelineformat, options) -- affiche date : événement (suppose les événements déjà triés)
if not statements then
return nil
end
-- mise en forme par défaut
if not options then
options = {}
end
options.labelformat = options.labelformat or function(id) return genderedlabel(id) end
options.speciallabels = genderedlabellist
options.precision = options.precision or 'year'
options.linktopic = options.linktopic or '-'
options.stilltrue = not(deathdate) -- si la personne est vivante, on emploie "depuis" plutôt que "à partir de" (mais lorsque c'est fini mais que la date de fin manque, ça devient faux)
local rows = {}
local displayformats = {
A = format1,
B = format2,
C = format3,
}
local applyformat = displayformats[timelineformat] or displayformats['A']
local rows = {}
for i, statement in pairs(statements) do
local event = wikidata.formatStatement(statement, options)
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
local period = wikidata.getFormattedDate(statement, options )
local row = applyformat(event, period, predecessor, successor, options)
if row then
table.insert(rows, row)
end
end
return rows
end
local function dateandplace(thedate, theplace)
if thedate then
i, j = string.find(thedate, 'inconnu')
if i then
thedate = nil
end
end
if theplace then
i, j = string.find(theplace, 'inconnu')
if i then
theplace = nil
end
end
if thedate and theplace then
return thedate .. '<br />' .. theplace
else
return thedate or theplace --retourne tout ce qu'il trouve
end
end
--Titre
function p.title(icon, style)
return general.title(icon, style)
end
--Image
function p.mainimage()
-- demande d'illustration que si la personne est née après 1900, sinon c'est souvent impossible à trouver
local defaultimage = 'Defaut 2.svg'
local age = wikidata.stringTable{property = 'P569', entity = item, displayformat = 'raw', excludespecial = true}
if age and age[1] then
local pattern = "(%W)(%d+)%-(%d+)%-(%d+)"
local era, year = age[1]:match(pattern)
if (era == '-') or (tonumber(year)) < 1900 then
defaultimage = nil
end
end
return general.mainimage('Article à illustrer/Biographie', defaultimage)
end
-- Noms
function p.othernames()
local names = {
{'P1477', 'Nom de naissance', 'Noms de naissance', 'nom de naissance'},
{'P1449', 'Surnom', 'Surnoms', 'surnom'},
{'P1559', 'Nom dans la langue maternelle', 'Noms dans la langue maternelle', 'nom dans la langue maternelle'},
{'P742', 'Pseudonyme', 'Pseudonymes', 'pseudonyme'},
{'P1782', 'Prénom social', 'Prénoms sociaux', 'prénom social'},
{'P1786', 'Nom posthume', 'Noms posthumes', 'nom posthume'},
{'P1785', 'Nom de temple', 'Noms de temple', 'nom de temple'},
{'P1787', 'Nom de pinceau', 'Noms de pinceau', 'nom de pinceau'},
{nil, 'Autres noms', 'autres noms'}
}
local rows = {type = 'multi', rows = {}}
for i, j in pairs(names) do
local query
if j[1] and not localdata['autres noms'] then -- lorsqu'il y a un paramètre "autres noms", Wikidata est désactivée pour éviter risques de doublon
query = {property = j[1], showqualifiers = {'P1721'}, conjtype = ',<br />'}
end
table.insert(rows.rows, {type = 'row', value = j[4], wikidata = query, label = j[2], plurallabel = j[3]})
end
return rows
end
-- NAISSANCE ET MORT
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
return {
type = 'row',
label = 'Naissance',
value =
function()
local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = birthdate or '', [3] = deathdate or '', qualificatif = linktopic}}
local theplace = localdata['lieu de naissance'] or wikidata.formatAndCat({entity =item, property= 'P19', rank = 'best', conjtype= ' ou '})
return dateandplace(thedate, theplace)
end
}
end
function p.death() -- même fonctionnement que la fonction p.birth
return {
type = 'row',
label = 'Décès',
value =
function()
local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = birthdate or '', [3] = deathdate or '', qualificatif = linktopic}}
local theplace = localdata['lieu de décès'] or wikidata.formatAndCat({entity = item, property= 'P20', rank = 'best', conjtype= ' ou '})
return dateandplace(thedate, theplace)
end
}
end
function p.floruit()
return {
type = 'row',
label = 'Période d’activité',
value = "Période d'activité",
wikidata = function() return wikidatadate('P1317') end
}
end
function p.placeofburial()
local title = "Lieu d'enterrement"
return
{type = 'row', label = "Lieu d'enterrement", value = "Lieu d'enterrement", property = 'P119'}
end
function p.nationality()
-- à améliorer pour tenir compte des dates tout en évitant les doublons pour ceux qui ont Empire allemand + République de Weimar
local function wdDate()
local nation = require "Module:Country data".nationality
local statements = wikidata.getClaims{entity = item, property = 'P27'}
if not statements then
return nil
end
-- désactivation si date de naissance < 1800 : trop d'imprécisions et d'anachronismes
local mindate = '1800'
local birthdate = wikidata.formatStatements{entity = item, property = 'P569', displayformat = 'raw', numval = 1}
if (not birthdate) or complexdate.before(mindate, birthdate) then
return nil
end
return wikidata.formatAndCat{
property = 'P27',
vals = statements,
showdate = true,
entity = item,
conjtype = 'comma',
removedupes = true,
linktopic = '-',
displayformat =
function(snak)
-- local g = gender -- ne sert plus: ici au féminin comme Nationalité
-- if g == '?' then -- si inconnu, au féminin comme Nationalité
-- g = 'f'
-- end
local val, success = nation(wikidata.getId(snak), 'f')
if not success then
val = wikidata.formatSnak(snak)
end
return val
end
}, #statements
end
return {
type = 'row',
label = 'Nationalité',
plurallabel = 'Nationalités',
value = 'nationalité',
wikidata = function() return wdDate() end
}
end
function p.nativelanguage()
return
{type = 'row', label = 'Langue maternelle', value = 'langue maternelle', property = 'P103'}
end
-- Domiciles
function p.places()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Domicile',
plurallabel = 'Domiciles',
value = 'domicile',
wikidata = {property = 'P551', showdate = true, sorttype= 'chronological', precision = 'year'},
},
}}
end
-- parcours professionel
function p.education() -- à améliorer
local query = {sorttype= 'chronological', property = 'P69', showdate = true, showqualifiers = 'P512', conjtype = '<br />', linktopic = '-'}
return {
type = 'row',
value = {'éducation', 'formation'},
wikidata = query,
label = 'Formation',
}
end
function p.occupation()
return {
type = 'row',
value = {'activité', 'activités'},
wikidata = {
property = 'P106',
defaultlink = '-',
defaultlinkquery = {property = 'P425'},
labelformat = function(id) return genderedlabel(id) end,
speciallabels = genderedlabellist,
excludevalues = { -- les occupations qui ne méritent pas d'être affichées
'Q482980', -- auteur
'Q15980158' -- auteur de non-fiction
}
},
label = 'Activité',
plurallabel = 'Activités'
}
end
function p.employer()
return {
type = 'row',
value = 'employeur',
wikidata = {property = 'P108', showdate = true, sorttype= 'chronological'},
label = function() return localdata['intitulé employeur'] or 'A travaillé pour' end,
}
end
function p.victories()
local title = 'Victoires'
local singtitle = 'Victoire'
local rows
if localdata['victoire'] then
return {type = 'table', rows = {
{type = 'row', label = title, value = 'victoire'}
}
}
else
local statements = wikidata.getClaims{property = 'P2522', entity = item, sorttype = 'chronological'}
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
rows = timeline(statements, 'P2522', 'B')
end
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.officialposition()
local title = 'Fonctions'
local singtitle = 'Fonction'
local rows
if localdata['fonction'] then
return {type = 'table', rows = {
{type = 'row', label = title, value = 'fonction'}
}
}
end
local query = {property = 'P39', entity = item, rank = 'valid', sorttype = 'chronological'}
local formatting = {showqualifiers = 'P1001', 'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}
local statements = wikidata.getClaims(query)
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
rows = timeline(statements, 'P39', 'C', formatting)
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.nobilitytitle()
local title = 'Titres'
local singtitle = 'Titre'
local rows
-- avec données locales
if localdata['titre'] then
return {type = 'table', rows = {
{type = 'row', label = title, value = 'titre'}
}
}
end
-- avec données de Wikidata
local statements = wikidata.getClaims{property = 'P97', entity = item, rank = 'valid', sorttype = 'chronological'}
if not statements then
return nil
end
-- configuration de la mise en forme
local conf = {}
conf.claims = statements
conf.showqualifiers = {'P642'}
if #statements == 1 then
title = singtitle
end
rows = timeline(statements, 'P97', 'B', conf )
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.honorifictitle()
local title = 'Titres'
local singtitle = 'Titre'
local rows
if localdata['titre'] then
return {type = 'table', rows = {
{type = 'row', label = title, value = 'titre'}
}
}
else
local statements = wikidata.getClaims{property = 'P511', entity = item, rank = 'valid', sorttype = 'chronological'}
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
rows = timeline(statements, 'P511', 'A')
end
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.blason()
return {
type = 'images',
imageparameters = {'blason'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille blason',
captionparameter = 'legende blason',
defaultcaption = '',
property = 'P94',
numval = 1,
}
end
function p.flag()
return {
type = 'images',
imageparameters = {'drapeau'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille drapeau',
captionparameter = 'legende drapeau',
defaultcaption = 'Drapeau',
property = 'P41',
numval = 1,
}
end
function p.politicalparty()
return {
type = 'row',
value = 'parti politique',
label = 'Parti politique',
plurallabel = 'Partis politiques',
wikidata = { property = 'P102', sorttype= 'chronological', showdate = true, conjtype = '<br />', excludespecial = true},
}
end
function p.memberof()
return {
type = 'row',
label = 'Membre de',
value = 'membre de',
wikidata = {property = 'P463', sorttype= 'chronological', showdate = true, precision = 'year'},
}
end
function p.awards() -- à améliorer
local function awardsList(item)
local majorlist = require "Module:Dictionnaire Wikidata/Distinctions"
local query = {
entity = item, property= 'P166', sorttype= 'chronological',
showqualifiers = 'P642', showdate= true, precision = 'year', textformat = 'minimum', linktopic = '-', conjtype = '<br />', defaultlinkquery = {property = 'P361'},
speciallabels = majorlist
}
local major = {} -- récompenses importantes obtenues
local all = {}
local message = "Liste détaillée"
local claims = wikidata.getClaims(query)
if not claims then
return nil
end
if #claims < 3 then
query.claims = claims
return wikidata.formatAndCat(query), #claims
end
-- formate la liste des statements, en met certaine dans les "major"
for i, j in pairs(claims) do
local id = wikidata.getMainId(j)
local s = wikidata.formatStatement(j, query)
table.insert(all, s)
if majorlist[id] then
table.insert(major, s)
end
end
-- transforme la liste complète en chaîne
query.value = table.concat(all, '<br />')
local str = wikidata.formatAndCat(query) -- la liste complète des récompenses
if (#all - #major < 2) then -- s'il n' a qu'une seule récompense mineure, ça ne sert à rien de la collapser
return str
end
-- transforme la liste des valeurs importantes en chaîne
if (#major > 0) then
query.value = table.concat(major, '<br />')
majorstr = wikidata.formatAndCat(query)
else
message = nil --=> pas de titre pour la liste complète
end
-- met la liste complète dans un menu replié
local obj = mw.html.create('div')
:addClass("toccolours mw-collapsible mw-collapsed")
:wikitext(message)
:css{border = "none"}
:tag('div')
:addClass("mw-collapsible-content")
:css{['line-height'] = '150%'} -- sinon c'est vraiment serré
:wikitext(str)
:done()
:allDone()
str = linguistic.conj({majorstr, tostring(obj)}, '<br />')
return str, #claims
end
return {
type = 'row',
value = {'prix', 'récompenses', 'distinction', 'distinctions'},
label = 'Distinction',
plurallabel = 'Distinctions',
wikidata = function() return awardsList(item) end
}
end
-- Influences
function p.influencedby()
return {
type = 'row',
label =
function(localdata, item)
if not gender then setgender(localdata, item) end
if gender == 'f' then
return 'Influencée par'
elseif gender == 'm' then
return 'Influencé par'
else
return 'Influencé(e) par'
end
end,
value = 'influencé par',
wikidata = {property = 'P737'},
}
end
function p.influenced()
return {
type = 'row',
label = 'A influencé',
value = {'a influencé', 'influence de'},
wikidata = {property = 'P738'},
}
end
-- Appartenances
function p.movement()
return
{type = 'row', label = 'Mouvement', value = 'mouvement', wikidata = {property = 'P135', sorttype= 'chronological', showdate = true, precision = 'year'},
}
end
-- Carrière militaire
function p.military()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Arme',
plurallabel = 'Armes',
value = 'arme',
wikidata = {property = 'P241', showdate = true, sorttype= 'chronological', precision = 'year'},
},
{
type = 'row',
label = 'Grade militaire',
plurallabel = 'Grades militaires',
value = 'grade militaire',
wikidata = {property = 'P410', showdate = true, sorttype= 'chronological', precision = 'year'},
},
{
type = 'row',
label = 'Conflit',
plurallabel = 'Conflits',
value = 'conflit',
wikidata = {property = 'P607', showdate = true, sorttype= 'chronological', precision = 'year'},
},
}}
end
-- Sport
function p.sport()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Sport',
plurallabel = 'Sports',
value = 'sport',
wikidata = {property = 'P641', showdate = true},
},
{
type = 'row',
label = 'Spécialité',
plurallabel = 'Spécialités',
value = 'spécialité',
wikidata = {property = 'P413'},
},
{
type = 'row',
label = 'Équipe',
plurallabel = 'Équipes',
value = 'équipe',
wikidata = {property = 'P54', sorttype= 'chronological', showdate = true, precision = 'year', conjtype = '<br />', showqualifiers = {'P1350', 'P1351'}},
},
{
type = 'row',
label = 'Capes internationales',
value = 'capes',
wikidata = {property = 'P1129', numval = '1'},
},
{
type = 'row',
label = 'Copilote',
plurallabel = 'Copilotes',
value = 'copilote',
wikidata = {property = 'P2095', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Sponsor',
plurallabel = 'Sponsors',
value = 'sponsor',
wikidata = {property = 'P859', sorttype= 'chronological', showdate = true, precision = 'year'},
},
}}
end
-- Contacts
function p.contacts()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Maître',
plurallabel = 'Maîtres',
value = {'maître', 'maîtres'},
wikidata = {property = 'P1066', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Directeur de thèse',
plurallabel = 'Directeurs de thèse',
value = 'directeur de thèse',
wikidata = {property = 'P184', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Agent',
label =
function(localdata, item)
if not gender then setgender(localdata, item) end
if gender == 'f' then
return 'Représentée par'
elseif gender == 'm' then
return 'Représenté par'
else
return 'Représenté(e) par'
end
end,
value = 'représenté par',
wikidata = {property = 'P1875'},
},
{
type = 'row',
label = 'Partenaire',
plurallabel = 'Partenaires',
value = 'partenaire',
wikidata = {property = 'P1327'},
},
{
type = 'row',
label = localdata['intitulé élève'] or 'Élève',
plurallabel = 'Élèves',
value = {'élève', 'élèves'},
wikidata = {property = 'P802', sorttype= 'chronological', showdate = true, precision = 'year', numval = '5'},
},
{
type = 'row',
label = 'Étudiant de thèse',
plurallabel = 'Étudiants de thèse',
value = 'étudiant de thèse',
wikidata = {property = 'P185', sorttype= 'chronological', showdate = true, precision = 'year', numval = '5'},
},
}}
end
-- Mécénat
function p.patron()
return {
type = 'row',
label = '[[Mécénat|Mécènes]]', singularlabel = '[[Mécénat|Mécène]]', plurallabel = '[[Mécénat|Mécènes]]',
value = 'mécènes',
wikidata = {property = 'P1962', showdate = true, sorttype = 'chronological', conjtype = 'comma'},
}
end
-- Musique
function p.music()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Tessiture',
value = 'tessiture',
property = 'P412',
},
{
type = 'row',
label = 'Fach',
value = 'fach',
property = 'P1731',
},
{
type = 'row',
label = 'Instrument',
plurallabel = 'Instruments',
value = 'instrument',
wikidata = {property = 'P1303', sorttype= 'chronological'},
},
{
type = 'row',
label = 'Label',
plurallabel = 'Labels',
value = 'label',
wikidata = {property = 'P264', sorttype= 'chronological', showdate = true, precision = 'year'},
},
}}
end
-- Physique
function p.appearance()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Taille',
value = 'taille',
wikidata = {property = 'P2048'},
},
{
type = 'row',
label = 'Poids',
value = 'poids',
wikidata = {property = 'P2067'},
},
{
type = 'row',
label = 'Cheveux',
value = 'cheveux',
wikidata = {property = 'P1884'},
},
{
type = 'row',
label = 'Yeux',
value = 'yeux',
wikidata = {property = 'P1340'},
},
}}
end
-- Famille
function p.family()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Famille',
plurallabels = 'Familles',
value = 'famille',
property = 'P53',
},
{
type = 'row',
label = 'Père',
value = 'père',
property = 'P22',
},
{
type = 'row',
label = 'Mère',
value = 'mère',
property = 'P25',
},
{
type = 'row',
label = function()
-- retourne une forme singulière ou plurielle.
local claims = wikidata.getClaims{property = 'P7', entity = item}
if (not claims) or #claims == 1 then
return "Frère"
end
return "Frères"
end,
value = 'frère',
wikidata = function()
local claims = wikidata.getClaims{entity = item, property = 'P7', sorttype = 'chronological'}
if not claims then
return nil
end
local conjtype, textformat = '<br />', 'long'
return wikidata.formatAndCat{entity = item, property = 'P7', showdate = true, textformat = textformat, precision = 'year', linktopic = '-', conjtype = conjtype, stilltrue = (not deathdate)}
end
},
{
type = 'row',
label = function()
-- retourne une forme singulière ou plurielle.
local claims = wikidata.getClaims{property = 'P9', entity = item}
if (not claims) or #claims == 1 then
return "Sœur"
end
return "Sœurs"
end,
value = 'sœur',
wikidata = function()
local claims = wikidata.getClaims{entity = item, property = 'P9', sorttype = 'chronological'}
if not claims then
return nil
end
local conjtype, textformat = '<br />', 'long'
return wikidata.formatAndCat{entity = item, property = 'P9', showdate = true, textformat = textformat, precision = 'year', linktopic = '-', conjtype = conjtype, stilltrue = (not deathdate)}
end
},
{
type = 'row',
label = function()
-- retourne une forme singulière ou plurielle. Pourrait éventuellement adapter féminin masculine, mais demanderait logiquement de vérifier le sexe de chaque valeur
local claims = wikidata.getClaims{property = 'P26', entity = item}
if (not claims) or #claims == 1 then
return "Conjoint"
end
return "Conjoints"
end,
value = 'conjoint',
wikidata = function()
local claims = wikidata.getClaims{entity = item, property = 'P26', sorttype = 'chronological'}
if not claims then
return nil
end
local conjtype, textformat = '<br />', 'long'
if #claims > 4 then
conjtype, textformat = 'comma', 'minimum'
end
return wikidata.formatAndCat{entity = item, property = 'P26', showdate = true, textformat = textformat, precision = 'year', linktopic = '-', conjtype = conjtype, stilltrue = (not deathdate)}
end
},
{
type = 'row',
label = function()
-- retourne une forme singulière ou plurielle.
local claims = wikidata.getClaims{property = 'P40', entity = item}
if (not claims) or #claims == 1 then
return "Enfant"
end
return "Enfants"
end,
value = 'enfant',
wikidata = function()
local claims = wikidata.getClaims{entity = item, property = 'P40', sorttype = 'chronological'}
if not claims then
return nil
end
local conjtype, textformat = '<br />', 'long'
return wikidata.formatAndCat{entity = item, property = 'P40', showdate = true, textformat = textformat, precision = 'year', linktopic = '-', conjtype = conjtype, stilltrue = (not deathdate)}
end
},
{
type = 'row',
label = 'Parentèle',
value = 'parentèle',
wikidata = {property = 'P1038', showqualifiers = {'P1039'}}
},
}}
end
-- Œuvres
function p.works()
local title = 'Œuvres réputées'
-- on pourrait mettre quelque chose comme "oeuvre principale" lorsque #vals == 1 mais les données de Wikidata sont trop approximatives pour que cela ait du sens
return
{type = 'table', title = title, rows =
{
{
type = 'row',
value = 'œuvres principales',
wikidata = {
property = 'P800',
numval = 5,
excludespecial = true,
displayformat =
function(snak)
return '<i>' .. wikidata.formatEntity(wikidata.getId(snak), {defaultlink = 'image'}) .. '</i>'
end
}
}
}
}
end
function p.filmography()
local title = 'Films notables'
return
{type = 'row', label = 'Films notables', value = 'films notables', property = 'P1283'}
end
function p.discography()
local title = 'Discographie'
return
{type = 'row', label = 'Discographie', value = 'discographie', property = 'P358'}
end
-- Signature
function p.signature(default)
return {
type = 'images',
imageparameters = {'signature'},
defaultimage = default,
defaultsize = '150px',
captionparameter = 'légende signature',
defaultcaption = 'signature',
property = 'P109',
numval = 1
}
end
--== Site web
function p.website()
return general.website()
end
return p