Modulo:Mapframe: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m uniformati apici
utilizzo della funzione "error", +categoria per errori, possibilità di essere usata da altro modulo
Riga 1:
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local errorCategory = '[[Categoria:Voci con errori del modulo Mapframe]]'
 
local p = {}
 
-- Error handler per xpcall, formatta l'errore.
local function errhandler(msg)
local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''
return string.format('<prespan class="error">%s\n\n%s</prespan>%s', mdebugmsg, m_daticat)
end
 
local function agg(t, ...)
Riga 11 ⟶ 18:
end
 
function p.mappa_mappa(frameargs)
local args = getArgs(frame)
local err = '-'
local points = {}
local geo = args.dati or -1
Riga 36 ⟶ 41:
if (points[num].simb == '-number' and gruppo ~= '') then points[num].simb = '-number-' .. gruppo end
if (points[num].lat > 85 or points[num].lat < -85) then
err = error(string.format('latitudine non valida per il punto %d', num), 2)
elseif (points[num].lon > 180 or points[num].lon<-180) then
err = error(string.format('longitudine non valida per il punto %d', num), 2)
else
lat1 = math.min(lat1, points[num].lat)
Riga 49 ⟶ 54:
end
 
local errm_args = '-'{}
if err == '-' then
local m_args.width = {}args.larghezza or 350
m_args.widthheight = args.larghezzaaltezza or 350300
m_args.heightalign = args.altezzaallinea or 300'right'
m_args.align = args.allinea or 'right'
if cornice ~= 1 then m_args.frameless = 1 end
if cornice ~= 1 then m_args.frameless = 1 end
 
if args.zoom then
m_args.zoom = tonumber(args.zoom)
elseif (geo == -1 and autozoom == 's') then
local dx = 1.1 * (lon2 - lon1) / 360
local dy = 1.1 * (math.log(math.tan(math.pi * (1 + lat2 / 90) / 4)) - math.log(math.tan( math.pi * (1 + lat1 / 90) / 4))) / (2 * math.pi)
 
local scalax, scalay
if dx == 0 then scalax = 18 else scalax = math.floor(-math.log(dx) / math.log(2)) end
if dy == 0 then scalay = 18 else scalay = math.floor(-math.log(dy) / math.log(2)) end
if (dx == 0 and dy == 0) then
m_args.zoom = 10 -- valore default per singolo punto
else
m_args.zoom = math.max(0, math.min(18, scalax, scalay))
end
end
end
 
if cornice == 1 and args.didascalia then m_args.text = args.didascalia end
 
if args.centro_lon then
m_args.longitude = tonumber(args.centro_lon)
elseif geo == -1 then
m_args.longitude = (lon1 + lon2) / 2
end
 
if args.centro_lat then
m_args.latitude = tonumber(args.centro_lat)
elseif (geo == -1) then
local l1 = 1 - math.log(math.tan(math.pi * (1 + lat1 / 90) / 4)) / math.pi
local l2 = 1 - math.log(math.tan(math.pi * (1 + lat2 / 90) / 4)) / math.pi
local centroy = (l1 + l2) / 2
centroy = (math.atan(math.exp(math.pi * (1 - centroy))) - math.pi / 4) * 360 / math.pi
m_args.latitude = centroy
end
 
local m_dati
if geo == -1 then
m_dati = { type = 'FeatureCollection', features = {} }
for i = 1, #points do
m_dati.features[i] = {
type = 'Feature',
properties = {},
geometry = {
type = 'Point',
coordinates = { points[i].lon, points[i].lat }
}
}
}
m_dati.features[i].properties['marker-symbol'] = points[i].simb
m_dati.features[i].properties['marker-colorsymbol'] = points[i].colsimb
m_dati.features[i].properties.title['marker-color'] = points[i].nomecol
m_dati.features[i].properties['marker-symbol'].title = points[i].simbnome
end
m_dati = mw.text.jsonEncode(m_dati)
else
m_dati = frame:preprocess(geo)
end
if args.debug then
local mdebug = mw.text.jsonEncode(m_args)
return string.format('<pre>%s\n\n%s</pre>', mdebug, m_dati)
else
return mw.getCurrentFrame():extensionTag('mapframe', m_dati, m_args)
end
m_dati = mw.text.jsonEncode(m_dati)
else
m_dati = frame:preprocess(geo)
return err
end
 
if err == '-'args.debug then
local mdebug = mw.text.jsonEncode(m_args)
return string.format('<pre>%s\n\n%s</pre>', mdebug, m_dati)
else
return mw.getCurrentFrame():extensionTag('mapframe', m_dati, m_args)
end
end
 
-- Funzione per il template {{Mapframe}}.
function p.mappa(frame)
return select(2, xpcall(function()
return p._mappa(getArgs(frame, { parentOnly = true }))
end, errhandler))
end