Module:Infobox/Fonctions/Personne : Différence entre versions
< Module:Infobox | Fonctions
(retire calcul de l'âge (difficultés diverses), nettoyage de p.othernames) |
m (Test) |
||
Ligne 5 : | Ligne 5 : | ||
local datemodule = require "Module:Date" | local datemodule = require "Module:Date" | ||
local gender -- set by setgender | local gender -- set by setgender | ||
+ | |||
local datelinks = { -- lien vers le domaine d'activité approprié | local datelinks = { -- lien vers le domaine d'activité approprié | ||
Ligne 11 : | Ligne 12 : | ||
Q1281618 = 'en arts plastiques', -- sculpteur | Q1281618 = 'en arts plastiques', -- sculpteur | ||
Q2309784 = 'en cyclisme', -- cycliste | Q2309784 = 'en cyclisme', -- cycliste | ||
− | |||
} | } | ||
− | local function getdatetopic() -- | + | local function getdatetopic(item) -- obtient le lien le plus approprié pour une date en fonction de la profession |
− | local | + | local val = wikidata._formatStatements{displayformat = 'raw', item = item, property = 'P106', numval = 1} |
− | + | return datelinks[val] | |
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
-- ========== Fonctions d'aide ==================================== | -- ========== Fonctions d'aide ==================================== | ||
− | local function dateandplace(thedate, theplace) | + | local function dateandplace(thedate, theplace) |
if thedate and theplace then | if thedate and theplace then | ||
return thedate .. '<br />' .. theplace | return thedate .. '<br />' .. theplace | ||
Ligne 35 : | Ligne 28 : | ||
end | end | ||
end | end | ||
+ | |||
local function setgender(localdata, item) -- établit la valeur de la variable "gender" qui sert à adapter la grammaire au sexe de la personne | local function setgender(localdata, item) -- établit la valeur de la variable "gender" qui sert à adapter la grammaire au sexe de la personne | ||
Ligne 102 : | Ligne 96 : | ||
end | end | ||
end | end | ||
− | return rows | + | if true then |
+ | return rows | ||
+ | end | ||
+ | |||
+ | local function getName(property) --fonctions différentes pour le nom | ||
+ | if localdata['autres nomss'] then | ||
+ | return nil | ||
+ | end | ||
+ | return wikidata.formatAndCat{entity = item, property = property, showqualifiers = {'P1721'}, conjtype = ',<br />'} | ||
+ | end | ||
+ | local function getLabel(property, plural) | ||
+ | local claims = wikidata.getClaims | ||
+ | end | ||
+ | return { | ||
+ | type = 'multi', | ||
+ | rows = { | ||
+ | |||
+ | {type = 'row', label = 'Pseudonyme', wikidata = getName('P742')}, | ||
+ | {type = 'row', label = 'Prénom social', wikidata = getName('P1782')}, | ||
+ | {type = 'row', label = 'Nom d’artiste', wikidata = getName('P1787')}, | ||
+ | } | ||
+ | } | ||
end | end | ||
-- NAISSANCE ET MORT | -- NAISSANCE ET MORT | ||
+ | local birthdate = localdata['naissance'] or localdata['date de naissance'] | ||
+ | local deathdate = localdata['décès'] or localdata['date de décès'] | ||
+ | |||
local function wikidatadate(prop) | local function wikidatadate(prop) | ||
− | + | local vals = wikidata.getClaims{entity = item, property= prop} | |
+ | if not vals then | ||
+ | return nil | ||
+ | end | ||
+ | -- on essaye de garder la date à l'état brut pour que Module:Date puisse l'analyser, mais si elle est trop complexe, on fait le formatage directement ici | ||
+ | if (#vals > 1) then | ||
+ | return wikidata._formatStatements{claims = vals, conjtype = ' ou ', linktopic = link} | ||
+ | end | ||
+ | local v = vals[1] | ||
+ | local prec = v.mainsnak.datavalue.value.precision | ||
+ | local era = string.sub(v.mainsnak.datavalue.value.time, 1, 1) | ||
+ | local calendar = v.mainsnak.datavalue.value.calendarmodel | ||
+ | if (prec < 11) or (era ~= '+') or (calendar ~= 'http://www.wikidata.org/entity/Q1985727') then | ||
+ | return wikidata._formatStatements{claims = vals, linktopic = link} | ||
+ | end | ||
+ | return wikidata._formatStatements{claims = vals, displayformat = 'raw'} | ||
end | end | ||
− | local | + | local wikidatabirthdate = wikidatadate('P569') |
− | local | + | local wikidatadeathdate = wikidatadate('P570') |
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième | function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième | ||
+ | |||
return { | return { | ||
type = 'mixed', | type = 'mixed', | ||
Ligne 120 : | Ligne 154 : | ||
value = | value = | ||
function() | function() | ||
− | + | local dateA, dateB = birthdate or wikidatabirthdate or '', deathdate or wikidatadeathdate or '' | |
− | + | local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = dateA, [3] = dateB, qualificatif = linktopic}} | |
− | + | local theplace = localdata['lieu de naissance'] or wikidata._formatAndCat({item = item, property= 'P19', rank = 'best', conjtype= ' ou '}) | |
+ | |||
+ | if (wikidatabirthdate and not birthdate) then -- ajoute "linkback" et catégorie | ||
+ | thedate = wikidata.addLinkback(thedate, item, 'P569') | ||
+ | thedate = wikidata._formatAndCat{value = thedate, entity = item, property = 'P569'} | ||
+ | end | ||
+ | |||
+ | return dateandplace(thedate, theplace) | ||
end | end | ||
} | } | ||
Ligne 128 : | Ligne 169 : | ||
function p.death() -- même fonctionnement que la fonction p.birth | function p.death() -- même fonctionnement que la fonction p.birth | ||
+ | |||
return { | return { | ||
type = 'mixed', | type = 'mixed', | ||
label = 'Décès', | label = 'Décès', | ||
− | value = | + | value = |
function() | function() | ||
− | + | local dateA, dateB = birthdate or wikidatabirthdate or '', deathdate or wikidatadeathdate or '' | |
− | + | local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = dateA, [3] = dateB, qualificatif = linktopic}} | |
− | + | local theplace = localdata['lieu de décès'] or wikidata._formatAndCat({entity = item, property= 'P20', rank = 'best', conjtype= ' ou '}) | |
+ | |||
+ | if (wikidatadeathdate and not deathdate) then -- ajoute "linkback" et catégorie | ||
+ | thedate = wikidata.addLinkback(thedate, item, 'P570') | ||
+ | thedate = wikidata._formatAndCat{value = thedate, entity = item, property = 'P570'} | ||
+ | end | ||
+ | |||
+ | return dateandplace(thedate, theplace) | ||
end | end | ||
} | } |
Version du 17 juillet 2015 à 10:48
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:Wikidata" local general = require "Module:Infobox/Fonctions" local datemodule = require "Module:Date" local gender -- set by setgender 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 } local function getdatetopic(item) -- obtient le lien le plus approprié pour une date en fonction de la profession local val = wikidata._formatStatements{displayformat = 'raw', item = item, property = 'P106', numval = 1} return datelinks[val] end -- ========== Fonctions d'aide ==================================== local function dateandplace(thedate, theplace) if thedate and theplace then return thedate .. '<br />' .. theplace else return thedate or theplace --retourne tout ce qu'il trouve end end local function setgender(localdata, item) -- établit la valeur de la variable "gender" qui sert à adapter la grammaire au sexe de la personne if localdata['sexe'] or localdata['genre'] then gendertable = {f = 'f' , ['féminin'] = 'f', femme = 'f', homme = 'm', m = 'm', masculin = 'm'} gender = gendertable[(localdata['sexe'] or localdata['genre'])] if not gender then gender = '?' end return end local g = wikidata._formatStatements{item= item, property = 'P21', format = 'raw'} if g == 'Q6581072' then gender = 'f' elseif g == 'Q6581097' then gender = 'm' else gender = '?' end end --Titre function p.title() return { type = 'title', value = 'nom', } end --Image function p.mainimage() return general.mainimage('Article à illustrer/Biographie', 'defaut.svg') end -- Noms function p.othernames() -- si "autres noms" existe, le renvoie, sinon, fait plusieurs lignes en utilisant diverses propriétés ed Wikidata if localdata['autres noms'] or localdata['nom de naissance'] then return {type = 'multi', rows = { {type = 'row', label = 'Autres noms', value = 'autres noms'}, {type = 'row', label ='Nom de naissance', value = 'nom de naissance'}, } } end local names = { {'P1477', 'Nom de naissance', 'Noms de naissance',}, {'P742', 'Peudonyme', 'Pseudonymes'}, {'P1782', 'Prénom social', 'Prénoms sociaux'}, {'P1787', 'Nom d’artiste', 'Noms d’artiste'}, } local function getval(row) local property = row[1] local claims = wikidata.getClaims{entity = item, property = property} if claims and #claims > 1 then label = row[3] else label = row[2] end local val = wikidata.formatAndCat{entity = item, property = property, showqualifiers = {'P1721'}, conjtype = ',<br />'} return val, label end local rows = {type = 'multi', rows = {}} for i, j in pairs(names) do local val, label = getval(j) if val then table.insert(rows.rows, {type = 'row', label = label, wikidata = function() return val end}) end end if true then return rows end local function getName(property) --fonctions différentes pour le nom if localdata['autres nomss'] then return nil end return wikidata.formatAndCat{entity = item, property = property, showqualifiers = {'P1721'}, conjtype = ',<br />'} end local function getLabel(property, plural) local claims = wikidata.getClaims end return { type = 'multi', rows = { {type = 'row', label = 'Pseudonyme', wikidata = getName('P742')}, {type = 'row', label = 'Prénom social', wikidata = getName('P1782')}, {type = 'row', label = 'Nom d’artiste', wikidata = getName('P1787')}, } } end -- NAISSANCE ET MORT local birthdate = localdata['naissance'] or localdata['date de naissance'] local deathdate = localdata['décès'] or localdata['date de décès'] local function wikidatadate(prop) local vals = wikidata.getClaims{entity = item, property= prop} if not vals then return nil end -- on essaye de garder la date à l'état brut pour que Module:Date puisse l'analyser, mais si elle est trop complexe, on fait le formatage directement ici if (#vals > 1) then return wikidata._formatStatements{claims = vals, conjtype = ' ou ', linktopic = link} end local v = vals[1] local prec = v.mainsnak.datavalue.value.precision local era = string.sub(v.mainsnak.datavalue.value.time, 1, 1) local calendar = v.mainsnak.datavalue.value.calendarmodel if (prec < 11) or (era ~= '+') or (calendar ~= 'http://www.wikidata.org/entity/Q1985727') then return wikidata._formatStatements{claims = vals, linktopic = link} end return wikidata._formatStatements{claims = vals, displayformat = 'raw'} end local wikidatabirthdate = wikidatadate('P569') local wikidatadeathdate = wikidatadate('P570') function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième return { type = 'mixed', label = 'Naissance', value = function() local dateA, dateB = birthdate or wikidatabirthdate or '', deathdate or wikidatadeathdate or '' local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = dateA, [3] = dateB, qualificatif = linktopic}} local theplace = localdata['lieu de naissance'] or wikidata._formatAndCat({item = item, property= 'P19', rank = 'best', conjtype= ' ou '}) if (wikidatabirthdate and not birthdate) then -- ajoute "linkback" et catégorie thedate = wikidata.addLinkback(thedate, item, 'P569') thedate = wikidata._formatAndCat{value = thedate, entity = item, property = 'P569'} end return dateandplace(thedate, theplace) end } end function p.death() -- même fonctionnement que la fonction p.birth return { type = 'mixed', label = 'Décès', value = function() local dateA, dateB = birthdate or wikidatabirthdate or '', deathdate or wikidatadeathdate or '' local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = dateA, [3] = dateB, qualificatif = linktopic}} local theplace = localdata['lieu de décès'] or wikidata._formatAndCat({entity = item, property= 'P20', rank = 'best', conjtype= ' ou '}) if (wikidatadeathdate and not deathdate) then -- ajoute "linkback" et catégorie thedate = wikidata.addLinkback(thedate, item, 'P570') thedate = wikidata._formatAndCat{value = thedate, entity = item, property = 'P570'} end return dateandplace(thedate, theplace) end } end function p.floruit() return { type = 'row', label = 'Période d’activité' , value = 'Période d\'activité', wikidata = function() local claims = wikidata.getClaims{entity = item, property = 'P1317', numval = 1} if not claims then return end local startpoint = wikidata.getFormattedQualifiers(claims[1], {'P580'}) local endpoint = wikidata.getFormattedQualifiers(claims[1], {'P582'}) return require "Module:Date complexe".daterange(startpoint, endpoint) end } end function p.nationality() -- Wikidata désactivé avant 1800 (problème de fiabilité des données return { type = 'mixed', label = 'Nationalité', value = 'nationalité', wikidata = function() -- désactivé pour les personnes nées avant 1800, trop d'erreurs local timestamp = wikidata.formatStatements{entity = entity, property = 'P569', numval = 1, displayformat = 'raw'} if timestamp then local era, year = timestamp:match("(%W)(%d+)%-(%d+)%-(%d+)") if (not year) or tonumber(year) < 1800 then return nil end end -- local nation = require "Module:Country data".nationality return wikidata.formatAndCat{entity = item, property = 'P27', displayformat = function(snak) local val, success = nation(wikidata.getid(snak), 'f') if not success then val = wikidata.formatSnak(snak) end return val end } end } end -- parcours professionel function p.education() -- à améliorer return { type = 'mixed', label = 'Formation', value = function() return localdata['éducation'] or localdata['formation'] end, wikidata = function() return wikidata._formatAndCat{item=item, property = 'P69', showdate = true, conjtype = '<br />'} end } end function p.awards() -- à améliorer return { type = 'mixed', label = 'Distinctions', value = function() return localdata['prix'] or localdata['récompenses'] or localdata['distinctions'] end, wikidata = function() return wikidata._formatAndCat{item = item, property= 'P166', sorttype= 'chronological' , showdate= true, conjtype= '<br />'} end, } end -- Influences function p.influencedby() return { type = 'mixed', 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', property = 'P737', } end function p.influenced() return { type = 'mixed', label = 'A influencé', value = function(localdata) return localdata['a influencé'] or localdata['influence de'] end, property = 'P738', } 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 p.website() end return p