Mòdul:Location map/prova
Aparença
Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Aquesta plantilla utilitza una crida a un mòdul de tipus Lua, nom que li ve del llenguatge Lua que utilitza. Per tant, si volguéssiu modificar-la, abans hauríeu d'estar familiaritzats amb aquest llenguatge i les funcions de l'extensió Scribunto. Vegeu com fer proves de plantilles.
Aquesta plantilla utilitza el següent mòdul: |
Aquest mòdul utilitza TemplateStyles: |
Ús
[modifica]Aquest mòdul implementa les plantilles {{Location map/prova}} i {{Location map~/prova}}, i {{Location map+/prova}}. Consulteu les pàgines de plantilla per obtenir instruccions d'ús.
No copieu directament alguna modificació d'aquest mòdul de prova a la seva versió definitiva sense haver eliminat "/prova" de tot el codi d'aquest mòdul |
Categories de seguiment/manteniment
[modifica]- Categoria:Mapes amb possibles errors (0)
- Categoria:Mapes amb diferents precisions de longitud i latitud (0)
- Categoria:Mapes amb marques fora del mapa i paràmetres exteriors no establerts (11)
- Categoria:Mapes amb un nom que conté una barra vertical (0)
- Categoria:Mapes amb paràmetres eliminats (0)
- Categoria:Mapes amb graus, minuts o segons negatius (102)
- Seguiment d'un canvi (vegeu discussió): Categoria:Pàgines que utilitzen un mapa amb un signe de doble coixinet al títol (0)
-- Version 12/2021: --
-- With icons of different width/height: Correct adjustment of the position of the label.
-- Error messages refer to longitude and latitude: the ability to translate them into languages other than English.
-- New features:
-- * Label centered on a coordinate (and therefore without the mark), when position='center'.
-- * Rotated label centered on a coordinate (and therefore without the mark), when label_rotate=degree.
-- * When mark_bottom has a value then the bottom of the mark points to coordenates.
-- This is useful for some icons, such as this [[File:Bigcity red.png]].
-- * With wd_coord the coordinates are read from wikidata
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local WD = require('Module:Wikidades')
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error("S'ha d'especificar el nom de la definició del mapa a utilitzar ", 2)
end
local fn = 'Mòdul:Location map/data/' .. map
local moduletitle = mw.title.new(fn)
if not moduletitle then
error(string.format('%q no és un nom vàlid per a una definició de mapa', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData(fn)
return function(name, params)
if name == nil then
return fn
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error("No s'ha pogut trobar la definició del mapa especificat, ja que no es troba "..'"'.. fn .. '". Comproveu que el nom estigui escrit idènticament (majúscules, minúscules, diacrítics) al nom del mòdul existent. Altrament, penseu si en podeu fer una còpia a la Viquipèdia en català del corresponent mòdul de la Viquipèdia en anglès (si existeix), posant el nom en català', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
--longitude = { W = -1, w = -1, E = 1, e = 1 },
longitude = { W = -1, w = -1, E = 1, e = 1, O = -1, o = -1 }, --Catalan version
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local DN = { --NEW for correct translation
longitude = 'longitud',
latitude = 'latitud'
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('No es poden proporcionar graus decimals i GMS per la ' .. DN[direction], 2)
elseif minutes then
error('Només es poden proporcionar minuts amb graus GMS per la ' .. DN[direction], 2)
elseif seconds then
error('Només es poden proporcionar segons amb graus GMS per la ' .. DN[direction], 2)
elseif hemisphere then
error('Només es pot proporcionar un hemisferi amb graus GMS per la ' .. DN[direction], 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('El valor "' .. decimal .. '" per la ' .. DN[direction] .. ' no és vàlid', 2)
elseif seconds and not minutes then
error("S'han proveït segons per la " .. DN[direction] .. ' sense que també es proporcionin minuts', 2)
elseif not degrees then
if minutes then
error("S'han proveït minuts per la " .. DN[direction] .. ' sense que també es proporcionin graus', 2)
elseif hemisphere then
error("S'ha proveït un hemisferi per la " .. DN[direction] .. ' sense que també es proporcionin graus', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('El valor de graus "' .. degrees .. '" proveït per la ' .. DN[direction] .. ' no és vàlid', 2)
elseif minutes and not tonumber(minutes) then
error('El valor de minuts "' .. minutes .. '" proveït per la ' .. DN[direction] .. ' no és vàlid', 2)
elseif seconds and not tonumber(seconds) then
error('El valor de segons "' .. seconds .. '" proveït per la ' .. DN[direction] .. ' no és vàlid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error("L'hemisferi "..'"' .. hemisphere .. '" proveït per la ' .. DN[direction] .. ' no és vàlid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para, coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
else
lat, long = mw.ustring.match(coord, '<span class="latitude">([^<]+)</span>[, ]<span class="longitude">([^<]+)</span>')
if tonumber(lat) then
return tonumber(para == 'longitude' and long or lat)
end
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if tonumber(result[1]) and result[2] then
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
elseif para == 'longitude' then
result = mw.text.split(long or '', '[°]')
if result[2] == 'O' then result[2] = 'W' end
else
result = mw.text.split(lat or '', '[°]')
end
if result[1] and result[2] then
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
else
mw.log('Valor de coordenades mal format')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Valor de coordenades mal format', 2)
end
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief and map('image1') ~= '' then
return map('image1')
else
return map('image')
end
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Mòdul:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noviewer thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'tleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'tright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' està situat en ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Categoria:Pàgines que utilitzen un mapa amb un signe de doble coixinet al títol]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Mostra el mapa de ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log("S'ha eliminat el paràmetre caption_undefined utilitzat.")
local parent = frame:getParent()
if parent then
mw.log('El pare és ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Categoria:Mapes amb paràmetres eliminats|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log("S'ha eliminat el paràmetre utilitzat a la definició del mapa " .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Categoria:Mapes amb paràmetres eliminats|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Barra vertical utilitzada en el nom de la definició del mapa ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Categoria:Mapes amb un nom que conté una barra vertical]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv)
return mw.html.create('div')
:addClass('od')
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, mark_width, mark_height, mark_bottom, label, link, alt, title)
local top
if mark_bottom then
top = mark_height
else
top = round(mark_height/2)
end
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(mark_width / 2) .. 'px;top:-' ..top.. 'px')
:attr('title', title)
if mark_width ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s]]',
mark,
mark_width,
mark_height,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(frame, label, label_size, label_width, label_rotate, position, background, x, mark_width, mark_height, mark_bottom)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('font-size:' .. label_size .. '%;width:' .. label_width .. 'em')
local distance
if (position == 'top') or (position == 'bottom') then
if mark_bottom then
if position == 'top' then
distance = mark_height + 1
else
distance = 1
end
else
distance = round((mark_height/2) + 1)
end
elseif position ~= 'center' then
distance = round((mark_width/2) + 1)
end
if position == 'center' then -- specified center (only label!!)
builder:addClass('pv'):cssText('bottom:-0.5em;left:' .. (-label_width / 2) .. 'em')
--builder:addClass('pv'):cssText('bottom:'..2*(label_size/100)..'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if label_rotate ~= 0 then
builder:attr ('style', frame:expandTemplate {title='Transform-rotate', args={label_rotate}})
end
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~/prova'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('Terra', frame)
args[1] = 'Terra'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.wd_coord then
longitude = WD.claim{item=args.wd_coord, property='P625', formatting='longitude', list=false, editicon=false}
latitude = WD.claim{item=args.wd_coord, property='P625', formatting='latitude', list=false, editicon=false}
elseif args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Les coordenades del [[Mòdul:Coordinates]] i les coordenades individuals no es poden proporcionar alhora')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Categoria:Mapes amb marcadors enllaçats amb coordenades de Wikidata]]')
end
end
if not longitude then
error("No s'ha proporcionat cap valor per a la longitud")
elseif not latitude then
error("No s'ha proporcionat cap valor per a la latitud")
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Categoria:Mapes amb diferents precisions de longitud i latitud|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Categoria:Mapes amb diferents precisions de longitud i latitud|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Categoria:Mapes amb diferents precisions de longitud i latitud|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Categoria:Mapes amb diferents precisions de longitud i latitud|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Categoria:Mapes amb diferents precisions de longitud i latitud|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Categoria:Mapes amb graus, minuts o segons negatius]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Categoria:Mapes amb graus, minuts o segons negatius]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Categoria:Mapes amb graus, minuts o segons negatius]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Categoria:Mapes amb graus, minuts o segons negatius]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log("S'ha eliminat el paràmetre utilitzat en la invocació.")
local parent = frame:getParent()
if parent then
mw.log('El pare és ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Categoria:Mapes amb paràmetres eliminats|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Marca col·locada fora dels límits del mapa sense establir una bandera exterior. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Categoria:Mapes amb marques fora del mapa i paràmetres exteriors no establerts|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize
local mark_bottom = args.mark_bottom
if args.label_rotate then
args.position = 'center'
end
if args.position == 'center' then
marksize = 0
else
local default_size
if mark_bottom then
default_size = 24
else
default_size = 8
end
marksize = tonumber(args.marksize) or tonumber(map('marksize')) or default_size
end
local mark_width
local mark_height
if marksize == 0 then
mark_width = 0
mark_height = 0
else
local title_obj = mw.title.makeTitle('File', mark)
local width = title_obj.file.width
local height = title_obj.file.height
if width == height then
mark_width = marksize
mark_height = marksize
elseif width > height then
mark_width = marksize
mark_height = round (marksize * (height/width))
else
mark_width = round (marksize * (width/height))
mark_height = marksize
end
end
local imageDiv = markImageDiv(mark, mark_width, mark_height, mark_bottom, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(frame, args.label, args.label_size or 91, args.label_width or 6, args.label_rotate or 0, args.position, args.background,
x, mark_width, mark_height, mark_bottom)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv))
end
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.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map/prova', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), 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 = p.getMapParams('Terra', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format("S'han proporcionat %d AlternativeMaps, però només es van proporcionar %d mapes", #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format("S'han proporcionat %d overlay_images, però només es van proporcionar %d mapes", #overlays, #map))
end
if #caption_list > #map then
error(string.format("S'han proporcionat %d captions, però només es van proporcionar %d mapes", #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]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p