Module:LocationMap: Difference between revisions

From The Seven Sages of Rome
No edit summary
No edit summary
 
Line 9: Line 9:
     local hasGeoJson = frame.args.hasGeoJson or ''
     local hasGeoJson = frame.args.hasGeoJson or ''
      
      
     -- Start building the display_map query
     -- Build coordinates string
     local mapQuery = ''
     local coordParts = {}
      
      
     -- Add current location coordinates
     -- Add current location
     if hasCoordinates ~= '' then
     if hasCoordinates ~= '' then
         mapQuery = hasCoordinates
         table.insert(coordParts, hasCoordinates)
     end
     end
      
      
     -- Add child locations using inline query
     -- Query child locations
     local childQuery = string.format('[[Is Located In::%s]]', pageName)
     local queryString = '[[Is Located In::' .. pageName .. ']]|?Has Coordinates|limit=500'
    mapQuery = mapQuery .. '{{#ask:' .. childQuery .. '|?Has Coordinates|format=list|sep=;|propsep=;}}'
    local results = smw.ask(queryString)
      
      
     -- Build parameters
    if results then
     local params = 'zoom=6|service=leaflet|height=250px'
        for i, row in ipairs(results) do
            local coords = row['Has Coordinates']
            if coords and coords ~= '' then
                table.insert(coordParts, coords)
            end
        end
    end
   
     -- Build final map call
     local coordString = table.concat(coordParts, ';')
      
      
    -- Build all parameters as one string
    local allParams = coordString
     if hasCoordinates ~= '' then
     if hasCoordinates ~= '' then
         params = params .. '|center=' .. hasCoordinates
         allParams = allParams .. '|center=' .. hasCoordinates
     end
     end
   
     if hasGeoJson ~= '' then
     if hasGeoJson ~= '' then
         params = params .. '|geojson=' .. hasGeoJson
         allParams = allParams .. '|geojson=' .. hasGeoJson
     end
     end
    allParams = allParams .. '|zoom=6|service=leaflet|height=250px'
      
      
     -- Return the complete map call
     return frame:callParserFunction('#display_map', allParams)
    local result = '{{#display_map:' .. mapQuery .. '|' .. params .. '}}'
   
    return frame:preprocess(result)
end
end


return p
return p

Latest revision as of 12:47, 16 February 2026

Documentation for this module may be created at Module:LocationMap/doc

local p = {}

function p.displayMap(frame)
    local mw = require('mw')
    local smw = mw.smw or mw.ext.smw
    
    local pageName = frame.args.pageName or mw.title.getCurrentTitle().text
    local hasCoordinates = frame.args.hasCoordinates or ''
    local hasGeoJson = frame.args.hasGeoJson or ''
    
    -- Build coordinates string
    local coordParts = {}
    
    -- Add current location
    if hasCoordinates ~= '' then
        table.insert(coordParts, hasCoordinates)
    end
    
    -- Query child locations
    local queryString = '[[Is Located In::' .. pageName .. ']]|?Has Coordinates|limit=500'
    local results = smw.ask(queryString)
    
    if results then
        for i, row in ipairs(results) do
            local coords = row['Has Coordinates']
            if coords and coords ~= '' then
                table.insert(coordParts, coords)
            end
        end
    end
    
    -- Build final map call
    local coordString = table.concat(coordParts, ';')
    
    -- Build all parameters as one string
    local allParams = coordString
    if hasCoordinates ~= '' then
        allParams = allParams .. '|center=' .. hasCoordinates
    end
    if hasGeoJson ~= '' then
        allParams = allParams .. '|geojson=' .. hasGeoJson
    end
    allParams = allParams .. '|zoom=6|service=leaflet|height=250px'
    
    return frame:callParserFunction('#display_map', allParams)
end

return p