Module:Infobox/Fonctions/Personne : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
m (orthographe)
(retire calcul de l'âge (difficultés diverses), nettoyage de p.othernames)
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 12 : Ligne 11 :
 
Q1281618 = 'en arts plastiques', -- sculpteur
 
Q1281618 = 'en arts plastiques', -- sculpteur
 
Q2309784 = 'en cyclisme', -- cycliste
 
Q2309784 = 'en cyclisme', -- cycliste
 +
Q16947657 = 'en arts plastiques', -- lithographe
 
}
 
}
  
local function getdatetopic(item) -- obtient le lien le plus approprié pour une date en fonction de la profession
+
local function getdatetopic() -- obtien 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}
+
local claims = wikidata.getClaims{entity = item, property = 'P106', excludespecial = true}
return datelinks[val]
+
for i, j in pairs(claims) do
 +
local v = wikidata.getRawvalue(j.mainsnak)
 +
if datelinks[v] then
 +
return datelinks[v]
 +
end
 +
end
 
end
 
end
 +
 +
local linktopic = getdatetopic()
  
 
-- ========== 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 28 : Ligne 35 :
 
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 96 : Ligne 102 :
 
end
 
end
 
end
 
end
if true then
+
return rows
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}
+
return wikidata.formatAndCat{entity = item, property = prop, conjtype = ' ou ', linktopic = linktopic}
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 wikidatabirthdate = wikidatadate('P569')
+
local birthdate = localdata['naissance'] or localdata['date de naissance'] or wikidatadate('P569') or ''
local wikidatadeathdate = wikidatadate('P570')
+
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
 
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
 
 
return {
 
return {
 
type = 'mixed',
 
type = 'mixed',
Ligne 154 : Ligne 120 :
 
value =
 
value =
 
function()
 
function()
local dateA, dateB = birthdate or wikidatabirthdate or '', deathdate or wikidatadeathdate or ''
+
local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = birthdate, [3] = deathdate, qualificatif = linktopic}}
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 '})
local theplace = localdata['lieu de naissance'] or wikidata._formatAndCat({item = item, property= 'P19', rank = 'best', conjtype= ' ou '})
+
return dateandplace(thedate, theplace)
 
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 169 : Ligne 128 :
  
 
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] = 'décès', [3] = birthdate, [2] = deathdate, qualificatif = linktopic}}
local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = dateA, [3] = dateB, qualificatif = linktopic}}
+
local theplace = localdata['lieu de décès'] or wikidata._formatAndCat({item = item, property= 'P20', rank = 'best', conjtype= ' ou '})
local theplace = localdata['lieu de décès'] or wikidata._formatAndCat({entity = item, property= 'P20', rank = 'best', conjtype= ' ou '})
+
return dateandplace(thedate, theplace)
 
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 à 08:57

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
	Q16947657 = 'en arts plastiques', -- lithographe
}

local function getdatetopic() -- obtien le lien le plus approprié pour une date en fonction de la profession
	local claims = wikidata.getClaims{entity = item, property = 'P106', excludespecial = true}
	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()

-- ========== 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
	return rows
end

-- NAISSANCE ET MORT
local function wikidatadate(prop)
	return wikidata.formatAndCat{entity = item, property = prop, conjtype = ' ou ', linktopic = linktopic}
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 = 'mixed',
		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 = 'mixed',
		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()
				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