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

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
mAucun résumé des modifications
0x010D (discussion | contributions)
activation de module:Dictionnaire Wikidata/Métiers pour les fonctions politiques
Ligne 20 : Ligne 20 :
return validvalues[gender]
return validvalues[gender]
end
end
local gender = gender or setgender()


local gender = gender or 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é
local datelinks = { -- lien vers le domaine d'activité approprié
Ligne 55 : Ligne 63 :
for i, statement in pairs(statements) do
for i, statement in pairs(statements) do
local mainstr = wikidata.formatStatement(statement)
local mainstr = wikidata.formatStatement(statement, {speciallabels = genderedlabels})
local period = wikidata.getFormattedDate(statement, {precision = 'year', linktopic = '-'})
local period = wikidata.getFormattedDate(statement, {precision = 'year', linktopic = '-'})
Ligne 258 : Ligne 266 :


function p.occupation()
function p.occupation()
local speciallabels
if gender == 'f' then
speciallabels = occupations.female
elseif gender == 'm' then
speciallabels = occupations.male
end
return {
return {
type = 'row',  
type = 'row',  
value = 'activité',
value = 'activité',
wikidata = {property = 'P106', showdate = true, conjtype = 'comma', speciallabels = speciallabels},  
wikidata = {property = 'P106', showdate = true, conjtype = 'comma', speciallabels = genderedlabels},  
label = 'Activité',
label = 'Activité',
plurallabel = 'Activités'
plurallabel = 'Activités'

Version du 8 août 2015 à 13:56

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

-- libellés spéciaux lorsque ceux de Wikidata ne conviennent pas

local occupations = mw.loadData "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 validvalues = { m = 'm', f = 'f', ['féminin'] = 'f', ['masculin'] = 'm', ['Q6581072'] = 'f', ['Q6581097'] = 'm', } local gender = localdata['sexe'] or localdata['genre'] or wikidata._formatStatements{item= item, property = 'P21', format = 'raw'} return validvalues[gender] end local gender = gender or 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.getRawvalue(j.mainsnak) if datelinks[v] then return datelinks[v] end end end

local linktopic = getdatetopic()

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 previousstr = -- pour fusionner deux lignes sans différences visibles

for i, statement in pairs(statements) do local mainstr = wikidata.formatStatement(statement, {speciallabels = genderedlabels}) local period = wikidata.getFormattedDate(statement, {precision = 'year', linktopic = '-'})

-- rétrolien à activer si on veut inciter les gens à aller sur Wikidata --if (not period) and item then -- period = '[[:d:' .. item.id .. '#' .. (prop or ) .. '|date à ajouter] --end

-- "de", circonscription, diocèse, assemblée délibérante, parti, employeur local qualifs = wikidata.getFormattedQualifiers(statement, {'P642', 'P768', 'P708', 'P194', 'P102', 'P108'}) if qualifs then mainstr = mainstr .. ' (' .. qualifs .. ')' end

-- prédecesseur et successeur local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'}) local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'}) if predecessor then mainstr = mainstr .. '
 précédé par ' .. predecessor .. '
' -- à féminiser end if successor then mainstr = mainstr .. '
 suivi par ' .. successor .. '
' -- à fémniser end

-- ajout rétrolien et catégorie de maintenance if (i == #statements) and prop then mainstr = wikidata.addLinkback(mainstr, item, prop) .. wikidata.addtrackingcat(prop) 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 dateandplace(thedate, theplace) 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() return general.mainimage('Article à illustrer/Biographie') 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', 'nom de naissance'}, {'P1449', 'Surnom', 'Surnoms', 'surnom'}, {'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'}, }

local rows = {type = 'multi', rows = {}} for i, j in pairs(names) do local query = {property = j[1], showqualifiers = {'P1721'}, conjtype = ',
'} table.insert(rows.rows, {type = 'row', value = j[4], wikidata = query, label = j[2], plurallabel = j[3]}) end return rows end

-- NAISSANCE ET MORT local function wikidatadate(prop) local vals = wikidata.getClaims{entity = item, property = prop} if not vals then return nil end local newvals = {} for i, val in pairs(vals) do local v = wikidata.getFormattedDate(val) -- essaye les qualifs date de début/fin pour une date plus précise (en attendant un bon fonctionnement du "before/after" intégré) if not v then if val.mainsnak.snaktype ~= 'value' then v = wikidata.formatStatement(val) elseif val.mainsnak.datavalue.value.precision > 7 then v = wikidata.formatStatement(val, {linktopic = linktopic}) end end if v then table.insert(newvals, v) end end local str = mw.text.listToText(newvals, ', ', ' ou ') if str then str = wikidata.addLinkback(str, item, prop) end return wikidata.formatAndCat{entity = item, property = prop, value = str} end

local birthdate = localdata['naissance'] or localdata['date de naissance'] or wikidatadate('P569') or local deathdate = localdata['décès'] or localdata['date de décès'] or wikidatadate('P570') or


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, [3] = deathdate, qualificatif = linktopic}} local theplace = localdata['lieu de naissance'] or wikidata._formatAndCat({item = 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] = 'décès', [3] = birthdate, [2] = deathdate, qualificatif = linktopic}} local theplace = localdata['lieu de décès'] or wikidata._formatAndCat({item = 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.nationality() -- Wikidata désactivé avant 1800 (problème de fiabilité des données return { type = 'row', label = 'Nationalité', plurallabel = 'Nationalités', 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) < 1700 then return nil end end -- 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, conjtype = 'comma', linktopic = '-', displayformat = function(snak) local val, success = nation(wikidata.getid(snak), 'f') if not success then val = wikidata.formatSnak(snak) end return val end }, #statements end } end

-- parcours professionel function p.education() -- à améliorer local query = {sorttype= 'chronological', property = 'P69', showdate = true, showqualifiers = 'P512', conjtype = '
'} return { type = 'row', value = {'éducation', 'formation'}, wikidata = query, label = 'Formation', } end

function p.occupation() return { type = 'row', value = 'activité', wikidata = {property = 'P106', showdate = true, conjtype = 'comma', speciallabels = genderedlabels}, label = 'Activité', plurallabel = 'Activités' } end

function p.employer() return { type = 'row', value = 'employeur', wikidata = {property = 'P108', showdate = true}, label = 'Employeur', plurallabel = 'Employeurs' } 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, sorttype = 'chronological'} if not statements then return nil end if #statements == 1 then title = singtitle end rows = timeline(statements, 'P39') end return { type = 'table', title = title, rows = rows, }

end

function p.politicalparty() return { type = 'row', value = 'parti politique', label = 'Parti politique', plurallabel = 'Partis politiques', wikidata = { property = 'P102', sorttype= 'chronological', showdate = true, conjtype = '
'}, } end

function p.awards() -- à améliorer return { type = 'row', value = {'prix', 'récompenses', 'distinction', 'distinctions'}, wikidata = { property= 'P166', sorttype= 'chronological' , showdate= true, conjtype= '
'}, label = 'Distinction', plurallabel = 'Distinctions', } 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

-- Famille function p.family() return {type = 'multi', rows = { { type = 'row', label = 'Père', value = 'père', property = 'P22', }, { type = 'row', label = 'Mère', value = 'mère', property = 'P25', }, { type = 'row', label = 'Frère', plurallabel = 'Frères', value = 'Frère', property = 'P7', }, { type = 'row', label = 'Sœur', plurallabel = 'Sœurs', value = 'Sœur', property = 'P9', }, { type = 'row', label = 'Conjoint', -- à faire : le féminin plurallabel = 'Conjoints', value = 'conjoint', wikidata = {property = 'P26', sorttype = 'chronological', textformat = 'long', showdate = true, precision = 'year', linktopic = '-'} -- textformat = long sinon on se demande si c'est pas les dates de vie du conjoint }, { type = 'row', label = 'Enfant', plurallabel = 'Enfants', value = 'enfant', wikidata = {property = 'P40'} }, }} end

-- function p.works() local vals = wikidata.getClaims{entity = item, property = 'P800', numval = 5} 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', claims = vals, displayformat = function(snak) return '' .. wikidata.formatSnak(snak) .. '' end, } } } } 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