Module:Infobox/Fonctions/Bâtiment
< Module:Infobox | Fonctions
Révision datée du 7 mars 2015 à 07:01 par Zolo (discussion) (meilleure gestion des matériaux (pas de liens partout, et prépare les cas comme "huile sur toile", rationalisation de la fonction protection)
La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Bâtiment/doc
local p = {} local wikidatamod = require 'Module:Wikidata' local general = require 'Module:Infobox/Fonctions' local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation' --Titre 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 à illusmtrer Bâtiment divers' end return general.mainimage(cat, defaultimage) end function p.country(default) return coordfunctions.country(default) end function p.address() return nil end -- pour éviter un bug de tansitions, si vous lisez cela vous pouvez effacer la fonctions function p.historicalregion() return { type = 'row', -- pour les régions historiques, non adminstratives value = 'région', label = '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 = function(localdata, item) return localdata['subdivision'] or localdata['subdivision1']end, label = function(localdata, item) return localdata['intitulé subdivision'] or localdata['lien subdivision1'] or localdata['lien subdivision'] or 'Subdivision administrative' end }, { type = 'row', value = 'subdivision2', label = function(localdata, item) return localdata['intitulé subdivision2'] or localdata['lien subdivision2'] or 'Subdivision administrative' end }, { type = 'row', value = 'subdivision3', label = function(localdata, item) return localdata['intitulé subdivision3'] or localdata['lien subdivision3'] or 'Subdivision administrative' end }, { type = 'row', value = function(localdata, item) return localdata['commune'] or localdata['ville'] end, label = function(localdata, item) return localdata['intitulé commune'] or localdata['lien commune'] or 'Commune' end }, { type = 'row', value = 'quartier', label = function(localdata, item) return localdata['intitulé quartier'] or localdata['titre quartier'] or 'Quartier' end }, { type = 'row', value = 'adresse', label = 'Adresse', wikidata = function(item) return require('Module:Adresse').wikidataAddress(item) end, } } } end function p.coordinates(coordspecs) return coordfunctions.coordinates(coordspecs) end function p.website() return general.website() end function p.construction() return {type = 'multi', rows = { -- début construction (legacy infobox Stade) { type = 'mixed', label = 'Début de construction', value = 'début construction', }, -- construction { type = 'mixed', label = 'Date de construction', value = 'date de construction' or 'construction', wikidata = wikidatamod.getTheDate{property = 'P793', targetvalue = 'Q385378', addcat = true} or wikidatamod.formatAndCat{item = item, property = 'P571', showqualifiers = {'P518'}} }, -- ouverture { type = 'row', label = 'Ouverture', value = 'ouverture', --wikidata valeur de P793 ? }, -- inauguration { type = 'row', label = 'Inauguration', function(localdata, item) -- déactivé si le paramètre "ouverture" este renseigné : risques de doublon if localdata['ouverture'] then return nil end if localdata['inauguration'] then return localdata['inauguration'] end if item then return wikidatamod.getTheDate{property = 'P793', targetvalue = 'Q1417098', addcat = true, item=item} end end } } } end function p.closure() return {type = 'row', label = 'Fermeture', value = function(localdata, item) return wikidatamod.getTheDate{property = 'P793', targetvalue = 'Q14954904', addcat = true, item=item} end } end function p.operator() return {type = 'row', label = 'Gestionnaire', property = 'P137', value = function(localdata, item) return localdata['administration'] or localdata['gestionnaire'] end} end function p.transport() return { {type = 'table', title = 'Accès et transport', rows = { {type = 'row', label = 'Stationnement', value = 'stationnement'}, {type = 'row', label = 'Gare', value = 'gare'}, {type = 'row', label = 'Métro', value = 'métro'}, {type = 'row', label = 'Tramway', value = 'bus'}, {type = 'row', label = 'Autobus', value = 'gare'}, }, } } end function p.archistyle() return { type = 'row', label = 'Style architectural', value = function(localdata, item) return localdata['style architectural'] or localdata['style'] end, wikidata = function (item) return wikidatamod.formatAndCat{item = item, property = 'P149'} or wikidatamod.formatAndCat{item = item, property = 'P135'} 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 = function(localdata, item) return localdata['titre architecte'] or 'Architecte' end, value = 'architecte', wikidata = wikidatamod.formatAndCat{item = item, property = 'P84', showqualifiers = {'P518'}, showdate = true} }, -- ingénieur { type = 'row', label = 'Ingénieur', value = 'ingénieur', property = 'P631', }, -- créateur (quand les autres noms ne conviennent pas) { type = 'row', label = 'Créateur', value = function(localdata, item) if localdata['architecte'] then return nil end if localdata['créateur'] then return localdata['créateur'] end if item then return wikidatamod.formatAndCat{item = item, property = 'P170', showqualifiers = {'P518'}} end end }, } } end function p.owner() return { type = 'row', label = 'Propriétaire', value = 'propriétaire', property = 'P631' } end function p.material() return { type = 'row', label = 'Matériau', value = 'matériau', wikidata = function(item) -- affiche le matériau en fonction de Property:P186, et de son qualificatif s'applique à local linguistic = require('Module:Linguistique') local materials = wikidatamod.getClaims{item = item, property = 'P186'} if not materials then return nil end local mainvals = {} local supportvals = {} -- comme dans huile ''sur toile'' for i, j in pairs(materials) do local val = wikidatamod.formatSnak(j.mainsnak) local typ = 'main' -- changé en 'support' s'il faut la mettre sur supportstr if j.qualifiers and j.qualifiers.P518 then -- P518: "s'applique à " if wikidatamod.getRawvalue(j.qualifiers.P518[1]) == 'Q861259' then typ = 'support' else val = val ..linguistic.inparentheses(wikidatamod.formatSnak(j.qualifiers.P518[1], {link = '-'})) -- enlève le lien qui fait moche ici end end if typ == 'support' then table.insert(supportvals, val) else table.insert(mainvals, val) end local main = linguistic.conj(mainvals) or '' local support = linguistic.conj(supportvals) if support then return main .. ' sur ' .. support else return main end end end } end local function protectionline(localdata, item) local protmodule = mw.loadData('Module:Classement/Données') local claims = wikidatamod.getClaims({item=item, property = 'P1435', exludespecial = true}) if not claims then return nil end local statuses = {}-- nouvelle table pour ne pas afficher séparément deux statements décrivant le même statut for i, j in pairs(claims) do local pstatus = wikidatamod.getmainid(j) if not statuses[pstatus] then statuses[pstatus] = {j} else table.insert(statuses[pstatus], j) end end local stringtable = {} -- liste des chaînes à retourner for i, j in pairs(statuses) do local mainstr = '' if protmodule[i] then mainstr = protmodule[i][1] else mainstr = wikidatamod.formatEntity(i) end local logostr = '' if protmodule[i] and protmodule[i][2] then logostr = '[[File:' .. protmodule[i][2] .. '|x18px]] ' end local t = {} -- informations complémentaires sur les dates et les parties concernées for k, l in pairs(j) do local protectiondate = wikidatamod.getFormattedQualifiers(l, {'P580'}, {precision = 'year'}) if protectiondate then table.insert(t, protectiondate) end end local details = table.concat(t, ", ") if details ~= '' then details = ' <small>(' .. details .. ')</small>' else details = '' end table.insert(stringtable, logostr .. mainstr .. details) end return table.concat(stringtable, '<br />') .. '[[Catégorie:Page utilisant des données de Wikidata/P1435]]' end function p.protection(localdata, item) return { type = 'row', label = 'Protection', value = 'classement', wikidata = protectionline(locadata, item) } end function p.geoloc(params) return coordfunctions.geoloc(params) end return p