[go: up one dir, main page]

Aller au contenu

Module:Infobox/Fonctions/Bâtiment

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Cette page réunit des fonctions qui peuvent être réutilisées pour construire des modules d'infobox visant à décrire un bâtiment ou un monument. Sauf mention contraire, les fonctions utilisent des données fournies en paramètre dans l'article, ou alors, lorsque celles-ci sont absentes, des données issues de Wikidata.

Fonctions exportables

p.creator()

Ligne ou ensemble de lignes présentant les personnes ayant participé à la création du bâtiment.

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel)
Architecte architecte P84 (« architecte ») Architectes
Ingénieur ingénieur P631 (« ingénieur de structure ») Ingénieurs
Autres créateurs Créateur P170 (« créé par »)[1] Créateurs
  1. Désactivé lorsque les paramètres "ingénieur" ou "architecte" sont remplis (risque de doublon)

p.mainimage(cat, defaultimage)

Paramètres de la fonction
Argument Type Description
Première syntaxe
cat chaîne Catégorie à laquelle sera ajoutée la page contenant l'infobox si cette denière n'a pas d'image.
defaultimage chaîne Image à afficher en l'absence d'image fournie. Par exemple .
Deuxième syntaxe
args tableau tableau d'arguments qui peut contenir : defaultimage, upright, size, cat, altparameter, alt, defaultimagealt, wikidata,
defaultimage chaîne? ???
Paramètres de l'infobox
Libellé Paramètre Wikidata Description

image
photo
Photo

Fichier de l'image ou de la photographie à afficher dans l'infobox.
Pour les « bâtiments récents » prennez en compte les règles exceptions au droit d'auteur.

Exemples :

légende image
légende
Légende

Qualificatif de l'image affichée :
P2096 (« légende de média »)[1]

Légende de l'image.
Si l'image provient de Wikidata, la légende doit être précisée dans le qualificateur P2096 (« légende de média ») de l'image, sinon il y a un risque d'incohérence.
La légende ne s'affiche que si l'image s'affiche.


Exemples :
Pour l'Académie des Jeux floraux l'infobox est paramétrée avec :
légende image = L’hôtel d'Assézat, où siège l’académie.

upright

Facteur de redimensionnement de l'image. Utile en particulier lorsque l'image est en mode portrait[2].
Voir l'aide sur la mise en forme des images


Exemples :
upright = 0.5


taille image

Largeur de l'image, en pixels.
L'utilisation de ce paramètre est déconseillée dans l'aide sur la mise en forme des images. Le paramètre upright est préférable.
Valeur par défaut : 300
Valeur maximum : 315


Exemples :
Pour AARP l'infobox est paramétrée avec :
taille image = 150.

alternative image

Voir la proposition de propriété alt text

Texte à afficher quand l'image ne peut l'être.
Si l'image provient de Wikidata, le texte alternatif devrait être précisé dans un qualificateur de l'image, afin d'éviter un risque d'incohérence.


Exemples :

p.owner()

Ligne ou ensemble de lignes indiquant les propriétaires présents ou passés.

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Propriétaire propriétaire P127 (« propriétaire »)[3] Propriétaires
Propriétaire initial propriétaire initial - - déprécié
Propriétaire actuel propriétaire actuel - - déprécié
  1. Légende en français de l'image si elle existe.
  2. Image dont la hauteur est supérieur à la largeur.
  3. Affichage et mise en forme définie par Module:Propriétaire

p.shape()

Ligne indiquant la forme géométrique du bâtiment

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Forme forme P1419 (« forme géométrique ») - paramètre alternatif déprécié : "aspect"

p.dimensions()

Ligne ou ensemble de lignes indiquant la longueur, la hauteur, etc. du bâtiment. Pour les données Wikidata, les valeurs sont exprimées en mètres.

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Longueur longueur P2043 (« longueur ») Propriétaires
Largeur largeur P2049 (« largeur ») -
Diamètre diamètre P2386 (« diamètre ») -
Périmètre périmètre P2547 (« périmètre ») - paramètres synonymes dépréciés : 'contour', 'circonférence'
Hauteur hauteur P2048 (« hauteur ») -
Profondeur profondeur P2610 (« épaisseur ») -
Superficie surface P2046 (« superficie ») - paramètres synonymes dépréciés : "superficie"
Volume volume P2234 (« volume ») -
Tirant d’air tirant d'air P2793 (« tirant d'air ») -
Nombre de pièces pieces P8733 (« nombre de pièces ») -

p.floors()

Nombre d"étages au dessus et en dessous du sol

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Étages étages P1101 (« nombre de niveaux au-dessus du sol ») - 1 unité déduite de la valeur de Wikidata pour ne pas compter le rez-de-chaussée.
Paramètre synonyme déprécié : "niveaux au-dessus du sol"
Sous-sols sous-sols P1139 (« nombre de niveaux de sous-sol ») -

p.destroyeby()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Détruit par détruit par P770 (« cause de la destruction ») - paramètre alternatif déprécié : "cause de la destruction"

p.material()

Matériaux utilisés pour la construction

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Matériau matériau P186 (« matériau »)[1] matériaux
  1. mis en forme par Module:Matériau

p.color()

Couleur du bâtiment

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Couleur | P462 (« couleur »)[1] Couleurs paramètre alternatif déprécié : "couleurs"

p.inscription()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Inscription | P1684 (« inscription »)[2] - paramètre alternatif déprécié : "enseigne"
  1. mis en forme par Module:Matériau
  2. seule la première valeur de la propriété est affichée

p.equipment()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Équipement équipement P912 (« équipement ») - paramètre alternatif déprécié : "équipements"

p.replaces()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Remplace remplace P1398 (« structure précédente ») -

p.replacedby()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Remplacé par remplacé par P167 (« structure remplacée par ») -

p.protection()

Protection patrimoniale dont bénéficie tout ou partie du bâtiment

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Statut patrimonial protection P1435 (« statut patrimonial »)[1] - paramètre alternatif déprécié : "classement"
  1. Récupération des données et mise en forme par Module:Classement

p.adminlocation()

Retourne ensemble de lignes décrivant l'adresse et la localisation administrative du bâtiment. Cette fonction prend en compte beaucoup de paramètres hérités d'anciens modèles. Elle peut être remplacée par la fonction adminloc()

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
Subdivision[1] subdivision1 - - paramètres synonymes dépréciés : "nom subdivision", "subdivision"
Subdivision subdivision2[2] - - paramètres synonymes dépréciés : "nom subdivision", "subdivision"
Subdivision subdivision3[3] - - paramètres synonymes dépréciés : "nom subdivision", "subdivision"
Commune commune[4] - - paramètre synonymesdéprécié : "ville"
Quartier quartier[5] - -
Adresse adresse P669 (« voie ») / P670 (« numéro de voirie ») -
  1. Modificable par le paramètre "intitulé" ou "lien"
  2. Modificable par le paramètre "intitulé subdivision2" ou "lien subdivision2"
  3. Modificable par le paramètre "intitulé subdivision3" ou (obsolète) "lien subdivision3"
  4. Modificable par le paramètre "intitulé commune" ou (obsolète) "lien commune"
  5. Modificable par le paramètre "intitulé quartier" ou (obsolète) "titre quartier"

Cette fonction est utilisée par les infobox Monument, Plan d'eau, Chute d'eau, Point de vue panoramique, Échangeur, Observatoire, Musée, Télescope, Sentier, Phare, Cimetière, Hôtel, Port, Usine, Commanderie, Gratte-ciel, Mine, Grotte, Plage, Ouvrage d'art, Gare, Temple bouddhiste, et Espace vert.

coordinates(moduleparams)

Paramètre de la fonction
Argument Type Description
moduleparams table liste des éléments mystérieux de cette table (Smiley: triste).
  • maxdistance usage inconu,
  • wikidataquery usage inconu, si le paramètre est vide P625 (« coordonnées géographiques ») est utilisé à la place.
  • entity usage inconu,
  • displayformat peut être forcé par le paramètre de l'infobox format coordonnées. Voir la desciption de ce paramètre pour plus de détails.
  • displayinline peut être forcé par le paramètre de l'infobox coords en ligne. Usage inconnu,
  • displaytitle peut être forcé par le paramètre de l'infobox coords en titre. Usage inconnu,
  • globe peut être forcé par les paramètres de l'infobox globe et planète. Usage inconnu,
  • latitude peut être forcé par le paramètre de l'infobox latitude. Latitude du point à afficher.
    Le format utilisé est soit en degrés au format décimal (par exemple : 16.74170), soit en degrés, minutes et secondes (par exemple : 16°44'29.88"N ou 16/44/29.88/N)
  • longitude peut être forcé par le paramètre de l'infobox longitude. Longitude du point à afficher.
    Le format utilisé est soit en degrés au format décimal (par exemple : -92.62982), soit en degrés, minutes et secondes (par exemple : 92°37'47.28"O ou 92/37/47.28/O)
  • fallbackquery requête de replis dans le cas où la requête standard ne renvoie rien.
  • ...
Paramètres de l'infobox
Libellé Paramètres Wikidata Description

Coordonnées

coordonnées

Si coordonnées est égal à « - » ou « non » supprime l'affichage des coordonnées dans l'infobox.


Exemples :
coordonnées = -

format coordonnées

Modifie le format d'affichage des coordonnées pour l'un des formats suivants :

  • dms pour un affichage degré/minute/seconde, c'est à priori la valeur par défaut.
  • dms long pour un affichage degré/minute/seconde avec l'orientation en toute lettres,
  • dec pour un affichage décimal en degré

Force la valeur du paramètre de la fonctiondisplayformat.


Exemples : voir Format des coordonnées

coords en ligne

L'utilisation est inconnue.
Force la valeur du paramètre de la fonctiondisplayinline.


Exemples :

coords en titre

Permet d'afficher les coordonnées sur la droite de la ligne du titre de l'article et le code source mentionne : « par défaut : on met dans les coordonnées de l'infobox principale en titre »
Force la valeur du paramètre de la fonctiondisplaytitle.


Exemples :

globe
planète

L'utilisation complète est inconnue, mais permet d'afficher une autre carte que la Terre.
Force la valeur du paramètre de la fonctionglobe.
Par défaut on utilise notre bonne vielle Terre.


Exemples :

latitude

Latitude à afficher.
Force la valeur du paramètre de la fonctionlatitude.
Le format utilisé est soit en degrés au format décimal (par exemple : 16.74170), soit en degrés, minutes et secondes (par exemple : 16°44'29.88"N ou 16/44/29.88/N).


Exemples :

longitude

Longitude à afficher.
Force la valeur du paramètre de la fonctionlongitude.
Le format utilisé est soit en degrés au format décimal (par exemple : -92.62982), soit en degrés, minutes et secondes (par exemple : 92°37'47.28"O ou 92/37/47.28/O).


Exemples :

référence géolocalisation

Dans la documentation du modèle {{Infobox Aire protégée}} on trouve : « référence où l'on a trouvé ces coordonnées géographiques, à mettre entre <ref> </ref> ». Mais, semble-t-il sans utilisation.


Exemples :

Il existe deux possibilités pour l'affichage d'une carte :

Dans les 2 cas les coordonnées sont définies par P625 (« coordonnées géographiques ») ou les paramètres latitude et longitude.

Dans le cas où le sujet de l'infobox n'existe plus, il faut vérifier si une carte actuelle est pertinent.
géolocalisation Carte utilisée pour afficher la géolocalisation du siège donnée par les latitude et longitude.

Si géolocalisation=pas pertinent, les coordonnées sont affichées mais la carte ne l'est pas.
Si géolocalisation=- ou géolocalisation=non, ni les coordonnées ni la carte ne sont affichées.
Pour une utilisation standard de ce paramètre les cartes doivent être séparées par un « / ». Par exemple géolocalisation = Monde/Canada/Québec/Montréal. Le nombre de cartes semble être limité à 4 (non testé). Exemples :

p.website(localparam)

Retourne le ou les meilleurs sites web.

Paramètre de la fonction
Argument Type Description
localparam chaîne Nom du paramètre dans l'infobox
Paramètre de l'infobox
Libellé Paramètre Wikidata Description

Site web

site web
site_web
site officiel
site internet
web

URL du site internet.
L'adresse doit être complète en commençant par http:// ou https://.
Lorsque l'un des paramètres est utilisé il ne peut y avoir qu'un seul site.
Lorsque des propriétés de Wikidata sont utilisées le ou les sites internet s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :

  1. les sites ayant un rang égal à deprecated ne sont jamais pris en compte.
  2. pour une catégorie de sites, ceux ayant un rang normal ne sont pris en considération que s'il n'y en a aucun ayant un rang preferred.
  3. S'il y a au moins un site dont le qualificateur P407 (« langue de l'œuvre, du nom ou du terme ») est le français, seuls les sites en français sont renvoyés pour affichage.
  4. Sinon les sites dans les autres langues sont précédés du code de langue, par exemple (en) pour l'anglais et sont renvoyés pour affichage.

Remarques :

Exemples :
Pour la règle 3 voir Conseil international de la danse.
Pour la règle 4 voir Académie nationale des sciences d'Azerbaïdjan.

nom site

Texte affiché pour le lien du site. Ce paramètre ne fonctionne que lorsque l'adresse est spécifiée par un paramètre.

Exemples :
nom site = site officiel


p.country()

Affiche le nom du pays où se trouve le monument, accompagné d'un petit drapeau

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Note
Pays pays P17 (« pays »)

p.adminloc()

Alternative à l'utilisation de la fonction p.adminlocation() + p.country() dans laquelle l'intégralité de la position administrative est indiquée dans un seul champ. Permet une utilisation plus massive de Wikidata.

Libellé de la ligne (singulier) Données locales Wikidata Note
Adresse Utilise les paramètres "adresse" et "pays" Utilise les propriétés P669 (« voie »), P670 (« numéro de voirie »), P131 (« localisation administrative ») et P27 (« pays de nationalité ») par l'intermédiaire de Module:Adresse

p.opening()

Paramètres de l'infobox
Libellé Paramètres Wikidata Description
ouverture P1619 (« date d'ouverture officielle ») Date d'ouverture, de consécration ou de mise en service.

p.awards()

p.recordheld()

p.visitors()

p.protection()

p.danger()

p.policy()

p.unesco()

p.geoloc()

Affiche une carte ou des cartes, avec un point indiquant l'emplacement du monument

Libellé de la ligne (singulier) Nom du paramètre Propriété Wikidata Libellé de la ligne (pluriel) Note
géolocalisation (à partir de P625 (« coordonnées géographiques ») -
local p = {}
local localdata = require( 'Module:Infobox/Localdata' )
local item = localdata.item
local wd = require "Module:Wikidata"
local general = require "Module:Infobox/Fonctions"
local linguistic = require "Module:Linguistique"
local address = require "Module:Adresse"

local function keyDate(event)
	return wd.keyDate(event, item, {conjtype = 'comma', showqualifiers = {'P518'}, link = '-'})
end
local function keyDateConstruction(event)
	return wd.keyDate(event, item, {conjtype = 'comma', showqualifiers = {'P518', 'P4241'}, link = '-'})
end

local function inclexcl(statement, params) -- formatte les qualificatifs "P518" / "P1011" (à mettre plutôt dans un sous module de Module:Wikidata, comme pour les dates ?
	local str = wd.formatSnak(statement.mainsnak, params)
	if not statement.qualifiers then
		return str
	end
	local incl = wd.getFormattedQualifiers(statement, "P518")
	local excl = wd.getFormattedQualifiers(statement, "P1011")

	if incl then
		str = str .. linguistic.inparentheses(incl .. " y compris") -- pas la formulation la plus élégante mais elle évite les problèmes d'accord grammaticaux
	end
	if excl then
		str = str .. linguistic.inparentheses("sans " .. excl) -- pas la formulation la plus élégante mais elle évite les problèmes d'accord grammaticaux
	end
	return str
end

function p.creatorQuery(prop) 
	return {
		property = prop,
		entity = localdata.item,
		showqualifiers = {'P518'},
		showdate = true,
		qualiflink = '-',
		statementformat = function(statement)
			
			local str
			-- On commence par les qualificatifs (attibué à, atelier etc.)
			local possiblequalifiers = {
				P1773 = "attribué $to $creator", 
				P1774 = "atelier $of $creator",
				P1775 = "suiveur $of $creator",
				P1776 = "cercle $of $creator",
				P1777 = "d'après $creator", -- TODO : d'après LE Maître X
				P1778 = "faux d'après $creator",
				P1779 = "$creator (?)",
				P1780 = "école $of",
				P1877 = "d'après un œuvre $of",
			}
	
			if statement.qualifiers then
				for qualif, text in pairs(possiblequalifiers) do
					local creator = wd.getFormattedQualifiers(statement, {qualif})
					if creator then
						str = text
						str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
						str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
						str = mw.ustring.gsub(str, '$creator', creator)
						break
					end
				end
			end
						
			-- Sinon, la voie normale
			if not str then
				str = wd.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
			end
			return str
		end
	}
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()
	return -- déprécié	
end

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

function p.adminloc() -- affiche l'adresse complète (rue, divisions administratives pertinentes, pays) dans un champ unique

	-- pas de paramètre global pour la ligne streetstr et la ligne divstr, dépend de l'historique du modèle utilisé
	local country = localdata["pays"]
	local streetstr =  localdata['adresse']
	local val, isAddress = address.fullAddress(localdata['item'], country, nil, streetstr)
	local label
	if isAddress then label = 'Adresse' else label = 'Localisation' end --si il n'y a pas de rue, on évite de l'appeler "adresse"
	return 
		{
		type = 'row',
		label = label,
		value = function() return val end
		}
end

function p.adminlocation(localparams) -- Fonction assez compliquée du fait des différences entre infobox. Simlifiable si on harmonise les infobox
	-- infobox à prendre en compte : voir page de documentation
	-- localparams est une table de paramètres de l'infobox dont la présence désactive l'appel à Wikidata
	local hasparams = localdata['subdivision1'] or localdata['subdivision'] or localdata['subdivision nom'] or localdata['subdivision2'] or localdata['subdivision3'] or localdata['commune'] or localdata['ville'] or localdata['quartier']
	if localparams then
		for _,param in pairs(localparams) do
			hasparams = hasparams or localdata[ param ]
		end
	end
	
	if not (hasparams) then
		return p.adminloc()
	end
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = 'pays',
				label= 'Pays'
			},
			{
				type = 'row', 
				value = {'subdivision', 'subdivision1', 'subdivision nom'},
				label = localdata['intitulé subdivision'] or localdata['intitulé subdivision1'] or localdata['lien subdivision1'] or localdata['lien subdivision'] or localdata['subdivision type'] or 'Division administrative'
			},
			{
				type = 'row', 
				value = 'subdivision2',
				label = localdata['intitulé subdivision2'] or localdata['lien subdivision2'] or 'Subdivision administrative'
			},
			{
				type = 'row', 
				value = 'subdivision3',
				label = localdata['intitulé subdivision3'] or localdata['lien subdivision3'] or 'Subdivision administrative'
			},
			{
				type = 'row', 
				value = {'commune', 'ville'},
				label = localdata['intitulé commune'] or localdata['lien commune'] or 'Commune'
			},
			{
				type = 'row', 
				value = 'quartier',
				label = localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier'
			},
			{
				type = 'row',
				value = 'adresse',
				label = 'Adresse',
			},
		}
	}
end

function p.onshoreof()
	return {
		type = 'row',
		label = 'Baigné par',
		value = {'baigné par', 'sur les rives de'},
		wikidata = {property = 'P206', defaultlinkquery = {property = 'P361'}},
	}
end

function p.watershed()
	return {
		type = 'row',
		label = 'Bassin versant',
		value = 'bassin versant',
		wikidata = {property = 'P4614', defaultlinkquery = {property = {'P4614', 'P138'}}},
	}
end

function p.protectedarea()
	return {
		type = 'row',
		label = 'Aire protégée',
		plurallabel = 'Aires protégées',
		value = {'aire protégée', 'aires protégées'},
		wikidata = {property = 'P3018', defaultlinkquery = {property = 'P3018'}},
	}
end

function p.island()
	return {
		type = 'row',
		label = 'Île',
		plurallabel = 'Îles',
		value = 'île',
		property = 'P5130',
	}
end

function p.mountainrange()
	return {
		type = 'row',
		label = 'Massif',
		plurallabel = 'Massifs',
		value = {'massif', 'chaîne de montagnes'},
		wikidata = {property = 'P4552', defaultlinkquery = {property = 'P4552'}},
	}
end

function p.elevation()
	return {
		type = 'row',
		label = 'Altitude',
		value = 'altitude',
		wikidata = {property = 'P2044', targetunit = 'metre', conjtype = ' ou ', rounding = '0', numval = '2'},
	}
end

function p.coordinates(args)
	return general.coordinates(args)
end

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

function p.cornerstonelaying()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = {'première pierre', 'pose de la première pierre'},
				label = '[[Première pierre]]',
				wikidata = keyDate('Q18752057')
			}
		}
	}
end

function p.construction()
	return {
		type = 'multi', 
		rows = {

			-- début construction, fin construction (legacy infobox Stade, Infobox Château),
			{
				type = 'row',
				value = {'début construction', 'début'}, 
				label = 'Début de construction', 
			},
			{
				type = 'row',
				value = {'fin construction', 'fin'}, 
				label = 'Fin de construction', 
			},

			-- construction (nom de paramètre "date de construction" à déprécier)
			{
				type = 'row',
				value = {'construction', 'Construction', 'date de construction'}, 
				label = 'Construction', 
				blockers = {'début construction', 'début', 'fin construction', 'fin'},
				wikidata = keyDateConstruction{'Q385378'},
			},
		}
	}

end

function p.fondation()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = {'fondation', 'Fondation', 'date de fondation'}, 
				label = 'Fondation', 
				wikidata = keyDateConstruction{'Q3075355'},
			},
		}
	}

end

function p.reconstruction()
	return {
		type = 'multi', 
		rows = {

			-- début reconstruction, fin reconstruction (legacy infobox Stade, Infobox Château),
			{
				type = 'row',
				value = {'début reconstruction', 'début'}, 
				label = 'Reconstruction', 
			},
			{
				type = 'row',
				value = {'fin reconstruction', 'fin'}, 
				label = 'Fin de reconstruction', 
			},

			-- reconstruction (nom de paramètre "date de reconstruction" à déprécier)
			{
				type = 'row',
				value = {'Reconstruction', 'reconstruction', 'date de reconstruction'}, 
				label = 'Reconstruction', 
				wikidata = keyDate{'Q1370468'}
			},
		}
	}

end

function p.opening()  --ouverture / consécration / date de mise en service (!= date de construction)
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row', 
				value =  {"ouverture", "date d'ouverture", "mise en service"}, 
				label = 'Ouverture', 
				wikidata = keyDate{'P1619', 'Q15051339'} -- P1619 = ouverture officielle, pas ouverture de facto
			},
			{
				type = 'row', 
				value = 'inauguration', 
				label = 'Inauguration',
				blockers = {"ouverture", "date d'ouverture", "mise en service"}, 
				wikidata = keyDate{'Q1417098'}
			},
			{
				type = 'row', 
				value = 'consécration', 
				label = 'Consécration',
				blockers = 'inauguration',
				wikidata = keyDate{'Q125375'}
			},
			{
				type = 'row', 
				value = 'dédicace', 
				label = '[[Dédicace (cérémonie)|Dédicace]]',
				blockers = 'inauguration',
				wikidata = keyDate{'Q1762010'}
			},
			{
				type = 'row', 
				value = 'première lumière', 
				label = '[[Première lumière]]',
				blockers = {"ouverture", "date d'ouverture", "mise en service"},
				wikidata = keyDate{'Q1306940'} -- P1619 = ouverture officielle, pas ouverture de facto
			},
		}
	}
end


function p.renovation()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = 'restauration',
				label = 'Restauration',			
				wikidata = keyDate{'Q217102'},
				blockers = 'rénovation',
			},
			{
				type = 'row',
				value = 'rénovation',
				label = 'Rénovation',			
				wikidata = keyDate{'Q2144402'},
				blockers = 'restauration',
			},
			{
				type = 'row',
				value = {'extension', 'agrandissement'},
				label = 'Extension',		
				wikidata = keyDate{'Q19841649'},
				blockers = 'restauration',
			},
			{
				type = 'row',
				value = 'autres travaux',
				label = 'Autres campagnes de travaux',		
		},
	}
}
end

function p.relocation()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = {'déplacement', 'date de déplacement'},
				label = 'Déplacement',
				plurallabel = 'Déplacements',
				wikidata = keyDate('Q826949')
			}
		}
	}
end

function p.demolition()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				value = {'démolition', 'date de démolition'},
				label = 'Démolition',
				wikidata = keyDate{'Q331483', 'P576'}
			},
			{
				type = 'row',
				value = {'destruction'},
				label = 'Destruction',
				wikidata = keyDate('Q17781833')
			},
			{
				type = 'row',
				value = {'vandalisme'},
				label = 'Vandalisme',
				wikidata = keyDate('Q6160')
			}
		}
	}
end

function p.closure()
	return {
		type = 'row',
		value = {'fermeture', 'date de fermeture'},
		label = 'Fermeture',
		wikidata = keyDate{'Q14954904', 'P3999', 'P576'} -- P576: date de dissolution, plutôt réservé aux organisations
	}
end

function p.usage()
	return {
		type = 'row',
		label = 'Usage',
		value = 'usage',
		blockers = 'destination actuelle',
		wikidata = {
			property = 'P366',
			speciallabels = {Q182060 = 'bureaux'}, -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment
			showdate = true
		}	
	}
end

function p.operator()
	return {
		type = 'row',
		label = 'Gestionnaire',
		wikidata = {property = 'P137', showdate= true},
		value = {'administration', 'gestionnaire'}
	}
end

function p.maintenance()
	return {
		type = 'row',
		label = 'Maintenance',
		wikidata = {property = 'P126', showdate= true},
		value = {'maintenance'}
	}
end

function p.transport()
	return {
		type = 'multi', 
		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 = {'tram', 'tramway'}},
			{type = 'row', label = 'Autobus', value = 'bus'},
		},
	}
end

function p.complex() -- le complexe immobilier auquel appartient un bâtiment
	return {
		type = 'row',
		label = 'Complexe',
		value = 'complexe',
		wikidata = {
			property = 'P361',
			condition = function(claim)
				local v = wd.getMainId(claim)
				return wd.isInstance("Q1497364", v, 1)
			end,
		}
	}
end

function p.orientation()
	return {
		type = 'row',
		label = 'Orientation',
		value = 'orientation',
		wikidata = {property = 'P7469', numval = '1'},
	}
end

function p.archistyle()
	return {
		type = 'row',
		label = 'Style',
		plurallabel = 'Styles',
		value = {'style architectural', 'style'},
		wikidata = {property = {'P149', 'P135'},
			       showqualifiers = {'P518'},
		}
	}
end

function p.creator() -- toute sorte de créateurs, pourraient peut-être être partagé avec infobox oeuvre d'art
	local wdarchitect, wdengineer = p.creatorQuery("P84"), p.creatorQuery("P631")
	if wdarchitect and wdengineer then -- ne pas afficher les deux si c'est la même valeur
		if (wd.formatStatements{property = "P84", displayformat = "raw", entity= localdata.item} == wd.formatStatements{property = "P631", displayformat = "raw", entity = localdata.item}) then
			wdengineer = nil
		end
	end
	return {
		type = 'multi',
		rows = {
			-- architecte
			{
				type = "row",
				label = localdata["titre architecte"] or "Architecte",
				plurallabel = "Architectes",
				value = "architecte",
				wikidata = wdarchitect,
			},
			-- ingénieur
			{
				type = "row",
				label = "Ingénieur",
				plurallabel = "Ingénieurs",
				value = "ingénieur",
				wikidata =  wdengineer,
			},
	    	-- peintre
			{
				type = "row",
				label = "Peintre",
				plurallabel = "Peintres",
				value = "peintre",
			},
      		-- sculpteur
			{
				type = "row",
				label = "Sculpteur",
				plurallabel = "Sculpteurs",
				value = "sculpteur",
			},
			-- créateur (quand les autres noms ne conviennent pas)
			{	type = "row",
				label = localdata["titre créateur"] or "Créateur",
				plurallabel = "Créateurs",
				value = "créateur",
				-- ne pas utiliser Wikidata si un des paramètres précédent est renseigné (risques de doublon)
				wikidata =  p.creatorQuery("P170"),
				blockers = {'architecte', 'peintre', 'sculpteur'},
			},
		}
	}
end


function p.owner()
	return {
		type = 'multi', 
		rows = {
			{
				type = 'row',
				label = 'Propriétaire initial',
				plurallabel = 'Propriétaires initiaux',
				value = 'propriétaire initial',
			},
			{
				type = 'row',
				label = 'Propriétaire actuel',
				plurallabel = 'Propriétaires actuels',
				value = 'propriétaire actuel',
			},
			{
				type = 'row',
				label = 'Propriétaire',
				plurallabel = 'Propriétaires',
				value = 'propriétaire',
				wikidata = function() return require('Module:Propriétaire').formatFromItem(localdata.item, {sorttype = 'chronological', showdate = true, conjtype = 'comma', precision = 'year'}) end,
			}
		}
	}
end

function p.religion()
	return {
		type = 'row',
		label = 'Religion',
		value = {'religion', 'église'},
		property = 'P140',
	}
end

function p.shape()
	return {
		type = 'row',
		label = 'Forme',
		value = {'forme', 'aspect'},
		property = 'P1419',
	}
end

function p.dimensions()
	return {
	type = 'multi', 
		rows = {
		{
		type = 'row',
		label = 'Hauteur',
		value = function()
			local str = localdata['hauteur']
			-- hauteurs spéciales, pour infobox:Gratte-ciel
			local function appendheight(str, param, label)
				if not localdata[param] then
					return str
				end
				if str then
					str = str .. '<br />'
				else
					str = ''
				end
				return str .. label .. ' : ' .. localdata[param]
			end
			str = appendheight(str, 'antenne flèche', 'Flèche')
			str = appendheight(str, 'toit', 'Toit')
			str = appendheight(str, 'dernier étage', 'Dernier étage')			
			
			return str
			end,
		wikidata = {
			property = 'P2048',
			targetunit = 'm',
			excludequalifier = 'P518',
			sorttype = 'descending',
			rank = 'valid',
			conjtype = '<br />',
			link = '-',
			showqualifiers = {'P1013', 'P518'}		
		}
	},
	{
		type = 'row',
		label = 'Profondeur',
		value = 'profondeur',
		wikidata =  {property = 'P2610', targetunit = 'metre', numval = '2', statementformat = function(statement) return inclexcl(statement, {targetunit = 'metre', rounding = '1'}) end},
	},
	{
		type = 'row',
		label = 'Longueur',
		value = 'longueur',
		wikidata = {property = 'P2043', targetunit = 'metre', numval = '2', statementformat = function(statement) return inclexcl(statement, {targetunit = 'metre', rounding = '1'}) end},
	},
	{
		type = 'row',
		label = 'Largeur',
		value = 'largeur',
		wikidata = {property = 'P2049', targetunit = 'metre', numval = 2, statementformat = function(statement) return inclexcl(statement, {targetunit = 'metre', rounding = '1'}) end},
	},
	{
		type = 'row',
		label = 'Envergure',
		value = 'envergure',
		wikidata = {property = 'P2050', targetunit = 'metre', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Diamètre',
		value = 'diamètre',
		wikidata = {property = 'P2386', targetunit = 'metre', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Périmètre',
		value = {'périmètre', 'contour', 'circonférence'},
		wikidata = {property = 'P2547', targetunit = 'metre', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Surface',
		value = {'surface', 'superficie'},
		wikidata = {property = 'P2046', targetunit = 'square meter', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Volume',
		value = 'volume',
		wikidata = {property = 'P2234', targetunit = 'cubic metre', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Inclinaison',
		value = 'inclinaison',
		wikidata = {property = 'P4183', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Tirant d’air',
		value = 'tirant d\'air',
		wikidata = {property = 'P2793', targetunit = 'metre', conjtype = 'or', rounding = '1', numval = '2'},
	},
	{
		type = 'row',
		label = 'Nombre de pièces',
		value = 'pieces',
		wikidata = {property = 'P8733', excludequalifier = {'P518', 'P1480'}, conjtype = 'or', rounding = '1', numval = '2'},
	}
	}
}
end

function p.floors()
	return {
	type = 'multi', 
		rows = {
	{
		type = 'row',
		label = 'Niveaux',
		value = {'niveaux au-dessus du sol', 'niveaux'},
		property = 'P1101',
	},
	{
		type = 'row',
		label = 'Sous-sols',
		value = 'sous-sols',
		property = 'P1139',
	}
	}
}
end

function p.destroyedby()
	return {
		type = 'row',
		label = 'Détruit par',
		value = {'détruit par', 'cause de la destruction'}, 
		property = 'P770',
	}
end

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

function p.colour()
	return {
		type = 'row',
		label = 'Couleur',
		plurallabel = 'Couleurs',
		value = {'couleur', 'couleurs'},
		property = 'P462',
	}
end

function p.inscription()
	return {
		type = 'row',
		label = 'Inscription',
		value = {'inscription', 'enseigne'},
		wikidata = {property = 'P1684', numval = '1'},
	}
end

function p.awards()
	return {
		type = 'row',
		label = 'Prix',
		value = 'prix',
		wikidata = {property = 'P166', showdate = 'yes', numval = '3'},
	}
end

function p.recordheld()
	return {
		type = 'row',
		label = 'Record détenu',
		plurallabel = 'Records détenus',
		value = 'Record',
		wikidata = {property = 'P1000', showdate = 'yes', numval = '3'},
	}
end

function p.equipment()
	return {
		type = 'row',
		label = 'Équipement',
		plurallabel = 'Équipements',
		value = {'équipement', 'équipements'},
		property = 'P912',
	}
end

function p.replaces()
	return {
		type = 'row',
		label = 'Remplace',
		value = 'remplace',
		property = 'P1398',
	}
end

function p.replacedby()
	return {
		type = 'row',
		label = 'Remplacé par',
		value = 'remplacé par',
		property = 'P167',
	}
end

function p.visitors()
	return {
		type = 'row',
		label = 'Visiteurs par an',
		value = {'visiteurs', 'visiteurs par an', 'fréquentation', 'fréquentation annuelle'},
		wikidata = {property = 'P1174', showdate = 'true', numval = 1, sorttype = "inverted"},
	}
end

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

function p.danger()
	return {
		type = 'row',
		label = 'Danger',
		plurallabel = 'Dangers',
		value = {'danger', 'dangers'},
		wikidata = {property = 'P3335', numval = 5},
	}
end

function p.policy()
	return {
		type = 'row',
		label = 'Règlement',
		plurallabel = 'Règlements',
		value = {'règlement', 'règlements'},
		wikidata = {property = 'P5023', numval = 5},
	}
end

function p.unesco() -- pour remplacer [[Modèle:Infobox Patrimoine Mondial]] à ajouter : paramètres extension, patrimoine en péril, retrait, gestion des monuments faisant partie d'un ensemble
	local id = localdata['identifiant patrimoine mondial']
	if (id == '-') then
		return nil
	end
	if id then
		id = '[http://whc.unesco.org/fr/list/' .. id .. ' ' .. id .. ']'

	else
		id = wd.formatAndCat{entity = item, property = 'P757',  urlpattern = 'http://whc.unesco.org/fr/list/$1'}

	end
	if (not id) then
		return nil
	end
	return 
	{type = 'table', title = '[[Fichier:World Heritage Emblem.svg|15px|alt=Logo du patrimoine mondial|link=Patrimoine mondial]] Patrimoine mondial', rows = {
		{type = 'row', label = 'Désignation', value = 'nom unesco'},
		{type = 'row', label = "Type de bien", value = 'type unesco', wikidata = {property = 'P1435', targetvalue = {'Q16617071', 'Q52683527', 'Q52683530'}}},
		{type = 'row', label = "Date d'entrée", value = 'date patrimoine mondial', wikidata = {property = 'P1435', targetvalue = {'Q9259', 'Q16617071', 'Q52683527', 'Q52683530'}, showonlyqualifier = {'P580'}}},
		{
		type = 'row',
		label = "Identifiant",
		value = function() return id end,
		},
		{	
		type = 'row',
		label = "Critères",
		singularlabel = "Critère",
		value = function(localdata)
			if localdata['critères patrimoine mondial'] then
					return '[http://whc.unesco.org/fr/criteres/' .. localdata['critères patrimoine mondial'] .. ']'
			end
			end, 
		wikidata = function(item)
			local str, numclaims = wd.formatStatements{entity = item, property = 'P2614', link = '-', conjtype = ' ', returnnumberofvalues = true}
			if str then
				return wd.formatAndCat{value = '[http://whc.unesco.org/fr/criteres/$1 ' .. str .. ']', entity = item, property = 'P2614'}, numclaims
			end
			end
		},
		{type = 'row', label = 'Surface', value = 'surface unesco'},
		{type = 'row', label = 'Zone tampon', value = 'surface zone tampon unesco'},
	}
}
end

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

return p