« Module:Infobox/Fonctions/Géolocalisation » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
enlève les fonctions test. Ajout d'un rétrolien vers Wikidata mais sur les très petits écrans, ça ajoute une ligne. Je réduirais volontiers la taille de l'affichage des coordonnées, mais ça risque de ne pas plaire :[es
0x010D (discussion | contributions)
option "defaultmaps"
 
(40 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
local coord = require('Module:Coordinates')
local localdata = require( 'Module:Infobox/Localdata' )
local wikidatamod = require('Module:Wikidata')
local item = localdata.item
local wd = require "Module:Interface Wikidata".fromLua
-- Modules chargés si necessaire :
-- local countrymodule = require "Module:Country data"
-- local coord = require "Module:Coordinates"
local p = {}
local p = {}


function p.country()
local function formatCountry(country)
if not country then
return nil
end
local countrymodule = require "Module:Country data"
local val, success = countrymodule.standarddisplay(country) -- val = nil si country n'est pas reconnu
if success then
return val
end
end


local p = {}
function p.country(country, label, flagdate, size) -- à faire : gestion des dates, mapping Wikidata/modèles, peut-être mettre une partie de la fonction dans un module séparé
return function(localdata, item)
if localdata['pays'] then -- priorité aux données locales
country =  localdata['pays']
end
local countrymodule = require('Module:Country data')
country = countrymodule.standarddisplay(country)
local wikidatacountry = wikidatamod.formatAndCat{
item = item,
property = 'P17',
displayformat = function(snak)
local id = 'Q' .. snak.datavalue.value['numeric-id']
local formattedval, success
if snak.snaktype == 'value' then
formattedval, success = countrymodule.standarddisplay(id)
end
if success then return
formattedval
else
return wikidatamod.formatSnak(snak)
end
end
}
return  {
return  {
type = 'mixed',
type = 'mixed',
label = 'Pays',
label = 'Pays',
value = function() return country end,
value = function() return formatCountry(localdata['pays']) or localdata['pays'] end,
wikidata = function() return wikidatacountry end
wikidata = {
property = 'P17',
conjtype = 'new line',
displayformat = function(snak)
local id = wd.getid(snak)  
return formatCountry(id) or wd.formatSnak(snak)
end
}
}
}
end
end
end


local function coordcore(moduleparams)
function p.coordvalue(moduleparams) -- valeurs des coordonnées, sans mise en infoboîte
local globe = moduleparams.globe
local coord = require "Module:Coordinates"
local displayinline = moduleparams.displayinline
if not moduleparams then
local displaytitle = moduleparams.displaytitle
moduleparams = {}
local displayformat = moduleparams.displayformat
end
if (not displaytitle and not distantitem) then displaytitle = 'title' end -- displayinline et displaytitle sont des chaînes à utiliser dans le paramètre "display" de coord
--distantitem veut dire que le sujet de l'infobox ne correspond pas au sujet de l'article
if not displayinline then displayinline = 'inline' end


return function(localdata, item)
local function toboolean(val) -- transforme un "-" en false au moment voulu
if val == '-' or val == 'non' then
-- vérifie qu'il faut afficher les coordonnées
return false
if localdata["géolocalisation"] == 'pas pertinent' or localdata['géolocalisation'] == 'non' and not (localdata['coordonnées'] == 'oui') then
end
return nil
return true
end
end
 
-- si paramètres donnés dans l'article, écrasent les autres
-- paramètres Wikidata
if localdata['format coordonnées'] then
local wikidata = tostring(toboolean(localdata['wikidata'] or true)) -- doit être string dans Module:Coordinates
displayformat = localdata['format coordonnées']
local maxdistance = moduleparams.maxdistance
local wikidataquery = moduleparams.wikidataquery or {property = 'P625'}
if not wikidataquery.entity then
wikidataquery.entity = item
end
end
-- paramètres d'affichage
local displayformat = localdata['format coordonnées'], moduleparams.displayformat
displaytitle = 'title'
local displayplace = ''
if localdata['infoboxrank'] == 'secondary' then
local displayinline = toboolean(localdata['coords en ligne'] or moduleparams.displayinline or true)
displaytitle = ''
-- par défaut : on met dans les coordonnées de l'infobox principale en titre
local displaytitle = localdata['coords en titre']
or moduleparams.displaytitle
or (localdata['infoboxrank'] == 'main')
if displayinline and (displayinline ~= '-') then
displayplace = displayplace .. 'inline'
end
end
if localdata['coords en titre'] == 'oui' then
if displaytitle and (displaytitle ~= '-'then
displaytitle = 'title'
displayplace = displayplace .. 'title,'
end
end
if localdata['coords en titre'] == 'non' or  localdata['coords en titre'] == '-' then
displaytitle = ''
-- données sur géograhiques
end
local globe = localdata['globe'] or localdata['planète'] or moduleparams['globe'] or 'earth'
if localdata['coords en en ligne'] == 'oui' then
displayinline = 'inline'
end
if localdata['coords en en ligne'] == 'non' or localdata['coords en en ligne'] == '-' then
displayinline = ''
end
local displayplace = displaytitle .. ',' .. displayinline
local latitude = localdata['latitude']
local latitude = localdata['latitude']
local longitude = localdata['longitude']
local longitude = localdata['longitude']
if localdata['globe'] then
 
globe = localdata['globe']
local parameterlist = {
latitude = latitude,
longitude = longitude,
displayformat = displayformat,
display= displayplace,
globe = globe,
wikidata = wikidata,
wikidataquery = wikidataquery,
maxdistance = maxdistance,
}
local val = coord._coord(parameterlist)
if (not val) and moduleparams.fallbackquery then -- si pas de valeur, essayer la query de sustitution
parameterlist.wikidataquery = moduleparams.fallbackquery
parameterlist.wikidataquery.entity = item
val = coord._coord(parameterlist)
end
end
local wikidata = localdata['wikidata'] or 'true'
local val = coord._coord({latitude = latitude, longitude = longitude, displayformat = displayformat, display= displayplace, globe = globe, wikidata =wikidata})
if val and latitude and longitude and localdata['référence géolocalisation'] then
if val and latitude and longitude and localdata['référence géolocalisation'] then
val = val .. ' ' .. localdata['référence géolocalisation']
val = val .. ' ' .. localdata['référence géolocalisation']
end
end
if val and not localdata['latitude'] then
if val and not localdata['latitude'] then
val = wikidatamod.addLinkback(val, item, 'P625')
val = wd.addLinkback(val, item, wikidataquery.property)
end
end
if displayinline == '' then
if displayinline == false then
return -- type: external text pour ne pas avoir de ligne vide en infobox
return -- type: external text pour ne pas avoir de ligne vide en infobox
{
{
type = 'external text',
type = 'external text',
maintenancecat = 'Page géolocalisable sans coordonnées paramétrées',
sortkey = sortkey,
sortkey = sortkey,
  value = val
  value = val
Ligne 98 : Ligne 108 :
  else  
  else  
  return val
  return val
end
  end
  end
end
end
function p.coordinates(moduleparams)
function p.coordinates(moduleparams)
if not moduleparams then
moduleparams = {}
end
-- paramètre coordonnées a la priorité sur "géolocalisation" (=carte)
local relevant = localdata['coordonnées'] or localdata['géolocalisation']
if relevant == '-' or relevant == 'non' then
return nil
end
-- initialise les paramètres avec les valeurs du module d'infobox (moduleparams)
-- initialise les paramètres avec les valeurs du module d'infobox (moduleparams)
if not moduleparams then moduleparams = {} end
return {
return {
type = 'mixed',
type = 'mixed',
label = 'Coordonnées',
label = 'Coordonnées',
maintenancecat = 'Page géolocalisable sans coordonnées paramétrées',
maintenancecat = moduleparams.maintenancecat or 'Page géolocalisable sans coordonnées paramétrées',
sortkey = sortkey,
sortkey = moduleparams.sortkey,
  value = coordcore(moduleparams)
  value = function (localdata) return p.coordvalue(moduleparams) end
}
}
end
end


function p.geoloc(maplist)
function p.geoloc(params)
 
if not params then
params = {}
end
if (localdata['géolocalisation'] == '-') or (localdata['géolocalisation'] == 'pas pertinent') then
return nil
end
return  {
return  {
type = 'map',
type = 'map',
latitude = 'latitude',
latitude = 'latitude',
class =  "infobox_v3",
longitude = 'longitude',
longitude = 'longitude',
wikidata = function(localdata, item) return wikidatamod.getClaims{item = item, property = 'P625'} end,
wikidata = {property = 'P625'},
maps = 'géolocalisation'
entity = item,
    }
maps = function() return localdata['géolocalisation'] or params.defaultmaps end, -- paramètre pour la liste des cartes à utiliser
staticmaps = 'carte', -- carte en mode image simple
staticmapsWD = {property = "P242", numval = 1}, -- p
pointtype = params.pointtype,
maptype = params.maptype,
globe = localdata.globe or localdata['planète'] or params.globe,
marker = params.marker,
default_zoom = params.default_zoom,
params = {guessmaps = params.guessmaps} -- = quelles cartes utiliser en l'absence de données fournies dans |gélocalisation
}
end
end
function p.locationmap(size)
return {
type = 'images',
imageparameters =  {'carte'},
sizeparameter = 'taille carte',
defaultsize = size,
property = 'P242',
numval = 1,
}
end
return p
return p

Dernière version du 25 mai 2017 à 18:46

local localdata = require( 'Module:Infobox/Localdata' ) local item = localdata.item local wd = require "Module:Interface Wikidata".fromLua -- Modules chargés si necessaire : -- local countrymodule = require "Module:Country data" -- local coord = require "Module:Coordinates" local p = {}

function p.country() local function formatCountry(country) if not country then return nil end local countrymodule = require "Module:Country data" local val, success = countrymodule.standarddisplay(country) -- val = nil si country n'est pas reconnu if success then return val end end

return { type = 'mixed', label = 'Pays', value = function() return formatCountry(localdata['pays']) or localdata['pays'] end, wikidata = { property = 'P17', conjtype = 'new line', displayformat = function(snak) local id = wd.getid(snak) return formatCountry(id) or wd.formatSnak(snak) end } } end

function p.coordvalue(moduleparams) -- valeurs des coordonnées, sans mise en infoboîte local coord = require "Module:Coordinates" if not moduleparams then moduleparams = {} end

local function toboolean(val) -- transforme un "-" en false au moment voulu if val == '-' or val == 'non' then return false end return true end

-- paramètres Wikidata local wikidata = tostring(toboolean(localdata['wikidata'] or true)) -- doit être string dans Module:Coordinates local maxdistance = moduleparams.maxdistance local wikidataquery = moduleparams.wikidataquery or {property = 'P625'} if not wikidataquery.entity then wikidataquery.entity = item end

-- paramètres d'affichage local displayformat = localdata['format coordonnées'], moduleparams.displayformat

local displayplace = local displayinline = toboolean(localdata['coords en ligne'] or moduleparams.displayinline or true) -- par défaut : on met dans les coordonnées de l'infobox principale en titre local displaytitle = localdata['coords en titre'] or moduleparams.displaytitle or (localdata['infoboxrank'] == 'main') if displayinline and (displayinline ~= '-') then displayplace = displayplace .. 'inline' end if displaytitle and (displaytitle ~= '-') then displayplace = displayplace .. 'title,' end

-- données sur géograhiques local globe = localdata['globe'] or localdata['planète'] or moduleparams['globe'] or 'earth' local latitude = localdata['latitude'] local longitude = localdata['longitude']

local parameterlist = { latitude = latitude, longitude = longitude, displayformat = displayformat, display= displayplace, globe = globe, wikidata = wikidata, wikidataquery = wikidataquery, maxdistance = maxdistance, }

local val = coord._coord(parameterlist) if (not val) and moduleparams.fallbackquery then -- si pas de valeur, essayer la query de sustitution parameterlist.wikidataquery = moduleparams.fallbackquery parameterlist.wikidataquery.entity = item val = coord._coord(parameterlist) end if val and latitude and longitude and localdata['référence géolocalisation'] then val = val .. ' ' .. localdata['référence géolocalisation'] end if val and not localdata['latitude'] then val = wd.addLinkback(val, item, wikidataquery.property) end if displayinline == false then return -- type: external text pour ne pas avoir de ligne vide en infobox { type = 'external text', sortkey = sortkey,

		value = val
		}
	else 
		return val
	end

end

function p.coordinates(moduleparams) if not moduleparams then moduleparams = {} end -- paramètre coordonnées a la priorité sur "géolocalisation" (=carte) local relevant = localdata['coordonnées'] or localdata['géolocalisation'] if relevant == '-' or relevant == 'non' then return nil end -- initialise les paramètres avec les valeurs du module d'infobox (moduleparams) return { type = 'mixed', label = 'Coordonnées', maintenancecat = moduleparams.maintenancecat or 'Page géolocalisable sans coordonnées paramétrées', sortkey = moduleparams.sortkey,

		value = function (localdata) return p.coordvalue(moduleparams) end
	}	

end

function p.geoloc(params)

if not params then params = {} end if (localdata['géolocalisation'] == '-') or (localdata['géolocalisation'] == 'pas pertinent') then return nil end

return { type = 'map', latitude = 'latitude', longitude = 'longitude', wikidata = {property = 'P625'}, entity = item, maps = function() return localdata['géolocalisation'] or params.defaultmaps end, -- paramètre pour la liste des cartes à utiliser staticmaps = 'carte', -- carte en mode image simple staticmapsWD = {property = "P242", numval = 1}, -- p pointtype = params.pointtype, maptype = params.maptype, globe = localdata.globe or localdata['planète'] or params.globe, marker = params.marker, default_zoom = params.default_zoom, params = {guessmaps = params.guessmaps} -- = quelles cartes utiliser en l'absence de données fournies dans |gélocalisation } end

function p.locationmap(size) return { type = 'images', imageparameters = {'carte'}, sizeparameter = 'taille carte', defaultsize = size, property = 'P242', numval = 1, } end

return p