Mô đun:Geobox map

-- mô đun này thực hiện bản mẫu:geobox2 map

local getArgs = require('Mô đun:Arguments').getArgs
local data_module = "Mô đun:Geobox map/data"

local p = {}

local function rnd2(n)
return math.floor(n 100 + 0.5) / 100
end

local function aspect_ratio(s)
local f = mw.title.new(s).file
if f ~= nil and f ~= false then
return f['width'] / f['height']
else
return 1
end
end

-- Finds a parameter in a transclusion of .
local function coord2text(para,coord)
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 } }

local result = mw.text.split(mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]') or , '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then return error('Giá trị tọa độ hỏng', 2) end
return tonumber(result[1]) hemisphereMultipliers[para][result[2]]
end

function p.main(frame)
local tracking_cats =
local args = getArgs(frame)
local root = mw.html.create('div')
root:css('width', (args['width'] or '256') .. 'px')
:css('margin-left', 'auto')
:css('margin-right', 'auto')
local div = root:tag('div'):css('position', 'relative')
if args['background'] then
local im = '[[Tập tin:' .. args['background']
im = im .. '|' .. (args['width'] or '256') .. 'px'
if args['map'] then
im = im .. '|link='
else
im = im .. '|alt=' .. (args['alt'] or )
end
im = im .. '|' .. (args['caption'] or ) .. ']]'
div:tag('div')
:css('position', 'absolute')
:wikitext(im)
end
if args['map'] then
local im = '[[Tập tin:' .. args['map']
im = im .. '|' .. (args['width'] or '256') .. 'px'
im = im .. '|alt=' .. (args['alt'] or )
im = im .. '|' .. (args['caption'] or ) .. ']]'
div:tag('div')
:css('position', 'relative')
:wikitext(im)
end
if (args['x'] and args['y']) or (args['coordinates'] and args['locator']) then
local x, y = 0, 0
if (args['x'] and args['y']) then
x = tonumber(args['x'] or '0') or 0
y = tonumber(args['y'] or '0') or 0
elseif args['locator'] then
x = coord2text('longitude', args['coordinates'])
y = coord2text('latitude', args['coordinates'])
end
local lpct, tpct = 0, 0
if args['locator'] then
-- local tname = 'Geobox locator ' .. args['locator']
-- left = tonumber(frame:expandTemplate{title = tname, args = { 'left' }} or left) or left
-- right = tonumber(frame:expandTemplate{title = tname, args = { 'right' }} or right) or right
-- top = tonumber(frame:expandTemplate{title = tname, args = { 'top' }} or top) or top
-- bottom = tonumber(frame:expandTemplate{title = tname, args = { 'bottom' }} or bottom) or bottom
local all_maps = mw.loadData(data_module)
local locator = mw.ustring.gsub(args['locator'], "[_ ][_ ]", ' ')
local map_data = all_maps[locator]
if map_data and type(map_data) == 'table' then
tracking_cats = tracking_cats ..
left = map_data['left']
right = map_data['right']
top = map_data['top']
bottom = map_data['bottom']
lpct = rnd2( (x - left)/(right - left)100 )
tpct = rnd2( (top - y) / (top - bottom)100 )
else
tracking_cats = tracking_cats ..
end
else
local scale = aspect_ratio('Hình:' .. (args['map'] or ))
lpct = rnd2(x)
tpct = rnd2(yscale)
tracking_cats = tracking_cats .. '[[Thể loại:Trang sử dụng hộp địa lý có các tham số bản đồ định vị x và y|' .. (args['map'] or ) .. ']]'
end
div:tag('div')
:css('position', 'absolute')
:css('left', lpct .. '%')
:css('top', tpct .. '%')
:css('padding', '0')
:css('line-height', '0')
:tag('div')
:css('position', 'absolute')
:css('text-align', 'center')
:css('left', '-4px')
:css('top', '-4px')
:css('width', '8px')
:css('font-size', '8px')
:css('line-height', '0')
:wikitext()
end
if args['caption'] then
root:tag('div')
:css('padding-top', '0.4em')
:css('text-align', 'center')
:wikitext(args['caption'])
end
if args['table'] then
return '\n' .. tostring(root) .. tracking_cats .. '\n'
else
return tostring(root) .. tracking_cats
end
end

return p