Module:LocationMap: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
| Line 19: | Line 19: | ||
local results = smw.getQueryResult(query) | local results = smw.getQueryResult(query) | ||
-- Build coordinates list | -- Build coordinates list with page titles for clickable markers | ||
local coordinates = {} | local coordinates = {} | ||
-- Add current location | -- Add current location (red marker) | ||
if hasCoordinates ~= '' then | if hasCoordinates ~= '' then | ||
table.insert(coordinates, hasCoordinates) | table.insert(coordinates, hasCoordinates .. '~' .. pageName .. '~~#ff0000') | ||
end | end | ||
-- Add child locations | -- Add child locations (blue markers) | ||
if results and results.results then | if results and results.results then | ||
for childPageName, data in pairs(results.results) do | for childPageName, data in pairs(results.results) do | ||
| Line 36: | Line 36: | ||
coords = coords.lat .. ',' .. coords.lon | coords = coords.lat .. ',' .. coords.lon | ||
end | end | ||
table.insert(coordinates, coords) | -- Format: coordinates~title~text~icon/color | ||
table.insert(coordinates, coords .. '~' .. childPageName .. '~~#0000ff') | |||
end | end | ||
end | end | ||
Revision as of 12:45, 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 ''
-- Get all child locations with page names
local query = {
string.format('[[Is Located In::%s]]', pageName),
'?Has Coordinates',
'mainlabel=-',
'limit=500'
}
local results = smw.getQueryResult(query)
-- Build coordinates list with page titles for clickable markers
local coordinates = {}
-- Add current location (red marker)
if hasCoordinates ~= '' then
table.insert(coordinates, hasCoordinates .. '~' .. pageName .. '~~#ff0000')
end
-- Add child locations (blue markers)
if results and results.results then
for childPageName, data in pairs(results.results) do
if data.printouts and data.printouts['Has Coordinates'] and data.printouts['Has Coordinates'][1] then
local coords = data.printouts['Has Coordinates'][1]
-- Handle if coords is a table or string
if type(coords) == 'table' then
coords = coords.lat .. ',' .. coords.lon
end
-- Format: coordinates~title~text~icon/color
table.insert(coordinates, coords .. '~' .. childPageName .. '~~#0000ff')
end
end
end
-- Build the display_map call
local coordString = ''
if #coordinates > 0 then
coordString = table.concat(coordinates, ';')
end
local mapParams = 'zoom=6|service=leaflet|height=250px'
if hasCoordinates ~= '' then
mapParams = mapParams .. '|center=' .. hasCoordinates
end
if hasGeoJson ~= '' then
mapParams = mapParams .. '|geojson=' .. hasGeoJson
end
if coordString ~= '' then
return frame:callParserFunction('#display_map', coordString, mapParams)
elseif hasGeoJson ~= '' then
return frame:callParserFunction('#display_map', 'geojson=' .. hasGeoJson, 'zoom=6|service=leaflet|height=250px')
else
return ''
end
end
return p