Modulis:Infokaste/Funkcijas/Cilvēks
Izskats
Moduļa dokumentācija[izveidot]
Iespējams, vēlies izveidot dokumentāciju šim modulim Vari eksperimentēt šī moduļa smilšu kastes (izveidot | spoguļversija) un testu (izveidot) lapā Lūdzu, kategorijas pievieno dokumentācijas apakšlapā. Moduļa apakšlapas. |
-- Functions utilisées par les infobox personnes
local p = {}
local wikidata = require "Module:Interface Wikidata".fromLua
local general = require "Module:Infokaste/Funkcijas"
local datemodule = require "Module:Datums"
local linguistic = require "Module:Valodas rīki"
-- libellés spéciaux lorsque ceux de Wikconidata ne conviennent pas
local occupations = require "Module:Dictionnaire Wikidata/Métiers"
local function setgender() -- établit la valeur de la variable "gender" qui sert à adapter la grammaire au sexe de la personne
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()
local function setgenderedlabels()
if gender == 'f' then
return occupations.female
elseif gender == 'm' then
return occupations.male
end
end
local genderedlabels = genderedlabels or setgenderedlabels()
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
}
-- ========== Fonctions d'aide ====================================
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.wikidataDate(prop, 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 timeline(statements, prop) -- affiche date : événement (suppose les événements déjà triés)
if not statements then
return nil
end
local rows = {}
local speciallabels = genderedlabels
local dateformat = {precision = 'year', linktopic = '-'}
-- qualificatifs à afficher "de", circonscription, diocèse, assemblée délibérante, parti, employeur
local qualifs = {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}
local 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)
for i, statement in pairs(statements) do
local mainstr = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue})
local period = wikidata.statementDate(statement, dateformat )
-- rétrolien à activer si on veut inciter les gens à aller sur Wikidata
--if (not period) and item then
-- period = '[[:d:' .. item.id .. '#' .. (prop or '') .. '|<i>date à ajouter</i>]
--end
-- prédecesseur et successeur
-- TODO gestion de "novalue" et "somevalue"
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
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
-- à la dernière ligne : ajout rétrolien et catégorie de maintenance
if (i == #statements) and prop then
mainstr = wikidata.formatAndCat{value = mainstr, property = prop, entity = item}
end
local row = {type = 'row', label = period or '', value = function() return mainstr end}
table.insert(rows, row)
end
-- ajout de rétrolien, cat
return rows
end
local function timeline2(statements, prop) -- affiche date : événement (suppose les événements déjà triés)
if not statements then
return nil
end
local rows = {}
local speciallabels = genderedlabels
local dateformat = {precision = 'year', linktopic = '-'}
-- qualificatifs à afficher "de", circonscription, diocèse, assemblée délibérante, parti, employeur
local qualifs = {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}
local 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)
for i, statement in pairs(statements) do
local mainstr = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue})
local row1 = {type = 'row1col', color = 'secondcolor', value = mainstr }
--local row1 = {type = 'caption', style = 'text-align:center;background-color:#BFFFBF', value = function() return mainstr end}
table.insert(rows, row1)
local period = wikidata.statementDate(statement, dateformat )
local row2 = {type = 'row1col', color = '#F9F9F9', value = period }
--local row2 = {type = 'caption', style = 'text-align:center;background-color:#F9F9F9', value = function() return period end}
table.insert(rows, row2)
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
if predecessor then
local row3 = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
table.insert(rows, row3)
end
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
if successor then
local row4 = {type = 'row', label = 'Successeur', value = function() return successor end}
table.insert(rows, row4)
end
end
-- ajout de rétrolien, cat
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 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
return wikidata.formatAndCat{
property = 'P27',
vals = statements,
showdate = true,
entity = item,
conjtype = 'comma',
removedupes = true,
linktopic = '-',
displayformat =
function(snak)
local g = gender
if g == '?' then
g = 'f'
end
local val, success = nation(wikidata.getid(snak), g)
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'},
},
{
type = 'row',
label = 'Lieu de travail',
plurallabel = 'Lieux de travail',
value = 'lieu de travail',
wikidata = {property = 'P937', sorttype= 'chronological', showdate = true, 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',
showdate = true,
conjtype = 'comma',
excludevalues = {'Q482980'},
speciallabels = genderedlabels,
defaultlink = '-',
},
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 = timeline2(statements, 'P2522')
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'}
}
}
else
local statements = wikidata.getClaims{property = 'P39', entity = item, rank = 'valid', sorttype = 'chronological'}
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
rows = timeline2(statements, 'P39')
end
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.nobilitytitle()
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 = 'P97', entity = item, rank = 'valid', sorttype = 'chronological'}
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
rows = timeline2(statements, 'P97')
end
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')
end
return
{
type = 'table',
title = title,
rows = rows,
}
end
function p.blason()
return {
type = 'images',
imageparameters = {'blason'},
defaultimages = nil,
defaultsize = '100px',
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