Module:SaintMap

From Saintapedia
Jump to navigation Jump to search

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

local p = {}

function p.getMapData(frame)
    local saintName = frame.args.saintName or frame:getParent().args.saintName
    local result = {}
    local queries = {
        {field = 'SaintBirthCoordinates__full', label = 'SaintBirthPlace'},
        {field = 'SaintDeathCoordinates__full', label = 'DeathPlace', offset = true},
        {field = 'NotableCoordinates1__full', label = 'NotableLabel1'},
        {field = 'NotableCoordinates2__full', label = 'NotableLabel2'},
        {field = 'NotableCoordinates3__full', label = 'NotableLabel3'},
        {field = 'NotableCoordinates4__full', label = 'NotableLabel4'}
    }
    for _, q in ipairs(queries) do
        local query = '{{#cargo_query:tables=Saints|fields=' .. q.field .. '=Coordinates,' .. q.label .. '=Label|where=SaintName="' .. saintName .. '" AND ' .. q.field .. ' IS NOT NULL AND ' .. q.label .. ' IS NOT NULL|format=template|template=SaintMapPoint|default=}}'
        local queryResult = frame:preprocess(query)
        if queryResult and queryResult ~= '' then
            if q.offset then
                local lat, lon, label = queryResult:match('^(%-?%d+%.%d+),(%-?%d+%.%d+)~(.+)$')
                if lat and lon then
                    lat = tonumber(lat) + 0.0001
                    queryResult = string.format('%.6f,%.6f~%s', lat, tonumber(lon), label)
                end
            end
            table.insert(result, queryResult)
        end
    end
    return table.concat(result, ';')
end

return p