« Module:Infobox/Fonctions/Bâtiment » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
réglages p.creator (voir pdd modèle)
0x010D (discussion | contributions)
suppression variables globales ; indentation
Ligne 1 : Ligne 1 :
local p = {}
local p = {}
local wd = require 'Module:Interface Wikidata'.fromLua
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 linguistic = require "Module:Linguistique"
local linguistic = require "Module:Linguistique"
local function daterow(args)
local function daterow(args)
local wikidataquery
local wikidataquery
Ligne 12 : Ligne 14 :
-- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata
-- exemple : "ouverture" désactive la recher d'"inauguration" sur Wikidata
if args.blocker and localdata[args.blocker] then
if args.blocker and localdata[args.blocker] then
wikidata = false
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 localdata[j] then
if localdata[j] then
wikidata = false
wikidataquery = nil
break
break
end
end
Ligne 32 : Ligne 34 :
function p.creatorQuery(prop)  
function p.creatorQuery(prop)  
return {
return {
property = prop,
property = prop,
showqualifiers = {'P518'},
showqualifiers = {'P518'},
showdate = true,
showdate = true,
qualiflink = '-',
qualiflink = '-',
statementformat = function(statement)
statementformat = function(statement)
local str
local str
-- On commence par les qualificatifs (attibué à, atelier etc.)
-- On commence par les qualificatifs (attibué à, atelier etc.)
local possiblequalifiers = {
local possiblequalifiers = {
P1773 = "attribué $to $creator",  
P1773 = "attribué $to $creator",  
P1774 = "atelier $of $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1779 = "$creator (?)",
P1780 = "école $of",
P1780 = "école $of",
P1877 = "d'après un œuvre $of",
P1877 = "d'après un œuvre $of",
}
}
 
if statement.qualifiers then
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
for qualif, text in pairs(possiblequalifiers) do
local creator = wd.getFormattedQualifiers(statement, {qualif})
local creator = wd.getFormattedQualifiers(statement, {qualif})
if creator then
if creator then
str = text
str = text
Ligne 62 : Ligne 64 :
break
break
end
end
end
end
end
end
-- Sinon, la voie normale
-- Sinon, la voie normale
if not str then
if not str then
str = wd.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
str = wd.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
end
return str
return str
end
end
}
}
Ligne 103 : 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 = 'multi',  
rows = {
{
{
type = 'row',  
type = 'row',  
Ligne 130 : Ligne 133 :
label = localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier'
label = localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier'
},
},
{
{
type = 'row',
type = 'row',
value = 'adresse',
value = 'adresse',
label = 'Adresse',
label = 'Adresse',
wikidata = require('Module:Adresse').wikidataAddress(item),
wikidata = require('Module:Adresse').wikidataAddress(localdata.item),
},
}
}
} }
}
end
end


Ligne 148 : Ligne 152 :


function p.construction()
function p.construction()
return
return {
{type = 'multi', rows = {
type = 'multi',  
-- début construction, fin construction (legacy infobox Stade, Infobox Château),
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)
-- construction (nom de paramètre "date de construction" à déprécier)
daterow{param = {'construction', 'Construction', 'date de construction'}, label = 'Construction', event = {'Q385378', 'P571'}},
daterow{
 
param = {'construction', 'Construction', 'date de construction'},  
label = 'Construction',  
event = {'Q385378', 'P571'}
},
}
}
}
}
Ligne 162 : Ligne 170 :
end
end


function p.opening() return --ouverture / consécration / date de mise en service (!= date de construction)
function p.opening() --ouverture / consécration / date de mise en service (!= date de construction)
{type = 'multi', rows = {
return {
daterow{param =  {"ouverture", "date d'ouverture", "mise en service"}, label = 'Ouverture', event = {'P1619', 'Q15051339'}}, -- P1619 = ouverture officielle, pas ouverture de facto
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 = 'consécration', label = 'Consécration', event = 'Q125375', blocker = 'inauguration'},
daterow{param = 'consécration', label = 'Consécration', event = 'Q125375', blocker = 'inauguration'},
Ligne 173 : Ligne 187 :




function p.renovation() return
function p.renovation()
{type = 'multi', rows = {
return {
daterow{param = 'restauration', label = 'Restauration', event = 'Q217102', blocker = 'rénovation'},
type = 'multi',  
daterow{param = 'rénovation', label = 'Rénovation', event = 'Q2144402', blocker = 'restauration'},
rows = {
daterow{param = {'extension', 'agrandissement'}, label = 'Extension', event = 'Q18621193'},
daterow{param = 'restauration', label = 'Restauration', event = 'Q217102', blocker = 'rénovation'},
daterow{param = 'autres travaux', label = 'Autres campagnes de travaux'},
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() return
function p.demolition()
{type = 'multi', rows = {
return {
daterow{param = {'démolition', 'date de démolition'}, label = 'Démolition', event = 'Q331483'},
type = 'multi',  
daterow{param = 'destruction', label = 'Destruction', event = 'Q17781833'},
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() return
function p.closure()
daterow{
return daterow{
param = {'fermeture', 'date de fermeture'},
param = {'fermeture', 'date de fermeture'},
label = 'Fermeture',
label = 'Fermeture',
event = {'Q14954904','P576'}
event = {'Q14954904','P576'} -- P576: date de dissolution, plutôt réservé aux organisations
} -- P576: date de dissolution, plutôt réservé aux organisations
}
end
end


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


function p.operator()
function p.operator()
return  
return {
{
type = 'row',
type = 'row',
label = 'Gestionnaire',
label = 'Gestionnaire',
Ligne 223 : Ligne 240 :


function p.transport()
function p.transport()
return
return {
{type = 'multi', rows = {
type = 'multi',  
{type = 'row', label = 'Stationnement', value = 'stationnement'},
rows = {
{type = 'row', label = 'Gare', value = 'gare'},
{type = 'row', label = 'Stationnement', value = 'stationnement'},
{type = 'row', label = 'Métro', value = 'métro'},
{type = 'row', label = 'Gare', value = 'gare'},
{type = 'row', label = 'Tramway', value = {'tram', 'tramway'}},
{type = 'row', label = 'Métro', value = 'métro'},
{type = 'row', label = 'Autobus', value = 'bus'},
{type = 'row', label = 'Tramway', value = {'tram', 'tramway'}},
},
{type = 'row', label = 'Autobus', value = 'bus'},
},
}
}
end
end
Ligne 244 : Ligne 262 :
local v = wd.getmainid(claim)
local v = wd.getmainid(claim)
return wd.isInstance("Q1497364", v, 1)
return wd.isInstance("Q1497364", v, 1)
end,
end,
}
}
}
}
Ligne 255 : Ligne 273 :
value = {'style architectural', 'style'},
value = {'style architectural', 'style'},
wikidata = function ()
wikidata = function ()
local val = wd.formatAndCat{entity = item, property = 'P149'} or wd.formatAndCat{entity = item, property = 'P135'}
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 261 : Ligne 280 :
val = mw.ustring.gsub(val, "\|style ", "\|")
val = mw.ustring.gsub(val, "\|style ", "\|")
return val
return val
end
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 {
-- architect
type = 'multi',  
{ type = "row",
rows = {
label = localdata["titre architecte"] or "Architecte",
-- architect
value = "architecte",
{
wikidata = p.creatorQuery("P84"),
type = "row",
},
label = localdata["titre architecte"] or "Architecte",
-- ingénieur
value = "architecte",
{
wikidata = p.creatorQuery("P84"),
type = "row",
},
label = "Ingénieur",
-- ingénieur
value = "ingénieur",
{
wikidata =  p.creatorQuery("P631"),
type = "row",
},
label = "Ingénieur",
-- créateur (quand les autres noms ne conviennent pas)
value = "ingénieur",
{ type = "row",
wikidata =  p.creatorQuery("P631"),
label = "Créateur",
},
value = "créateur",
-- créateur (quand les autres noms ne conviennent pas)
-- ne pas utiliser Wikidata si le paramètre "architecte" est renseigné (risques de doublon)
{ type = "row",
wikidata = function() if (not localdata["architecte"]) then return wd.formatAndCat( p.creatorQuery("P170")) end end
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
end




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


Ligne 321 : Ligne 351 :
plurallabel = 'Matériaux',
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
end
Ligne 350 : Ligne 380 :
label = 'Statut patrimonial',
label = 'Statut patrimonial',
value = {'classement', 'protection'},
value = {'classement', 'protection'},
wikidata = require('Module:Classement').formattedList(item)
wikidata = require('Module:Classement').formattedList(localdata.item)
}
}
end
end

Version du 15 septembre 2016 à 03:22

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 reuqê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.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','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.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.equipment() return { type = 'row', label = 'Équipement', plurallabel = 'Équipements', value = {'équipement', 'équipements'}, property = 'P912', } 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