Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Usage  





2 Tracking/maintenance category  














Module:Location map/multi






Afrikaans
Аԥсшәа
العربية
Asturianu
Авар
Azərbaycanca
تۆرکجه
Basa Bali

 / Bân-lâm-gú
Беларуская

Bikol Central
Bosanski
Буряад
Català
Чӑвашла
Cebuano
Chamoru
Chi-Chewa
Dansk
الدارجة
Ελληνικά
Euskara
فارسی
Føroyskt
Gaeilge


Hausa
Հայերեն
ि
Hrvatski
Ilokano
Bahasa Indonesia
Íslenska
עברית


Kurdî
Latviešu
Magyar
Madhurâ
ि
Македонски


مصرى

Bahasa Melayu
Mirandés
Мокшень
Монгол



Nordfriisk
Norsk bokmål


پښتو
Português
Română
Scots
Shqip

Simple English
سنڌي
Slovenščina
کوردی
Српски / srpski
Suomi
Tagalog
ி
 


Türkçe
Türkmençe
Українська
اردو
Tiếng Vit


 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Meta-Wiki
Wikiversity
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 

< Module:Location map

Usage

This module implements the {{Location map+}} and {{Location map many}} templates. Please see the template pages for usage instructions.

Tracking/maintenance category

require('strict')

local p = {}

local getArgs = require('Module:Arguments').getArgs
local locmap = require('Module:Location map')

local function switcherSeparate(s)
 if s == nil then return {} end
 local retval = {}
 for i in string.gmatch(s .. '#', '([^#]*)#') do
  i = mw.text.trim(i)
  retval[#retval + 1] = (i ~= '' and i)
 end
 return retval
end

function p.container(frame, args, map)
 local caption_list = {}
 if not args then
  args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc})
 end
 if not map then
  if args[1] then
   map = {}
   for mapname in string.gmatch(args[1], '[^#]+') do
    map[#map + 1] = locmap.getMapParams(mapname, frame)
   end
   if args['caption'] then
    if args['caption'] == "" then
     while #caption_list < #map do
      caption_list[#caption_list + 1] = args['caption']
     end
    else
     for caption in mw.text.gsplit(args['caption'], '##', true) do
      caption_list[#caption_list + 1] = caption
     end
    end
   end
   if #map == 1 then map = map[1] end
  else
   map = locmap.getMapParams('World', frame)
  end
 end
 if type(map) == 'table' then
  local placeslist = mw.text.gsplit(args.places, '#PlaceList#')
  local permaplaces = {}
  local numbermaps = #map
  local count = 0
  for i = 1,numbermaps do
   permaplaces[i] = {}
  end
  for place in placeslist do
   table.insert(permaplaces[count%numbermaps + 1],place)
   count = count + 1
  end
  local altmaps = switcherSeparate(args.AlternativeMap)
  if #altmaps > #map then
   error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
  end
  local overlays = switcherSeparate(args.overlay_image)
  if #overlays > #map then
   error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
  end
  if #caption_list > #map then
   error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
  end
  local outputs = {}
  args.autoSwitcherLabel = true
  for k,v in ipairs(map) do
   args.AlternativeMap = altmaps[k]
   args.overlay_image = overlays[k]
   args.caption = caption_list[k]
   args.places = table.concat(permaplaces[k])
   outputs[k] = p.container(frame, args, v)
  end
  return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
 else
  return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map)
 end
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(args[1])
 local containerArgs = dataModule.containerArgs
 if not map then
  map = {}
  for mapname in string.gmatch(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
 if args.autoSwitcherLabel then
  local TableTools = require('Module:TableTools')
  containerArgs = TableTools.shallowClone(containerArgs)
  containerArgs.autoSwitcherLabel = true
 end
 return locmap.top(frame, containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, containerArgs, map)
end

return p

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Location_map/multi&oldid=1221454946"

Categories: 
Modules subject to page protection
Modules that add a tracking category
Hidden category: 
Wikipedia template-protected modules
 



This page was last edited on 30 April 2024, at 01:22 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki