Modül:Konum haritası
Görünüm
Bu modül şu Lua modüllerini kullanıyor: |
Çok fazla sayfada kullanılan bu modül korumaya alınmıştır. Vandalizm veya istem dışı hatalar pek çok sayfayı etkileyeceğinden ve en ufak düzenleme bile sunuculara önemli bir yük bindirebileceğinden korumaya tabidir. |
Bu Lua modülü yaklaşık 578.000 sayfada kullanılmaktadır. Lütfen yapacağınız değişiklikleri büyük ölçekli aksamaları ve sunucuya gereksiz yük binmesini önlemek için öncelikle şablonun deneme tahtası ile test senaryosu alt sayfalarında ya da kendi kullanıcı sayfanızda test ediniz. Testten geçen değişiklikler daha sonra bu sayfaya tek bir düzenlemede eklenebilir. Eğer yapmayı planladığınız değişiklikler ile istediğiniz sonucu elde edemiyorsanız tartışma sayfasında görüş alışverişinde bulununuz. |
Kullanımı
Bu modül {{Konum haritası}} ve {{Konum haritası~}} şablonlarını çalıştırır. Kullanım talimatları için lütfen şablonların belgelemelerine bakın.
İzleme/bakım kategorileri
Tüm haritalar
Ayrıca bakınız
require('Modül:Küresel değil')
local p = {}
local getArgs = require('Modül:Bağımsız değişkenler').getArgs
local ulkeler = require("Modül:Ülkeler").ulkeler
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getTurkishParams(args)
--Türkçe parametreleri tanıtalım
args.width = args['genişlik'] or args.width
args.default_width = args['varsayılan_genişlik'] or args.default_width
args.float = args['pozisyon'] or args.float
args.border = args['kontur'] or args.border
args.caption = args['altyazı'] or args.caption
args.relief = args['rölyef'] or args.relief
args.AlternativeMap = args['alternatif_harita'] or args.AlternativeMap
args.overlay_image = args['bindirilen_resim'] or args.overlay_image
args.label = args['etiket'] or args['etiket1'] or args.label
args.label_size = args['etiket_boyutu'] or args['etiket1_boyutu'] or args.label_size
args.label_width = args['etiket_genişlik'] or args['etiket1_genişlik'] or args.label_width
args.position = args['etiket_konumu'] or args['etiket1_konumu'] or args.position
args.background = args['arkaplan'] or args['arkaplan1'] or args.background
args.mark = args['işaret'] or args['işaret1'] or args.mark
args.marksize = args['işaret_boyutu'] or args['işaret1_boyutu'] or args.marksize
args.link = args['bağ'] or args['bağ1'] or args.link
args.lat = args['enlem'] or args['enlem1'] or args.lat
args.long = args['boylam'] or args['boylam1'] or args.long
args.lat_deg = args['enlem_der'] or args['enlem1_der'] or args.lat_deg
args.lat_min = args['enlem_dak'] or args['enlem1_dak'] or args.lat_min
args.lat_sec = args['enlem_san'] or args['enlem1_san'] or args.lat_sec
args.lat_dir = args['enlem_dir'] or args['enlem1_dir'] or args.lat_dir
args.lon_deg = args['boylam_der'] or args['boylam1_der'] or args.lon_deg
args.lon_min = args['boylam_dak'] or args['boylam1_dak'] or args.lon_min
args.lon_sec = args['boylam_san'] or args['boylam1_san'] or args.lon_sec
args.lon_dir = args['boylam_dir'] or args['boylam1_dir'] or args.lon_dir
args.outside = args['dışarıda'] or args.outside
args.places = args['yerler'] or args.places
args.coordinates = args['koordinatlar'] or args['koordinatlar1'] or args.coordinates
end
local function ulkeBul(harita)
local sayfa = harita
local s, d = sayfa, ""
local function bulvedeg(yazi, bir, iki)
return mw.ustring.sub( mw.ustring.gsub(yazi, bir, iki), 1, -1 )
end
for i=1,5 do
if ulkeler[d] then
break
else
d = d .. (d~="" and " " or "") .. bulvedeg(s, "%s.*", "")
s = bulvedeg(s, "^[^%s]*%s*", "")
end
end
return ulkeler[d] and bulvedeg(sayfa, d, ulkeler[d]) or sayfa
end
function p.getMapParams(map, frame)
--ülke çevirici
map = ulkeBul(map)
if not map then
error('Kullanılacak konum haritası tanımının adı belirtilmek zorundadır', 2)
end
local moduletitle = mw.title.new('Modül:Konum haritası/veri/' .. map)
if not moduletitle then
error(string.format('%q konum haritası tanımı için geçerli ad değil', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Modül:Konum haritası/veri/' .. map)
return function(name, params)
if name == nil then
return 'Modül:Konum haritası/veri/' .. map
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
return "-1"
--error('Belirtilen konum haritası tanımı bulunamıyor. "Modül:Konum haritası/veri/' .. map .. '" mevcut değil', 2)
end
end
function p.veri(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 = {
boylam = { W = -1, w = -1, B = -1, b = -1, E = 1, e = 1, D = 1, d = 1 },
enlem = { S = -1, s = -1, G = -1, g = -1, N = 1, n = 1, K = 1, k = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Desimal ve DDS dereceleri her iki ' .. direction .. ' için değer verilebilir', 2)
elseif minutes then
error('Dakikaya ' .. direction ..' için yalnızca DDS dereceleri ile değer verilebilir', 2)
elseif seconds then
error('Saniyeye ' .. direction ..' için yalnızca DDS dereceleri ile değer verilebilir', 2)
elseif hemisphere then
error('Bir yarımküreye ' .. direction ..' için yalnızca DDS dereceleri ile değer verilebilir', 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error(direction .. ' için verilen değer ' .. decimal .. ' için geçerli değil', 2)
elseif seconds and not minutes then
error('Ayrıca ' .. direction .. ' için değer verilen dakika olmadan saniyeye değer verildi', 2)
elseif not degrees then
if minutes then
error('Ayrıca ' .. direction .. ' için değer verilen derece olmadan dakikaya değer verildi', 2)
elseif hemisphere then
error('Ayrıca ' .. direction .. ' için değer verilen derece olmadan bir yarımküreye değer verildi', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error(direction .. ' için verilen değer ' .. degrees .. ' için geçerli değil', 2)
elseif minutes and not tonumber(minutes) then
error(direction .. ' için verilen değer ' .. minutes .. ' için geçerli değil', 2)
elseif seconds and not tonumber(seconds) then
error(direction .. ' için verilen değer ' .. seconds .. ' için geçerli değil', 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(direction .. ' için verilen değer ' .. hemisphere .. ' için geçerli değil', 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 result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NSKG] %-?[%.%d]+°[EWDB]') or '', '[ °]')
if para == 'boylam' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then return error('Hatalı koordinat değerleri', 2) end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
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('resim1') ~= '' then
return map('resim1')
else
return map('resim')
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('varsayılan_ölçü')) 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('varsayılan_ölçü')) 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 = 'Şablon:Konum haritası/stiller.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[[Dosya:%s|%spx|%s%s]]',
retval,
image,
width,
args.alt or (map('ad') .. ' üzerinde ' .. (args.label or currentTitle.text)),
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 .. '[[Kategori:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[Dosya:' .. 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('ad') .. ')')
.. '</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">[[:Dosya:' .. 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">' .. map('ad') .. ' haritasında göster</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Silinen caption_undefined parametresi kullanıldı.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Kategori:Konum haritaları ile olası hataları|Sayfa parametresi kullanılarak kaldırılanlar]]'
end
end
if map('eğri') ~= '' or map('enlem_eğri') ~= '' or map('çakışma180') ~= '' or map('tip') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('eğri') ~= '' and 'eğri' or '') ..
(map('enlem_eğri') ~= '' and 'enlem_eğri' or '') ..
(map('çakışma180') ~= '' and 'çakışma180' or '') ..
(map('tip') ~= '' and 'tip' or '')
retval = retval .. '[[Kategori:Konum haritaları ile olası hataları|' .. key .. ' ]]'
end
end
if string.find(map('ad'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Kategori:Konum haritaları ile olası hataları|Adı içeren boru]]'
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, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
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 = round(marksize / 2 + 1)
if 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 background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
if longitude == nil then return 0 end
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)
if latitude == nil then return 0 end
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Şablon:Konum haritası~'})
end
local mapnames = {}
p.getTurkishParams(args)
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('Dünya', frame)
args[1] = 'Dünya'
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, 'boylam')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'enlem')
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.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('boylam', args.coordinates)
latitude = coord2text('enlem', 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("[[Kategori:Vikiveri'den koordinat çeken konum haritaları]]")
end
end
if not args.useWikidata then
if not longitude then
error('Boylam değeri saptanamadı')
elseif not latitude then
error('Enlem değeri saptanamadı')
end
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Kategori:Konum haritaları ile farklı enlem ve boylam presizyonları|Derece]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Kategori:Konum haritaları ile farklı enlem ve boylam presizyonları|Dakika]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Kategori:Konum haritaları ile farklı enlem ve boylam presizyonları|Saniye]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Kategori:Konum haritaları ile farklı enlem ve boylam presizyonları|Yarımküre]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Kategori:Konum haritaları ile farklı enlem ve boylam presizyonları|Desimal]]')
end
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Silinen parametre çağrıda kullanıldı.')
local parent = frame:getParent()
if parent then
mw.log('Temel ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'eğri' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Kategori:Konum haritaları ile olası hataları|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('sol'), map('sağ')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('üst'), map('alt')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('İşaret, dış bayrak koyulmadan dış harita sınırlarına yerleştirildi. 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('[[Kategori:Konum haritaları ile olası hataları|' .. key .. ' ]]')
end
end
local mark = args.mark or map('işaret')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('işaret_boyutu')) or 8
local imageDiv = markImageDiv(mark, marksize, 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(args.label, args.label_size or 91, args.label_width or 6, args.position, args.background, x, marksize)
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 = 'Şablon:Konum haritası', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
p.getTurkishParams(args)
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
local val = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
if val ~= '-1'
then
map[#map + 1] = val
end
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('Dünya', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d alternatif_harita girildi, ama sadece %d haritalar sağlandı', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d bindirilen_resim girildi, ama sadece %d haritalar sağlandı', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d altyazılar girildi, ama sadece %d haritalar sağlandı', #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