Since the introduction of support for different captions when multiple maps are utilized, an issue has been highlighted.
Some infobox templates use their caption parameter directly instead of passing it to this module. This results in the display of a "##" between the two captions.
If you are unable to edit the infobox template, contact Bellezzasolo.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, digits)
local mult = math.pow(10, digits)
return math.floor(n * mult + 0.5) / mult
end
local function decdeg(degrees, minutes, seconds, hemisphere, digits, decimal)
if decimal ~= nil then
return tonumber(decimal)
end
decimal = (degrees or 0) + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere == 'W' or hemisphere == 'w' or hemisphere == 'S' or hemisphere == 's' then
decimal = -decimal
end
if digits == nil then
digits = 7
end
return round(decimal, digits)
end
function p.tilde(frame) -- {{location map~}}
local args = getArgs(frame)
local retval = '<div style="position: absolute; top: '
local map_template = 'Location map ' .. args[1]
local map_y = frame:expandTemplate{title = map_template, args = { 'y' }}
if map_y and map_y ~= '' then
retval = retval .. frame:callParserFunction('#expr', frame:expandTemplate{title = map_template, args = { 'y', decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat), decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) }})
else
local map_top = frame:expandTemplate{title = map_template, args = { 'top' }}
local map_bottom = frame:expandTemplate{title = map_template, args = { 'bottom' }}
retval = retval .. round(100 * (map_top - decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat) ) / (map_top - map_bottom), 1)
end
retval = retval .. '%; left: '
local map_x = frame:expandTemplate{title = map_template, args = { 'x' }}
local x
if map_x and map_x ~= '' then
x = frame:callParserFunction('#expr', frame:expandTemplate{title = map_template, args = { 'x', decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat), decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) }})
else
local map_crosses180 = frame:expandTemplate{title = map_template, args = { 'crosses180' }}
local map_left = frame:expandTemplate{title = map_template, args = { 'left' }}
local map_right = frame:expandTemplate{title = map_template, args = { 'right' }}
local crosses180_correction = map_crosses180 and map_crosses180 ~= '' and args.lon_dir == 'W' and (-36000/(map_left - map_right)) or 0
x = round(crosses180_correction + 100 * (decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) - map_left) / (map_right - map_left), 1)
end
retval = retval .. x .. '%; height: 0; width: 0; margin: 0; padding: 0;"><div style="position: relative; text-align: center; '
local marksize = tonumber(args.marksize) or tonumber(frame:expandTemplate{title = map_template, args = { 'marksize' }}) or 8
retval = retval .. 'left: -' .. round(marksize / 2, 0) .. 'px; top: -' .. round(marksize / 2, 0) .. 'px; width: ' .. marksize .. 'px; font-size: ' .. marksize .. 'px; line-height:0;'
retval = retval .. '" title="' .. (args[2] or '') .. '">'
local mark = args.mark or frame:expandTemplate{title = map_template, args = { 'mark' }}
if mark == '' then mark = 'Red pog.svg' end
retval = retval .. '[[File:' .. mark .. '|' .. marksize .. 'x' .. marksize .. 'px|' .. (args.label or mw.title.getCurrentTitle().text) .. '|link=' .. (args.link or '') .. '|alt=' .. (args.alt or '') .. ']]'
retval = retval .. '</div>'
if args.position ~= 'none' then
retval = retval .. '<div style="font-size: ' .. (args.label_size or 90) .. '%; line-height: 110%; position: relative; top: -1.5em; width: ' .. (args.label_width or 6) .. 'em; '
if args.position == 'left' then
retval = retval .. 'left: -6.5em; text-align: right;'
elseif args.position == 'right' then
retval = retval .. 'left: 0.5em; text-align: left;'
elseif args.position == 'top' then
retval = retval .. 'top:-2.65em; left:-3em; text-align: center;'
elseif args.position == 'bottom' then
retval = retval .. 'top:-0.15em; left: -3em; text-align: center;'
elseif tonumber(x) > 70 then
retval = retval .. 'left: -6.5em; text-align: right;'
else
retval = retval .. 'left: 0.5em; text-align: left;'
end
retval = retval .. '"><span style="padding: 1px; '
if args.background then
retval = retval .. 'background-color: ' .. args.background .. ';'
end
retval = retval .. '">' .. (args.label or '') .. '</span></div>'
end
retval = retval .. '</div>'
return retval
end
return p