Module:Infobox/Fonctions/Bâtiment : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
m
(petite réorganisation, ajout d'un paramètre "consécration" vu qu'on a désacralisation)
Ligne 4 : Ligne 4 :
 
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
 
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
  
local function keydate(event, item)
+
local function keydate(event)
return  wikidatamod.getTheDate{property = 'P793', targetvalue = event, addcat = true, item = item}
+
if string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
 +
return  wikidatamod.getTheDate{property = 'P793', targetvalue = event, addcat = true, item = item}
 +
elseif string.sub(event, 1, 1) == 'P'  then -- on demande une propriété
 +
return wikidatamod.formatAndCat{property = event, item = item}
 +
end
 +
end
 +
 
 +
local function daterow(args)
 +
local wikidataquery
 +
if args.event then
 +
wikidataquery = function() return keydate(args.event) end
 +
end
 +
 +
-- blocker définit des événements proches de celui recherché, s'il sont rensignés localement, on désactive la reuqête Wikidata pour éviter les doublons
 +
-- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata
 +
if args.blocker and templatedata[args.blocker] then
 +
wikidata = false
 +
elseif args.blocker and type(args.blocker) == 'table' then
 +
for i, j in pairs(blocker) do
 +
if templatedata[j] then
 +
wikidata = false
 +
break
 +
end
 +
end
 +
end
 +
 
 +
return {
 +
type = 'row',
 +
label = args.label,
 +
value =  args.param,
 +
wikidata = wikidataquery
 +
}
 
end
 
end
  
Ligne 32 : Ligne 63 :
 
type = 'row', -- pour les régions historiques, non adminstratives
 
type = 'row', -- pour les régions historiques, non adminstratives
 
value = 'région',
 
value = 'région',
label = function(localdata, item) return localdata['intitulé région'] or localdata['lien région'] or 'Région' end,
+
label = templatedata['intitulé région'] or templatedata['lien région'] or 'Région',
 
}
 
}
 
end
 
end
Ligne 42 : Ligne 73 :
 
{
 
{
 
type = 'row',  
 
type = 'row',  
value = function(localdata, item) return localdata['subdivision'] or localdata['subdivision1']end,
+
value = {'subdivision', 'subdivision1'},
label = function(localdata, item) return
+
label = templatedata['intitulé subdivision'] or templatedata['lien subdivision1'] or templatedata['lien subdivision'] or 'Subdivision administrative'
localdata['intitulé subdivision'] or localdata['lien subdivision1'] or localdata['lien subdivision'] or 'Subdivision administrative'
 
end
 
 
},
 
},
 
{
 
{
 
type = 'row',  
 
type = 'row',  
 
value = 'subdivision2',
 
value = 'subdivision2',
label = function(localdata, item) return
+
label = templatedata['intitulé subdivision2'] or templatedata['lien subdivision2'] or 'Subdivision administrative'
localdata['intitulé subdivision2'] or localdata['lien subdivision2'] or 'Subdivision administrative'
 
end
 
 
},
 
},
 
{
 
{
 
type = 'row',  
 
type = 'row',  
 
value = 'subdivision3',
 
value = 'subdivision3',
label = function(localdata, item) return
+
label = templatedata['intitulé subdivision3'] or templatedata['lien subdivision3'] or 'Subdivision administrative'
localdata['intitulé subdivision3'] or localdata['lien subdivision3'] or 'Subdivision administrative'
 
end
 
 
},
 
},
 
{
 
{
 
type = 'row',  
 
type = 'row',  
value = function(localdata, item) return localdata['commune'] or localdata['ville'] end,
+
value = {'commune', 'ville'},
label = function(localdata, item) return
+
label = templatedata['intitulé commune'] or templatedata['lien commune'] or 'Commune'
localdata['intitulé commune'] or localdata['lien commune'] or 'Commune'
 
end
 
 
},
 
},
 
{
 
{
 
type = 'row',  
 
type = 'row',  
 
value = 'quartier',
 
value = 'quartier',
label = function(localdata, item) return localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier' end
+
label = templatedata['intitulé quartier'] or templatedata['titre quartier'] or 'Quartier'
 
},
 
},
 
{
 
{
Ligne 77 : Ligne 100 :
 
value = 'adresse',
 
value = 'adresse',
 
label = 'Adresse',
 
label = 'Adresse',
wikidata = function(item) return require('Module:Adresse').wikidataAddress(item) end,
+
wikidata = require('Module:Adresse').wikidataAddress(item),
 
}
 
}
 
} }
 
} }
Ligne 90 : Ligne 113 :
 
end
 
end
  
 +
function p.construction()
 +
templatedata = templatedata
 +
return
 +
{type = 'multi', rows = {
 +
-- début construction, fin construction (legacy infobox Stade, Infobox Château),
 +
daterow{param = 'début construction', label = 'Début de construction'},
 +
daterow{param = 'fin construction', label = 'Fin de construction'},
 +
 +
-- construction (nom de paramètre "date de constuction" à déprécier)
 +
daterow{param = {'construction', 'Construction'}, label = 'Construction', event = 'Q385378'},
 +
 +
-- événement apparentés
 +
daterow{param = 'ouverture', label = 'Ouverture'}, -- wikidata  valeur de P793 ?
 +
daterow{param = 'inauguration', label = 'Inauguration', event = 'Q1417098', blocker = 'ouverture'}, -- désactivé si "ouverture" est renseigné : risques de doublon
 +
daterow{param = {'consécration'}, label = 'Consécration', event = 'Q125375', blocker = 'inauguration'},
 +
}
 +
}
  
function p.construction() return
 
{type = 'multi', rows = {
 
-- début construction, fin construction (legacy infobox Stade, Infobox Château)
 
{ type = 'row',
 
label = 'Début de construction',
 
value = 'début construction',
 
},
 
{ type = 'row',
 
label = 'Fin de construction',
 
value = 'fin construction',
 
},
 
-- construction
 
{ type = 'row',
 
label = 'Date de construction',
 
value =  'date de construction' or 'construction',
 
wikidata = function(item) return keydate('Q385378', item)
 
or
 
wikidatamod.formatAndCat{entity = item, property = 'P571', showqualifiers = {'P518'}}
 
end
 
},
 
--  ouverture
 
{ type = 'row',
 
label = 'Ouverture',
 
value = 'ouverture',
 
--wikidata  valeur de P793 ?
 
},
 
-- inauguration
 
{ type = 'row',
 
label = 'Inauguration',
 
value = function(localdata, item)  -- déactivé si le paramètre "ouverture" este renseigné : risques de doublon
 
if localdata['ouverture'] then
 
return nil
 
end
 
if localdata['inauguration'] then
 
return localdata['inauguration']
 
end
 
if item then
 
return keydate('Q1417098', item)
 
end
 
end
 
}
 
} }
 
 
end
 
end
  
 
function p.demolition() return
 
function p.demolition() return
 
{type = 'multi', rows = {
 
{type = 'multi', rows = {
{type = 'mixed', label = 'Démolition', value = 'démolition', wikidata = function(item) return keydate('Q331483', item) end},
+
daterow{param = 'démolition', label = 'Démolition', event = 'Q331483'},
{type = 'mixed', label = 'Destruction', value = 'destruction', wikidata = function(item) return keydate('Q17781833', item) end},
+
daterow{param = 'destruction', label = 'Destruction', event = 'Q17781833'},
 
}
 
}
 
}
 
}
Ligne 144 : Ligne 142 :
  
 
function p.closure() return
 
function p.closure() return
{type = 'row', label = 'Fermeture', wikidata = function(item) return keydate('Q14954904', item) end}
+
daterow{param = 'Fermeture', label = 'Fermeture', event = 'Q14954904'}
 
end
 
end
  
 
function p.usage() return
 
function p.usage() return
{type = 'row', label = 'Usage', value = 'usage', wikidata =
+
{
function(item)
+
type = 'row',
local speciallabels = {
+
label = 'Usage',
Q182060 = 'bureaux', -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment
+
value = 'usage',  
}
+
wikidata = function(item)
return wikidatamod.formatAndCat{entity = item, property = 'P366', speciallabels = speciallabels, link = '-'}
+
local speciallabels = {
end
+
Q182060 = 'bureaux', -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment
 +
}
 +
return wikidatamod.formatAndCat{entity = item, property = 'P366', speciallabels = speciallabels, link = '-'}
 +
end
 
}
 
}
 
end
 
end
Ligne 160 : Ligne 161 :
 
function p.operator()
 
function p.operator()
 
return  
 
return  
{type = 'row', label = 'Gestionnaire', property = 'P137',
+
{
value = function(localdata, item) return localdata['administration'] or localdata['gestionnaire'] end}
+
type = 'row',
 +
label = 'Gestionnaire',
 +
property = 'P137',
 +
value = templatedata['administration'] or templatedata['gestionnaire']
 +
}
 
end
 
end
  
Ligne 181 : Ligne 186 :
 
type = 'row',
 
type = 'row',
 
label = 'Style',
 
label = 'Style',
value = function(localdata, item) return localdata['style architectural'] or localdata['style'] end,
+
value = {'style architectural', 'style'},
wikidata = function (item)
+
wikidata = function ()
 
local val = wikidatamod.formatAndCat{entity = item, property = 'P149'} or wikidatamod.formatAndCat{entity = item, property = 'P135'}
 
local val = wikidatamod.formatAndCat{entity = item, property = 'P149'} or wikidatamod.formatAndCat{entity = item, property = 'P135'}
 
if not val then
 
if not val then
Ligne 197 : Ligne 202 :
 
-- architect
 
-- architect
 
{ type = 'row',
 
{ type = 'row',
label = function(localdata, item) return localdata['titre architecte'] or 'Architecte' end,
+
label = templatedata['titre architecte'] or 'Architecte',
 
value = 'architecte',
 
value = 'architecte',
 
wikidata = wikidatamod.formatAndCat{entity = item, property = 'P84', showqualifiers = {'P518'}, showdate = true, qualiflink = '-'}
 
wikidata = wikidatamod.formatAndCat{entity = item, property = 'P84', showqualifiers = {'P518'}, showdate = true, qualiflink = '-'}
Ligne 211 : Ligne 216 :
 
{ type = 'row',
 
{ type = 'row',
 
label = 'Créateur',
 
label = 'Créateur',
value = function(localdata, item)  
+
value = function()  
if localdata['architecte'] then
+
if templatedata['architecte'] then
 
return nil
 
return nil
 
end
 
end
if localdata['créateur'] then
+
if templatedata['créateur'] then
return localdata['créateur']
+
return templatedata['créateur']
 
end
 
end
 
if item then
 
if item then
 
return wikidatamod.formatAndCat{entity = item, property = 'P170', showqualifiers = {'P518'}}
 
return wikidatamod.formatAndCat{entity = item, property = 'P170', showqualifiers = {'P518'}}
 
end
 
end
end
+
end
 
},
 
},
 
} }
 
} }
Ligne 243 : Ligne 248 :
 
label = 'Propriétaire',
 
label = 'Propriétaire',
 
value = 'propriétaire',
 
value = 'propriétaire',
wikidata = function(item) return require('Module:Propriétaire').formatFromItem(item) end
+
wikidata = require('Module:Propriétaire').formatFromItem(item)
 
}
 
}
 
} }
 
} }
Ligne 253 : Ligne 258 :
 
label = 'Matériau',
 
label = 'Matériau',
 
value = 'matériau',  
 
value = 'matériau',  
wikidata = function(item) return require('Module:Matériau').formatFromItem(item) end,
+
wikidata = require('Module:Matériau').formatFromItem(item),
 
}
 
}
 
end
 
end
  
 
+
function p.protection()
 
 
 
 
function p.protection(localdata, item)
 
 
return {
 
return {
 
type = 'row',
 
type = 'row',
 
label = 'Statut patrimonial',
 
label = 'Statut patrimonial',
 
value = 'classement',
 
value = 'classement',
wikidata = function(item) return require('Module:Classement').formattedList(item) end
+
wikidata = require('Module:Classement').formattedList(item)
 
}
 
}
 
end
 
end

Version du 14 avril 2015 à 14:46

La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Bâtiment/doc

local p = {}
local wikidatamod = require 'Module:Wikidata'
local general = require 'Module:Infobox/Fonctions'
local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'

local function keydate(event)
	if string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
		return  wikidatamod.getTheDate{property = 'P793', targetvalue = event, addcat = true, item = item}
	elseif string.sub(event, 1, 1) == 'P'  then -- on demande une propriété
		return wikidatamod.formatAndCat{property = event, item = item}
	end
end

local function daterow(args)
	local wikidataquery
	if args.event then
		wikidataquery = function() return keydate(args.event) end
	end
	
	-- blocker définit des événements proches de celui recherché, s'il sont rensignés localement, on désactive la reuqête Wikidata pour éviter les doublons 
	-- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata
	if args.blocker and templatedata[args.blocker] then
		wikidata = false
	elseif args.blocker and type(args.blocker) == 'table' then
		for i, j in pairs(blocker) do 
			if templatedata[j] then
				wikidata = false
				break
			end
		end
	end

	return {
		type = 'row',
		label = args.label,
		value =  args.param,
		wikidata = wikidataquery
	}
end

--Titrest
function p.title()
	--	local class = en-tête par défaut à définir ici ?
	return general.title()
end

--Image
function p.mainimage(cat, defaultimage)
	if not cat then 
		cat = 'Article à illustrer Bâtiment divers'
	end
	return general.mainimage(cat, defaultimage)
end

function p.country(default)
	return	coordfunctions.country(default)	
end

function p.address() return nil end -- pour éviter un bug de tansitions, si vous lisez cela vous pouvez effacer la fonctions

function p.historicalregion()
	return {
		type = 'row', -- pour les régions historiques, non adminstratives
		value = 'région',
		label = templatedata['intitulé région'] or templatedata['lien région'] or 'Région',
	}
end

function p.adminlocation() -- Fonction assez compliquée du fait des différences entre infobox. Simlifiable si on harmonise les infobox
	-- infobox à prendre en compte : bâtiment, gratte-ciel, gare, château
	return 
	{type = 'multi', rows = {
			{
				type = 'row', 
				value = {'subdivision', 'subdivision1'},
				label = templatedata['intitulé subdivision'] or templatedata['lien subdivision1'] or templatedata['lien subdivision'] or 'Subdivision administrative'
			},
			{
				type = 'row', 
				value = 'subdivision2',
				label = templatedata['intitulé subdivision2'] or templatedata['lien subdivision2'] or 'Subdivision administrative'
			},
			{
				type = 'row', 
				value = 'subdivision3',
				label = templatedata['intitulé subdivision3'] or templatedata['lien subdivision3'] or 'Subdivision administrative'
			},
			{
				type = 'row', 
				value = {'commune', 'ville'},
				label = templatedata['intitulé commune'] or templatedata['lien commune'] or 'Commune'
			},
			{
				type = 'row', 
				value = 'quartier',
				label = templatedata['intitulé quartier'] or templatedata['titre quartier'] or 'Quartier'
			},
		{
			type = 'row',
			value = 'adresse',
			label = 'Adresse',
			wikidata = require('Module:Adresse').wikidataAddress(item),
		}
	} }
end

function p.coordinates(coordspecs)
	return coordfunctions.coordinates(coordspecs)
end

function p.website() 
	return general.website()
end

function p.construction()
	templatedata = templatedata
	return
		{type = 'multi', rows = {
		-- début construction, fin construction (legacy infobox Stade, Infobox Château),
			daterow{param = 'début construction', label = 'Début de construction'},
			daterow{param = 'fin construction', label = 'Fin de construction'},

		-- construction (nom de paramètre "date de constuction" à déprécier)
			daterow{param = {'construction', 'Construction'}, label = 'Construction', event = 'Q385378'},

		-- événement apparentés
			daterow{param = 'ouverture', label = 'Ouverture'}, -- wikidata  valeur de P793 ?
			daterow{param = 'inauguration', label = 'Inauguration', event = 'Q1417098', blocker = 'ouverture'}, -- désactivé si "ouverture" est renseigné : risques de doublon 
			daterow{param = {'consécration'}, label = 'Consécration', event = 'Q125375', blocker = 'inauguration'},		
		}
	}

end

function p.demolition() return
	{type = 'multi', rows = {
		daterow{param = 'démolition', label = 'Démolition', event = 'Q331483'},
		daterow{param = 'destruction', label = 'Destruction', event = 'Q17781833'},
	}
	}
end

function p.closure() return
	daterow{param = 'Fermeture', label = 'Fermeture', event = 'Q14954904'}
end

function p.usage() return
	{
	type = 'row',
	label = 'Usage',
	value = 'usage', 
	wikidata = function(item)
		local speciallabels = {
			Q182060 = 'bureaux', -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment
		}
		return wikidatamod.formatAndCat{entity = item, property = 'P366', speciallabels = speciallabels, link = '-'}		
	end
	}
end

function p.operator()
	return 
	{
		type = 'row',
		label = 'Gestionnaire',
		property = 'P137',
		value = templatedata['administration'] or templatedata['gestionnaire']
	}
end

function p.transport()
	return {
		{type = 'table', title = 'Accès et transport', rows = {
				{type = 'row', label = 'Stationnement', value = 'stationnement'},
				{type = 'row', label = 'Gare', value = 'gare'},
				{type = 'row', label = 'Métro', value = 'métro'},
				{type = 'row', label = 'Tramway', value = 'bus'},
				{type = 'row', label = 'Autobus', value = 'gare'},
				},
		}
	}
end

function p.archistyle()
	return {
		type = 'row',
		label = 'Style',
		value = {'style architectural', 'style'},
		wikidata = function ()
			local val = wikidatamod.formatAndCat{entity = item, property = 'P149'} or wikidatamod.formatAndCat{entity = item, property = 'P135'}
			if not val then
				return nil
			end
			val = mw.ustring.gsub(val, "\|style ", "\|")
			return val
			end
	}
end

function p.creator() -- toute sorte de créateurs, pourraient peut-être être partagé avec infobox oeuvre d'art
	return {type = 'multi', rows = {
	-- architect
	{	type = 'row',
		label = templatedata['titre architecte'] or 'Architecte',
		value = 'architecte',
		wikidata = wikidatamod.formatAndCat{entity = item, property = 'P84', showqualifiers = {'P518'}, showdate = true, qualiflink = '-'}
	},
	-- ingénieur
	{
		type = 'row',
		label = 'Ingénieur',
		value = 'ingénieur',
		property = 'P631',
	},
	-- créateur (quand les autres noms ne conviennent pas)
	{	type = 'row',
		label = 'Créateur',
		value = function() 
			if templatedata['architecte'] then
				return nil
			end
			if templatedata['créateur'] then
				return templatedata['créateur']
			end
			if item then
				return wikidatamod.formatAndCat{entity = item, property = 'P170', showqualifiers = {'P518'}}
			end
		end
	},
}	}
end


function p.owner()
	return 	{type = 'multi', rows = {
		{
			type = 'row',
			label = 'Propriétaire initial',
			value = 'propriétaire initial',
		},
		{
			type = 'row',
			label = 'Propriétaire actuel',
			value = 'propriétaire actuel',
		},
		{
			type = 'row',
			label = 'Propriétaire',
			value = 'propriétaire',
			wikidata = require('Module:Propriétaire').formatFromItem(item)
		}
	} }
end

function p.material()
	return {
		type = 'row',
		label = 'Matériau',
		value = 'matériau', 
		wikidata = require('Module:Matériau').formatFromItem(item),
	}
end

function p.protection()
	return {
		type = 'row',
		label = 'Statut patrimonial',
		value = 'classement',
		wikidata = require('Module:Classement').formattedList(item)
	}
end

function p.geoloc(params)
	return coordfunctions.geoloc(params)
end

return p