Modul:Interaktivna karta: razlika između inačica

Izvor: Hrvatska internetska enciklopedija
Prijeđi na navigaciju Prijeđi na pretraživanje
mNema sažetka uređivanja
mNema sažetka uređivanja
 
Nisu prikazane 2 međuinačice
Redak 2: Redak 2:


function p.karta(frame)
function p.karta(frame)
     local parent = frame:getParent() or frame
    -- Dohvaćanje argumenata iz predloška ili direktnog poziva
     local args = parent.args or parent
     local args = frame:getParent().args
     if not args.lat then args = frame.args end -- fallback


     local width  = args.width or args.sirina or "100%"
     local width  = args.width or args.sirina or "600px"
     local height = args.height or args.visina or "400px"
     local height = args.height or args.visina or "400px"
     local lat    = tonumber(args.lator 45.8
     local lat    = args.lat or "45.81"
     local lon    = tonumber(args.lonor 15.9
     local lon    = args.lon or "15.98"
     local zoom  = tonumber(args.zoom) or 10
     local zoom  = args.zoom or "12"


  -- Dio unutar funkcije p.karta
     local markers = {}
     local markers = {}
     for k, v in pairs(args) do
     for i = 1, 10 do
         if type(k) == "string" and k:match("^marker") then
         local m = args["marker" .. i]
             local lat2, lon2 = v:match("([^,]+),([^,]+)")
        if m and m ~= "" then
             if lat2 and lon2 then
             -- marker1=45.8,15.9,Zagrebačka katedrala
                table.insert(markers, {tonumber(lat2), tonumber(lon2)})
             table.insert(markers, m)
            end
         end
         end
     end
     end


     local divId = "map_" .. math.random(1000000, 9999999)
    -- Generiranje unikatnog ID-a bez oslanjanja na math.random
    -- Koristimo mw.hash ili jednostavno fiksni string s unikatom
     local divId = "leaflet_map_" .. mw.ustring.sub(mw.hash.hashValue('md5', tostring(lat) .. tostring(lon)), 1, 8)


     local html = mw.html.create("div")
     local container = mw.html.create("div")
    html:attr("id", divId)
        :attr("id", divId)
        :addClass("leaflet-map")
         :css("width", width)
         :css("width", width)
         :css("height", height)
         :css("height", height)
        :css("background", "#eee") -- Dodano da vidiš okvir čak i ako karta zapne
        :attr("data-lat", lat)
        :attr("data-lon", lon)
        :attr("data-zoom", zoom)
        :attr("data-markers", table.concat(markers, ";"))


    local markerJs = {}
     return tostring(container)
    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
end


return p
return p

Posljednja izmjena od 15. travanj 2026. u 12:49

Dokumentacija modula
Modul koji pokreće {{Interaktivna karta}}, drugih imena {{Mapframe}} i {{Maplink}}.


local p = {}

function p.karta(frame)
    -- Dohvaćanje argumenata iz predloška ili direktnog poziva
    local args = frame:getParent().args
    if not args.lat then args = frame.args end -- fallback

    local width  = args.width or args.sirina or "600px"
    local height = args.height or args.visina or "400px"
    local lat    = args.lat or "45.81"
    local lon    = args.lon or "15.98"
    local zoom   = args.zoom or "12"

   -- Dio unutar funkcije p.karta
    local markers = {}
    for i = 1, 10 do
        local m = args["marker" .. i]
        if m and m ~= "" then
            -- marker1=45.8,15.9,Zagrebačka katedrala
            table.insert(markers, m)
        end
    end

    -- Generiranje unikatnog ID-a bez oslanjanja na math.random
    -- Koristimo mw.hash ili jednostavno fiksni string s unikatom
    local divId = "leaflet_map_" .. mw.ustring.sub(mw.hash.hashValue('md5', tostring(lat) .. tostring(lon)), 1, 8)

    local container = mw.html.create("div")
        :attr("id", divId)
        :addClass("leaflet-map")
        :css("width", width)
        :css("height", height)
        :css("background", "#eee") -- Dodano da vidiš okvir čak i ako karta zapne
        :attr("data-lat", lat)
        :attr("data-lon", lon)
        :attr("data-zoom", zoom)
        :attr("data-markers", table.concat(markers, ";"))

    return tostring(container)
end

return p