Modul:Interaktivna karta
Dokumentacija modula
local p = {}
function p.karta(frame)
local parent = frame:getParent() or frame
local args = parent.args or parent
local width = args.width or args.sirina or "100%"
local height = args.height or args.visina or "400px"
local lat = tonumber(args.lat) or 45.8
local lon = tonumber(args.lon) or 15.9
local zoom = tonumber(args.zoom) or 10
local markers = {}
for k, v in pairs(args) do
if type(k) == "string" and k:match("^marker") then
local lat2, lon2 = v:match("([^,]+),([^,]+)")
if lat2 and lon2 then
table.insert(markers, {tonumber(lat2), tonumber(lon2)})
end
end
end
local divId = "map_" .. math.random(1000000, 9999999)
local html = mw.html.create("div")
html:attr("id", divId)
:css("width", width)
:css("height", height)
local markerJs = {}
for _, m in ipairs(markers) do
table.insert(markerJs, string.format(
"L.marker([%f, %f]).addTo(map);",
m[1], m[2]
))
end
local script = mw.getCurrentFrame():extensionTag(
'script',
string.format([[
(function() {
if (typeof L === 'undefined') return;
var map = L.map('%s').setView([%f, %f], %d);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap'
}).addTo(map);
%s
})();
]], divId, lat, lon, zoom, table.concat(markerJs, "\n"))
)
return tostring(html) .. tostring(script)
end
return p