Module:Infobox/Fonctions/Bâtiment : Différence entre versions
< Module:Infobox | Fonctions
m |
(P3999 per talk page) |
||
(40 révisions intermédiaires par 6 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
− | local | + | local localdata = require( 'Module:Infobox/Localdata' ) |
+ | local wd = require( 'Module:Interface Wikidata' ).fromLua | ||
local general = require 'Module:Infobox/Fonctions' | local general = require 'Module:Infobox/Fonctions' | ||
− | local | + | local linguistic = require "Module:Linguistique" |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
local function daterow(args) | local function daterow(args) | ||
local wikidataquery | local wikidataquery | ||
if args.event then | if args.event then | ||
− | wikidataquery = function() return | + | wikidataquery = function() return wd.keyDate(args.event) end |
end | end | ||
− | -- blocker définit des événements proches de celui recherché, s'il sont rensignés localement, on désactive la | + | -- blocker définit des événements proches de celui recherché, s'il sont rensignés localement, on désactive la requête Wikidata pour éviter les doublons |
-- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata | -- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata | ||
− | if args.blocker and | + | if args.blocker and localdata[args.blocker] then |
− | + | wikidataquery = nil | |
elseif args.blocker and type(args.blocker) == 'table' then | elseif args.blocker and type(args.blocker) == 'table' then | ||
for i, j in pairs(blocker) do | for i, j in pairs(blocker) do | ||
− | if | + | if localdata[j] then |
− | + | wikidataquery = nil | |
break | break | ||
end | end | ||
Ligne 36 : | Ligne 29 : | ||
value = args.param, | value = args.param, | ||
wikidata = wikidataquery | wikidata = wikidataquery | ||
+ | } | ||
+ | end | ||
+ | |||
+ | function p.creatorQuery(prop) | ||
+ | return { | ||
+ | property = prop, | ||
+ | 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 | end | ||
Ligne 53 : | Ligne 90 : | ||
end | end | ||
− | function p.country( | + | function p.country() |
− | return | + | return general.country() |
end | end | ||
− | |||
function p.historicalregion() | function p.historicalregion() | ||
Ligne 63 : | Ligne 99 : | ||
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 = | + | label = localdata['intitulé région'] or localdata['lien région'] or 'Région', |
} | } | ||
end | end | ||
Ligne 69 : | Ligne 105 : | ||
function p.adminlocation() -- Fonction assez compliquée du fait des différences entre infobox. Simlifiable si on harmonise les infobox | 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 | -- infobox à prendre en compte : bâtiment, gratte-ciel, gare, château | ||
− | return | + | return { |
− | + | type = 'multi', | |
+ | rows = { | ||
{ | { | ||
type = 'row', | type = 'row', | ||
− | value = {'subdivision', 'subdivision1'}, | + | value = {'subdivision', 'subdivision1', 'subdivision nom'}, |
− | label = | + | label = localdata['intitulé subdivision'] or localdata['lien subdivision1'] or localdata['lien subdivision'] or localdata['subdivision type'] or 'Division administrative' |
}, | }, | ||
{ | { | ||
type = 'row', | type = 'row', | ||
value = 'subdivision2', | value = 'subdivision2', | ||
− | label = | + | label = localdata['intitulé subdivision2'] or localdata['lien subdivision2'] or 'Subdivision administrative' |
}, | }, | ||
{ | { | ||
type = 'row', | type = 'row', | ||
value = 'subdivision3', | value = 'subdivision3', | ||
− | label = | + | label = localdata['intitulé subdivision3'] or localdata['lien subdivision3'] or 'Subdivision administrative' |
}, | }, | ||
{ | { | ||
type = 'row', | type = 'row', | ||
value = {'commune', 'ville'}, | value = {'commune', 'ville'}, | ||
− | label = | + | label = localdata['intitulé commune'] or localdata['lien commune'] or 'Commune' |
}, | }, | ||
{ | { | ||
type = 'row', | type = 'row', | ||
value = 'quartier', | value = 'quartier', | ||
− | label = | + | label = localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier' |
+ | }, | ||
+ | { | ||
+ | type = 'row', | ||
+ | value = 'adresse', | ||
+ | label = 'Adresse', | ||
+ | wikidata = require('Module:Adresse').wikidataAddress(localdata.item), | ||
}, | }, | ||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | } | |
end | end | ||
− | function p.coordinates( | + | function p.onshoreof() |
− | return | + | return { |
+ | type = 'row', | ||
+ | label = 'Baigné par', | ||
+ | value = {'baigné par', 'sur les rives de'}, | ||
+ | property = 'P206', | ||
+ | } | ||
+ | end | ||
+ | |||
+ | function p.protectedarea() | ||
+ | return { | ||
+ | type = 'row', | ||
+ | label = 'Aire protégée', | ||
+ | plurallabel = 'Aire protégée', | ||
+ | value = {'aire protégée', 'aires protégées'}, | ||
+ | property = 'P3018', | ||
+ | } | ||
+ | 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 | end | ||
Ligne 114 : | Ligne 180 : | ||
function p.construction() | function p.construction() | ||
− | return | + | 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 = 'début construction', label = 'Début de construction'}, | ||
daterow{param = 'fin construction', label = 'Fin de construction'}, | daterow{param = 'fin construction', label = 'Fin de construction'}, | ||
− | + | -- construction (nom de paramètre "date de construction" à déprécier) | |
− | daterow{param = {'construction', 'Construction'}, label = 'Construction', event = 'Q385378'}, | + | daterow{ |
+ | param = {'construction', 'Construction', 'date de construction'}, | ||
+ | label = 'Construction', | ||
+ | event = {'Q385378', 'P571'} | ||
+ | }, | ||
+ | } | ||
+ | } | ||
− | + | end | |
− | daterow{param = 'ouverture | + | |
+ | function p.opening() --ouverture / consécration / date de mise en service (!= date de construction) | ||
+ | return { | ||
+ | type = 'multi', | ||
+ | rows = { | ||
+ | daterow{ | ||
+ | param = {"ouverture", "date d'ouverture", "mise en service"}, | ||
+ | label = 'Ouverture', | ||
+ | event = {'P1619', 'Q15051339'} -- P1619 = ouverture officielle, pas ouverture de facto | ||
+ | }, | ||
daterow{param = 'inauguration', label = 'Inauguration', event = 'Q1417098', blocker = 'ouverture'}, -- désactivé si "ouverture" est renseigné : risques de doublon | daterow{param = 'inauguration', label = 'Inauguration', event = 'Q1417098', blocker = 'ouverture'}, -- désactivé si "ouverture" est renseigné : risques de doublon | ||
− | daterow{param = | + | daterow{param = 'consécration', label = 'Consécration', event = 'Q125375', blocker = 'inauguration'}, |
+ | daterow{param = 'première lumière', label = '[[Première lumière]]', event = 'Q1306940'}, | ||
} | } | ||
} | } | ||
+ | end | ||
+ | |||
+ | function p.renovation() | ||
+ | return { | ||
+ | type = 'multi', | ||
+ | rows = { | ||
+ | daterow{param = 'restauration', label = 'Restauration', event = 'Q217102', blocker = 'rénovation'}, | ||
+ | daterow{param = 'rénovation', label = 'Rénovation', event = 'Q2144402', blocker = 'restauration'}, | ||
+ | daterow{param = {'extension', 'agrandissement'}, label = 'Extension', event = 'Q18621193'}, | ||
+ | daterow{param = 'autres travaux', label = 'Autres campagnes de travaux'}, | ||
+ | } | ||
+ | } | ||
end | end | ||
− | function p.demolition() | + | function p.demolition() |
− | {type = 'multi', rows = { | + | return { |
− | + | type = 'multi', | |
− | + | rows = { | |
− | + | daterow{param = {'démolition', 'date de démolition'}, label = 'Démolition', event = 'Q331483'}, | |
+ | daterow{param = 'destruction', label = 'Destruction', event = 'Q17781833'}, | ||
+ | } | ||
} | } | ||
end | end | ||
− | function p.closure() | + | function p.closure() |
− | daterow{param = ' | + | return daterow{ |
+ | param = {'fermeture', 'date de fermeture'}, | ||
+ | label = 'Fermeture', | ||
+ | event = {'Q14954904', 'P3999', 'P576'} -- P576: date de dissolution, plutôt réservé aux organisations | ||
+ | } | ||
end | end | ||
− | function p.usage() | + | function p.usage() |
− | { | + | return { |
− | + | type = 'row', | |
− | + | label = 'Usage', | |
− | + | value = 'usage', | |
− | + | wikidata = { | |
− | + | property = 'P366', | |
− | + | link = '-', | |
− | } | + | speciallabels = {Q182060 = 'bureaux'}, -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment |
− | + | } | |
− | |||
} | } | ||
end | end | ||
function p.operator() | function p.operator() | ||
− | return | + | return { |
− | |||
type = 'row', | type = 'row', | ||
label = 'Gestionnaire', | label = 'Gestionnaire', | ||
− | property = 'P137', | + | wikidata = {property = 'P137', showdate= true}, |
− | value = | + | value = {'administration', 'gestionnaire'} |
} | } | ||
end | end | ||
Ligne 170 : | Ligne 269 : | ||
function p.transport() | function p.transport() | ||
return { | 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, | ||
} | } | ||
} | } | ||
Ligne 187 : | Ligne 301 : | ||
value = {'style architectural', 'style'}, | value = {'style architectural', 'style'}, | ||
wikidata = function () | wikidata = function () | ||
− | local val = | + | local val = wd.formatAndCat{entity = localdata.item, property = 'P149'} |
+ | or wd.formatAndCat{entity = localdata.item, property = 'P135'} | ||
if not val then | if not val then | ||
return nil | return nil | ||
Ligne 193 : | Ligne 308 : | ||
val = mw.ustring.gsub(val, "\|style ", "\|") | val = mw.ustring.gsub(val, "\|style ", "\|") | ||
return val | return val | ||
− | + | end | |
} | } | ||
end | end | ||
function p.creator() -- toute sorte de créateurs, pourraient peut-être être partagé avec infobox oeuvre d'art | function p.creator() -- toute sorte de créateurs, pourraient peut-être être partagé avec infobox oeuvre d'art | ||
− | return {type = 'multi', rows = { | + | return { |
− | + | type = 'multi', | |
− | + | rows = { | |
− | + | -- architect | |
− | value = ' | + | { |
− | + | type = "row", | |
+ | label = localdata["titre architecte"] or "Architecte", | ||
+ | value = "architecte", | ||
+ | wikidata = p.creatorQuery("P84"), | ||
+ | }, | ||
+ | -- ingénieur | ||
+ | { | ||
+ | type = "row", | ||
+ | label = "Ingénieur", | ||
+ | value = "ingénieur", | ||
+ | wikidata = p.creatorQuery("P631"), | ||
+ | }, | ||
+ | -- créateur (quand les autres noms ne conviennent pas) | ||
+ | { type = "row", | ||
+ | label = "Créateur", | ||
+ | value = "créateur", | ||
+ | -- ne pas utiliser Wikidata si le paramètre "architecte" est renseigné (risques de doublon) | ||
+ | wikidata = function() | ||
+ | if (not localdata["architecte"]) then | ||
+ | return wd.formatAndCat( p.creatorQuery("P170")) | ||
+ | end | ||
+ | end, | ||
+ | }, | ||
+ | } | ||
+ | } | ||
+ | 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 = require('Module:Propriétaire').formatFromItem(localdata.item) | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | 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 = 'Longueur', | ||
+ | value = 'longueur', | ||
+ | wikidata = {property = 'P2043', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | ||
+ | }, | ||
+ | { | ||
+ | type = 'row', | ||
+ | label = 'Largeur', | ||
+ | value = 'largeur', | ||
+ | wikidata = {property = 'P2049', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | ||
}, | }, | ||
− | |||
{ | { | ||
type = 'row', | type = 'row', | ||
− | label = ' | + | label = 'Diamètre', |
− | value = ' | + | value = 'diamètre', |
− | property = ' | + | wikidata = {property = 'P2386', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, |
}, | }, | ||
− | + | { | |
− | { type = 'row', | + | type = 'row', |
− | label = ' | + | label = 'Périmètre', |
− | value = | + | value = {'périmètre', 'contour', 'circonférence'}, |
− | + | wikidata = {property = 'P2547', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | |
− | + | }, | |
− | + | { | |
− | + | type = 'row', | |
− | + | label = 'Hauteur', | |
− | + | value = 'hauteur', | |
− | + | wikidata = {property = 'P2048', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | |
− | + | }, | |
− | + | { | |
− | + | type = 'row', | |
+ | label = 'Profondeur', | ||
+ | value = 'profondeur', | ||
+ | wikidata = {property = 'P2610', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | ||
+ | }, | ||
+ | { | ||
+ | type = 'row', | ||
+ | label = 'Superficie', | ||
+ | value = {'superficie', 'surface'}, | ||
+ | wikidata = {property = 'P2046', targetunit = 'square metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | ||
}, | }, | ||
− | } } | + | { |
+ | type = 'row', | ||
+ | label = 'Volume', | ||
+ | value = 'volume', | ||
+ | wikidata = {property = 'P2234', targetunit = 'cubic metre', conjtype = ' ou ', rounding = '1', numval = '2'}, | ||
+ | } | ||
+ | } | ||
+ | } | ||
end | end | ||
+ | function p.floors() | ||
+ | return { | ||
+ | type = 'multi', | ||
+ | rows = { | ||
+ | { | ||
+ | type = 'row', | ||
+ | label = 'Étages', | ||
+ | value = {'niveaux au-dessus du sol', 'étages'}, | ||
+ | property = 'P1101', | ||
+ | }, | ||
+ | { | ||
+ | type = 'row', | ||
+ | label = 'Sous-sols', | ||
+ | value = 'sous-sols', | ||
+ | property = 'P1139', | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | end | ||
− | function p. | + | function p.destroyedby() |
− | return | + | return { |
− | + | type = 'row', | |
− | + | label = 'Détruit par', | |
− | + | value = {'détruit par', 'cause de la destruction'}, | |
− | + | property = 'P770', | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Ligne 256 : | Ligne 471 : | ||
type = 'row', | type = 'row', | ||
label = 'Matériau', | label = 'Matériau', | ||
+ | plurallabel = 'Matériaux', | ||
value = 'matériau', | value = 'matériau', | ||
− | wikidata = require('Module:Matériau').formatFromItem(item), | + | 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.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 | end | ||
Ligne 265 : | Ligne 528 : | ||
type = 'row', | type = 'row', | ||
label = 'Statut patrimonial', | label = 'Statut patrimonial', | ||
− | value = 'classement', | + | value = {'classement', 'protection'}, |
− | wikidata = require('Module:Classement').formattedList(item) | + | wikidata = require('Module:Classement').formattedList(localdata.item) |
} | } | ||
end | end | ||
function p.geoloc(params) | function p.geoloc(params) | ||
− | return | + | return general.geoloc(params) |
end | end | ||
return p | return p |
Version actuelle datée du 3 juin 2017 à 10:51
La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Bâtiment/doc
local p = {} local localdata = require( 'Module:Infobox/Localdata' ) local wd = require( 'Module:Interface Wikidata' ).fromLua local general = require 'Module:Infobox/Fonctions' local linguistic = require "Module:Linguistique" local function daterow(args) local wikidataquery if args.event then wikidataquery = function() return wd.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 requête Wikidata pour éviter les doublons -- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata if args.blocker and localdata[args.blocker] then wikidataquery = nil elseif args.blocker and type(args.blocker) == 'table' then for i, j in pairs(blocker) do if localdata[j] then wikidataquery = nil break end end end return { type = 'row', label = args.label, value = args.param, wikidata = wikidataquery } end function p.creatorQuery(prop) return { property = prop, 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 general.country() 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.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', 'subdivision nom'}, label = localdata['intitulé subdivision'] 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', wikidata = require('Module:Adresse').wikidataAddress(localdata.item), }, } } end function p.onshoreof() return { type = 'row', label = 'Baigné par', value = {'baigné par', 'sur les rives de'}, property = 'P206', } end function p.protectedarea() return { type = 'row', label = 'Aire protégée', plurallabel = 'Aire protégée', value = {'aire protégée', 'aires protégées'}, property = 'P3018', } 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() return general.website() end function p.construction() 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 construction" à déprécier) daterow{ param = {'construction', 'Construction', 'date de construction'}, label = 'Construction', event = {'Q385378', 'P571'} }, } } end function p.opening() --ouverture / consécration / date de mise en service (!= date de construction) return { type = 'multi', rows = { daterow{ param = {"ouverture", "date d'ouverture", "mise en service"}, label = 'Ouverture', event = {'P1619', 'Q15051339'} -- P1619 = ouverture officielle, pas ouverture de facto }, 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'}, daterow{param = 'première lumière', label = '[[Première lumière]]', event = 'Q1306940'}, } } end function p.renovation() return { type = 'multi', rows = { daterow{param = 'restauration', label = 'Restauration', event = 'Q217102', blocker = 'rénovation'}, daterow{param = 'rénovation', label = 'Rénovation', event = 'Q2144402', blocker = 'restauration'}, daterow{param = {'extension', 'agrandissement'}, label = 'Extension', event = 'Q18621193'}, daterow{param = 'autres travaux', label = 'Autres campagnes de travaux'}, } } end function p.demolition() return { type = 'multi', rows = { daterow{param = {'démolition', 'date de démolition'}, label = 'Démolition', event = 'Q331483'}, daterow{param = 'destruction', label = 'Destruction', event = 'Q17781833'}, } } end function p.closure() return daterow{ param = {'fermeture', 'date de fermeture'}, label = 'Fermeture', event = {'Q14954904', 'P3999', 'P576'} -- P576: date de dissolution, plutôt réservé aux organisations } end function p.usage() return { type = 'row', label = 'Usage', value = 'usage', wikidata = { property = 'P366', link = '-', speciallabels = {Q182060 = 'bureaux'}, -- bureaux semble toujours pouvoir se mettre au pluriel quand c'est en P366 d'un bâtiment } } end function p.operator() return { type = 'row', label = 'Gestionnaire', wikidata = {property = 'P137', showdate= true}, value = {'administration', 'gestionnaire'} } 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.archistyle() return { type = 'row', label = 'Style', value = {'style architectural', 'style'}, wikidata = function () local val = wd.formatAndCat{entity = localdata.item, property = 'P149'} or wd.formatAndCat{entity = localdata.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 = localdata["titre architecte"] or "Architecte", value = "architecte", wikidata = p.creatorQuery("P84"), }, -- ingénieur { type = "row", label = "Ingénieur", value = "ingénieur", wikidata = p.creatorQuery("P631"), }, -- créateur (quand les autres noms ne conviennent pas) { type = "row", label = "Créateur", value = "créateur", -- ne pas utiliser Wikidata si le paramètre "architecte" est renseigné (risques de doublon) wikidata = function() if (not localdata["architecte"]) then return wd.formatAndCat( p.creatorQuery("P170")) end end, }, } } 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 = require('Module:Propriétaire').formatFromItem(localdata.item) } } } 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 = 'Longueur', value = 'longueur', wikidata = {property = 'P2043', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Largeur', value = 'largeur', wikidata = {property = 'P2049', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Diamètre', value = 'diamètre', wikidata = {property = 'P2386', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Périmètre', value = {'périmètre', 'contour', 'circonférence'}, wikidata = {property = 'P2547', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Hauteur', value = 'hauteur', wikidata = {property = 'P2048', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Profondeur', value = 'profondeur', wikidata = {property = 'P2610', targetunit = 'metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Superficie', value = {'superficie', 'surface'}, wikidata = {property = 'P2046', targetunit = 'square metre', conjtype = ' ou ', rounding = '1', numval = '2'}, }, { type = 'row', label = 'Volume', value = 'volume', wikidata = {property = 'P2234', targetunit = 'cubic metre', conjtype = ' ou ', rounding = '1', numval = '2'}, } } } end function p.floors() return { type = 'multi', rows = { { type = 'row', label = 'Étages', value = {'niveaux au-dessus du sol', 'étages'}, 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.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.protection() return { type = 'row', label = 'Statut patrimonial', value = {'classement', 'protection'}, wikidata = require('Module:Classement').formattedList(localdata.item) } end function p.geoloc(params) return general.geoloc(params) end return p