Module:Location map/multi: Difference between revisions
Appearance
add label_width |
Courcelles (talk | contribs) m Changed protection level for "Module:Location map/multi": High-risk Lua module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) |
(No difference)
|
Revision as of 04:59, 15 January 2018
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This Lua module is used on approximately 33,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
Usage
This module implements the {{Location map+}} and {{Location map many}} templates. Please see the template pages for usage instructions.
![]() | This section may require cleanup to meet Wikipedia's quality standards. The specific problem is: The load() function is used on its own. We should document it. Please help improve this section if you can; the talk page may contain suggestions. |
Tracking/maintenance category
require('Module:No globals')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local locmap = require('Module:Location map')
function p.container(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc})
end
if not map then
map = locmap.getMapParams(args[1], frame)
end
return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map)
end
local function manyMakeArgs(fullArgs, n)
if n == 1 then
return {
lat = fullArgs.lat1 or fullArgs.lat,
long = fullArgs.long1 or fullArgs.long,
coordinates = fullArgs.coordinates1 or fullArgs.coordinates,
lat_deg = fullArgs.lat1_deg or fullArgs.lat_deg,
lat_min = fullArgs.lat1_min or fullArgs.lat_min,
lat_sec = fullArgs.lat1_sec or fullArgs.lat_sec,
lat_dir = fullArgs.lat1_dir or fullArgs.lat_dir,
lon_deg = fullArgs.lon1_deg or fullArgs.lon_deg,
lon_min = fullArgs.lon1_min or fullArgs.lon_min,
lon_sec = fullArgs.lon1_sec or fullArgs.lon_sec,
lon_dir = fullArgs.lon1_dir or fullArgs.lon_dir,
outside = fullArgs.outside1 or fullArgs.outside,
mark = fullArgs.mark1 or fullArgs.mark,
marksize = fullArgs.mark1size or fullArgs.marksize,
link = fullArgs.link1 or fullArgs.link,
label = fullArgs.label1 or fullArgs.label,
label_size = fullArgs.label1_size or fullArgs.label_size,
label_width = fullArgs.label1_width or fullArgs.label_width,
position = fullArgs.position1 or fullArgs.pos1 or fullArgs.position or fullArgs.pos,
background = fullArgs.background1 or fullArgs.bg1 or fullArgs.background or fullArgs.bg
}
else
return {
lat = fullArgs['lat' .. n],
long = fullArgs['long' .. n],
coordinates = fullArgs['coordinates' .. n],
lat_deg = fullArgs['lat' .. n .. '_deg'],
lat_min = fullArgs['lat' .. n .. '_min'],
lat_sec = fullArgs['lat' .. n .. '_sec'],
lat_dir = fullArgs['lat' .. n .. '_dir'],
lon_deg = fullArgs['lon' .. n .. '_deg'],
lon_min = fullArgs['lon' .. n .. '_min'],
lon_sec = fullArgs['lon' .. n .. '_sec'],
lon_dir = fullArgs['lon' .. n .. '_dir'],
outside = fullArgs['outside' .. n],
mark = fullArgs['mark' .. n],
marksize = fullArgs['mark' .. n .. 'size'],
link = fullArgs['link' .. n],
label = fullArgs['label' .. n],
label_size = fullArgs['label' .. n .. '_size'],
label_width = fullArgs['label' .. n .. '_width'],
position = fullArgs['position' .. n] or fullArgs['pos' .. n],
background = fullArgs['background' .. n] or fullArgs['bg' .. n]
}
end
end
function p.many(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map many', valueFunc = locmap.valueFunc})
end
if not args[1] then
args[1] = 'World'
end
if not map then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.many(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
local markhigh
if args.markhigh then
mw.log('Removed parameter markhigh used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
for k, v in pairs(args) do -- @todo change to uargs once we have that
if v then
if string.sub(k, -4) == '_deg' then
k = string.sub(k, 1, -5)
end
if string.sub(k, 1, 3) == 'lat' then
k = tonumber(string.sub(k, 4))
if k then
table.insert(marks, k)
end
elseif string.sub(k, 1, 11) == 'coordinates' then
k = tonumber(string.sub(k, 12))
if k then
table.insert(marks,k)
end
end
end
end
table.sort(marks)
if marks[1] ~= 1 and (args.lat or args.lat_deg or args.coordinates) then
table.insert(marks, 1, 1)
end
local body = ''
for _, v in ipairs(marks) do
-- don't try to consolidate this into the above loop. ordering of elements from pairs() is unspecified
body = body .. tostring( locmap.mark(frame, manyMakeArgs(args, v), map) )
if args['mark' .. v .. 'high'] then
mw.log('Removed parameter mark' .. v .. 'high used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
end
args.label = nil -- there is no global label
return locmap.top(frame, args, map) .. body .. locmap.bottom(frame, args, map) .. (markhigh and '[[Category:Location maps with possible errors|Page using removed parameter]]' or '')
end
function p.load(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
local dataModule = mw.loadData(frame.args[1])
if not map then
map = {}
for mapname in string.gmatch(dataModule.containerArgs[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.load(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
if dataModule.marks then
for k,markArgs in ipairs(dataModule.marks) do
marks[k] = tostring(locmap.mark(frame, markArgs, map))
end
end
if dataModule.secondaryModules then
for _,modname in ipairs(dataModule.secondaryModules) do
for _,markArgs in ipairs(mw.loadData(modname).marks) do
marks[#marks + 1] = tostring(locmap.mark(frame, markArgs, map))
end
end
end
return locmap.top(frame, dataModule.containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, dataModule.containerArgs, map)
end
return p