Module:Infobox/Fonctions/Géolocalisation : Différence entre versions
< Module:Infobox | Fonctions
(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) |
(option "defaultmaps") |
||
(40 révisions intermédiaires par 5 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | local | + | local localdata = require( 'Module:Infobox/Localdata' ) |
− | local | + | 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 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
return { | return { | ||
type = 'mixed', | type = 'mixed', | ||
label = 'Pays', | label = 'Pays', | ||
− | value = function() return | + | value = function() return formatCountry(localdata['pays']) or localdata['pays'] end, |
− | wikidata = function() return | + | wikidata = { |
+ | property = 'P17', | ||
+ | conjtype = 'new line', | ||
+ | displayformat = function(snak) | ||
+ | local id = wd.getid(snak) | ||
+ | return formatCountry(id) or wd.formatSnak(snak) | ||
+ | end | ||
+ | } | ||
} | } | ||
− | |||
end | end | ||
− | + | function p.coordvalue(moduleparams) -- valeurs des coordonnées, sans mise en infoboîte | |
− | local | + | 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 | + | return true |
end | 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 | end | ||
+ | |||
+ | -- paramètres d'affichage | ||
+ | local displayformat = localdata['format coordonnées'], moduleparams.displayformat | ||
− | displaytitle = ' | + | 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 | end | ||
− | if | + | if displaytitle and (displaytitle ~= '-') then |
− | + | displayplace = displayplace .. 'title,' | |
end | end | ||
− | + | ||
− | + | -- données sur géograhiques | |
− | + | local globe = localdata['globe'] or localdata['planète'] or moduleparams['globe'] or 'earth' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
local latitude = localdata['latitude'] | local latitude = localdata['latitude'] | ||
local longitude = localdata['longitude'] | local longitude = localdata['longitude'] | ||
− | if | + | |
− | + | 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 | ||
− | |||
− | |||
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 = | + | val = wd.addLinkback(val, item, wikidataquery.property) |
end | end | ||
− | if displayinline == | + | 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', | ||
− | |||
sortkey = sortkey, | sortkey = sortkey, | ||
value = val | value = val | ||
Ligne 98 : | Ligne 108 : | ||
else | else | ||
return val | return val | ||
− | |||
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) | ||
− | |||
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 = | + | value = function (localdata) return p.coordvalue(moduleparams) end |
− | + | } | |
end | end | ||
− | function p.geoloc( | + | 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', | ||
− | |||
longitude = 'longitude', | longitude = 'longitude', | ||
− | wikidata = function( | + | 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 | end | ||
+ | |||
+ | function p.locationmap(size) | ||
+ | return { | ||
+ | type = 'images', | ||
+ | imageparameters = {'carte'}, | ||
+ | sizeparameter = 'taille carte', | ||
+ | defaultsize = size, | ||
+ | property = 'P242', | ||
+ | numval = 1, | ||
+ | } | ||
+ | end | ||
+ | |||
return p | return p |
Version actuelle datée du 25 mai 2017 à 18:46
La documentation pour ce module peut être créée à Module:Infobox/Fonctions/Géolocalisation/doc
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