« Module:Infobox/Fonctions/Personne » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Révocation des modifications de Simon Villeneuve (retour à la précédente version de Simon Villeneuve)
0x010D (discussion | contributions)
redésactivation de l'affichage des nationalités avant 1800 (beaucoup de cas problématiques), rationnalisation des fonctions timeline, suppression d'un saut de ligne inutile dans l'une d'elles
Ligne 4 : Ligne 4 :
local general = require "Module:Infobox/Fonctions"
local general = require "Module:Infobox/Fonctions"
local datemodule = require "Module:Date"
local datemodule = require "Module:Date"
local complexdate = require "Module:Date complexe"
local linguistic = require "Module:Linguistique"
local linguistic = require "Module:Linguistique"


Ligne 60 : Ligne 61 :
local deathdate = localdata['décès'] or localdata['date de décès'] or wikidatadate('P570')
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
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 />&nbsp;' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br />&nbsp;' .. 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
return nil
end
end
local rows = {}
local rows = {}


local speciallabels = genderedlabels
local eventrow = {type = 'row1col', color = 'secondcolor', value = event }
local dateformat = {precision = 'year', linktopic = '-'}
table.insert(rows, eventrow)
-- 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)
if period then
for i, statement in pairs(statements) do
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
local mainstr = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue})
table.insert(rows, periodrow)
local period = wikidata.statementDate(statement, dateformat )
end
-- 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
if predecessor then
-- TODO gestion de "novalue" et "somevalue"
local prederow = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
table.insert(rows, prederow)
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
end
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 />&nbsp;' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br />&nbsp;' .. s .. '</small>'
end


-- à la dernière ligne : ajout rétrolien et catégorie de maintenance
if successor then
if (i == #statements) and prop then
local succrow = {type = 'row', label = 'Successeur', value = function() return successor end}
mainstr = wikidata.formatAndCat{value = mainstr, property = prop, entity = item}
table.insert(rows, succrow)
end
local row = {type = 'row', label = period or '', value = function() return mainstr end}
table.insert(rows, row)
end
end
-- ajout de rétrolien, cat
return {type = 'multi', rows = rows}
return rows
end
end


 
local function format3(event, period, predecessor, successor, displayformat)
local function timeline2(statements, prop) -- affiche date : événement (suppose les événements déjà triés)
if not event then
if not statements then
return nil
return nil
end
end
local rows = {}
local rows = {}
local speciallabels = genderedlabels
local mainrow =  {type = 'row1col', color = 'secondcolor', value = event }
local dateformat = {precision = 'year', linktopic = '-'}
table.insert(rows, mainrow)
-- qualificatifs à afficher "de", circonscription, diocèse, assemblée délibérante, parti, employeur
 
local qualifs {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}
if period then
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
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)
table.insert(rows, periodrow)
for i, statement in pairs(statements) do
end
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


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
end
-- ajout de rétrolien, cat
return {type = 'multi', rows = rows}
return rows
end
end


 
local function timeline(statements, prop, timelineformat, options) -- affiche date : événement (suppose les événements déjà triés)
 
local function timeline3(statements, prop, color) -- affiche date : événement (suppose les événements déjà triés)
if not statements then
if not statements then
return nil
return nil
end
if not options then
options = {}
end
end
local rows = {}
local rows = {}
Ligne 164 : Ligne 144 :
local dateformat = {precision = 'year', linktopic = '-'}
local dateformat = {precision = 'year', linktopic = '-'}
-- qualificatifs à afficher "de", circonscription, diocèse, assemblée délibérante, parti, employeur
-- 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)
local displayformats = {
A = format1,
B = format2,
C = format3,
}
local applyformat = displayformats[timelineformat] or displayformats['A']
-- paramètres, qui devraient être customisable par la fonction appelante
local stilltrue = not(deathdate)
local speciallabels = genderedlabels
local dateformat = {precision = 'year', linktopic = '-'}
local qualifs =  {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}
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)
local rows = {}
for i, statement in pairs(statements) do
for i, statement in pairs(statements) do
local mainstr = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue})
local event = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue})
local row1 = {type = 'row1col', color = 'secondcolor', value = mainstr }
table.insert(rows, row1)
local period = wikidata.statementDate(statement, dateformat )
local row2 = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, row2)
local text = {}
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'})
if predecessor then
text['before'] = predecessor
end
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'})
if successor then
local period = wikidata.statementDate(statement, dateformat )
text['after'] = successor
local row = applyformat(event, period, predecessor, successor, options)
if row then
table.insert(rows, row)
end
end
local row3 = {type = 'succession', color = color, value = text }
table.insert(rows, row3)
end
end
-- ajout de rétrolien, cat
return rows
return rows
end
end
local function dateandplace(thedate, theplace)
local function dateandplace(thedate, theplace)
if thedate then
if thedate then
Ligne 302 : Ligne 281 :


function p.placeofburial()
function p.placeofburial()
local title = 'Lieu d\'enterrement'
local title = "Lieu d'enterrement"
return
return
{type = 'row', label = 'Lieu d\'enterrement', value = 'lieu d\'enterrement', property = 'P119'}
{type = 'row', label = "Lieu d'enterrement", value = "Lieu d'enterrement", property = 'P119'}
end
end


Ligne 317 : Ligne 296 :
return nil
return nil
end
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{
return wikidata.formatAndCat{
property = 'P27',
property = 'P27',
Ligne 433 : Ligne 420 :
title = singtitle
title = singtitle
end
end
rows = timeline2(statements, 'P2522')
rows = timeline(statements, 'P2522', 'B')
end
end
return
return
Ligne 462 : Ligne 449 :
title = singtitle
title = singtitle
end
end
rows = timeline3(statements, 'P39', 'default')
rows = timeline(statements, 'P39', 'C')
end
end
return
return
Ligne 491 : Ligne 478 :
title = singtitle
title = singtitle
end
end
rows = timeline2(statements, 'P97')
rows = timeline(statements, 'P97', 'B')
end
end
return
return
Ligne 520 : Ligne 507 :
title = singtitle
title = singtitle
end
end
rows = timeline(statements, 'P511')
rows = timeline(statements, 'P511', 'A')
end
end
return
return

Version du 25 février 2016 à 14:18

-- 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"

-- 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 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 .. '
 ' .. s .. '
' end if successor then local s = 'suivi par ' .. successor if gender == 'f' then s = 'suivie par ' .. successor end mainstr = mainstr .. '
 ' .. s .. '
' 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 if not options then options = {} 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)

local displayformats = { A = format1, B = format2, C = format3, } local applyformat = displayformats[timelineformat] or displayformats['A']

-- paramètres, qui devraient être customisable par la fonction appelante local stilltrue = not(deathdate) local speciallabels = genderedlabels local dateformat = {precision = 'year', linktopic = '-'} local qualifs = {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}

local rows = {} for i, statement in pairs(statements) do local event = wikidata.formatStatement(statement, {speciallabels = speciallabels, showqualifiers = qualifs, stilltrue = stilltrue}) local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'}) local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'}) local period = wikidata.statementDate(statement, dateformat ) 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 .. '
' .. 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 = ',
'} 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 = '
', 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', -- auteur 'Q15980158' -- auteur de non-fiction }, 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 = 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'} } } 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 = timeline(statements, 'P39', 'C') 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 = timeline(statements, 'P97', 'B') 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', '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 = '
', 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 = '
', 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, '
') 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, '
') 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)}, '
')

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 = '
', 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ènes', singularlabel = 'Mécène', plurallabel = '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 = '
', '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 = '
', '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 = '
', '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 = '
', '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 '' .. wikidata.formatEntity(wikidata.getid(snak), {defaultlink = 'image'}) .. '' 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