Module:Infobox/Fonctions/Personne
< Module:Infobox | Fonctions
Révision datée du 26 février 2016 à 10:09 par Zolo (discussion) (retouches mineures, lisibilité, cmts)
La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Personne/doc
-- Functions utilisées par les infobox personnes local p = {} local wikidata = require "Module:Interface Wikidata".fromLua 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.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 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.statementDate(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 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'}, }, { 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', 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