Senin, 21 September 2026
17:03 WIB
TERKINI
Cek Fakta Menteri Keuangan Suahasil Nazara Diserang Hoaks: Dana Hibah Fiktif dan Korupsi Fantastis Cek Fakta Waspada! Penipuan Undian Berhadiah Mengatasnamakan BRI Marak di Medsos Cek Fakta Klarifikasi Hoaks: Nusron Wahid Tak Pernah Sebut Jokowi Terima Suap Rp 700 Miliar Hukum & Kriminal Pengusaha RI Tersandung Dolar Singapura Palsu di Kasino Mewah Sentosa Peristiwa Misteri 22 Penumpang KM Virgo Tak Terdaftar: Menyoroti Akurasi Manifes Kapal Olahraga Pedro Acosta Pecah Telur di MotoGP Austria 2026, Penantian Panjang Berakhir Kolom Warisan Otoriter: Jejak Kekuasaan Kolonial dalam Rezim Orde Baru Kolom Obligasi Daerah Rp 5,6 Triliun DKI: Cerminan Kebutuhan Pembiayaan Ibu Kota Politik Partai Pendukung Prabowo Usulkan Kenaikan Ambang Batas Parlemen dan Presiden Megapolitan Pria Penendang Wanita di Senayan City Resmi Tersangka, Polisi Ungkap Motifnya Cek Fakta Menteri Keuangan Suahasil Nazara Diserang Hoaks: Dana Hibah Fiktif dan Korupsi Fantastis Cek Fakta Waspada! Penipuan Undian Berhadiah Mengatasnamakan BRI Marak di Medsos Cek Fakta Klarifikasi Hoaks: Nusron Wahid Tak Pernah Sebut Jokowi Terima Suap Rp 700 Miliar Hukum & Kriminal Pengusaha RI Tersandung Dolar Singapura Palsu di Kasino Mewah Sentosa Peristiwa Misteri 22 Penumpang KM Virgo Tak Terdaftar: Menyoroti Akurasi Manifes Kapal Olahraga Pedro Acosta Pecah Telur di MotoGP Austria 2026, Penantian Panjang Berakhir Kolom Warisan Otoriter: Jejak Kekuasaan Kolonial dalam Rezim Orde Baru Kolom Obligasi Daerah Rp 5,6 Triliun DKI: Cerminan Kebutuhan Pembiayaan Ibu Kota Politik Partai Pendukung Prabowo Usulkan Kenaikan Ambang Batas Parlemen dan Presiden Megapolitan Pria Penendang Wanita di Senayan City Resmi Tersangka, Polisi Ungkap Motifnya

Modul:Location map

Wikimedia module

Dokumentasi modullihatsuntingriwayatsegarkan
Siap digunakanModul ini dinilai siap digunakan secara umum. Modul ini sudah matang dan diperkirakan bebas dari bug dan siap digunakan pada tempat yang tepat di manapun. Modul ini siap disinggung di halaman-halaman bantuan dan sumber informasi Wikipedia lainnya sebagai pilihan untuk dipelajari para pengguna baru. Untuk mengurangi beban server dan output yang tidak diharapkan, modul ini harus diperlengkapi dengan halaman bak pasir dan kasus uji daripada harus melakukan suntingan coba-dan-salah berulang-ulang.
WarningModul Lua ini digunakan pada sekitar 43.000 halaman dan perubahannya kemungkinan memicu perubahan massal pada semua halaman yang menggunakannya. Uji cobalah di subhalaman /bak pasir atau /kasus uji Modul:Location map, atau bak pasir modul Anda. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya.
Modul ini menggunakan Lua:
CSSModul ini menggunakan TemplateStyles:

PenggunaanPenggunaan

Modul ini mengimplementasikan templat {{Location map}} dan {{Location map~}}. Silakan lihat halaman templat tersebut untuk instruksi penggunaan.

Peta kotak infoPeta kotak info

Untuk menyisipkan ke dalam kotak info, cukup tambahkan kode berikut untuk mendukung peta pin secara otomatis.

| image2  = {{#invoke:Location map|infobox_pushpin_map}}

Kategori pelacakKategori pelacak

Dokumentasi di atas ditransklusikan dari Modul:Location map/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
localp={}
localgetArgs=require('Module:Arguments').getArgs
localfunctionround(n,decimals)
localpow=10^(decimalsor0)
returnmath.floor(n*pow+0.5)/pow
end
functionp.getMapParams(map,frame)
ifnotmapthen
error('Nama definisi peta lokasi yang akan digunakan harus ditentukan',2)
end
localmoduletitle=mw.title.new('Module:Location map/data/'..map)
ifnotmoduletitlethen
error(string.format('%q bukan nama yang valid untuk definisi peta lokasi',map),2)
elseifmoduletitle.existsthen
localmapData=mw.loadData('Module:Location map/data/'..map)
returnfunction(name,params)
ifname==nilthen
return'Module:Location map/data/'..map
elseifmapData[name]==nilthen
return''
elseifparamsthen
returnmw.message.newRawMessage(tostring(mapData[name]),unpack(params)):plain()
else
returnmapData[name]
end
end
elseifmw.title.new('Templat:Location map '..map).existsthen
localcache={}
iftype(frame)~='table'ortype(frame.expandTemplate)~='function'then
error('Frame harus disediakan saat menggunakan peta lokasi lama')
end
returnfunction(name,params)
ifparamsthen
returnframe:expandTemplate{title='Location map '..map,args={name,unpack(params)}}
else
ifname==nilthen
return'Templat:Location map '..map
elseifcache[name]==nilthen
cache[name]=frame:expandTemplate{title='Location map '..map,args={name}}
end
returncache[name]
end
end
else
error('Tidak dapat menemukan definisi peta lokasi yang ditentukan. Baik "Modul:Location map/data/'..map..'" maupun "Templat:Location map '..map..'" tidak ada',2)
end
end
functionp.data(frame,args,map)
ifnotargsthen
args=getArgs(frame,{frameOnly=true})
end
ifnotmapthen
map=p.getMapParams(args[1],frame)
end
localparams={}
fork,vinipairs(args)do
ifk>2then
params[k-2]=v
end
end
returnmap(args[2],#params~=0andparams)
end
localhemisphereMultipliers={
longitude={W=-1,w=-1,E=1,e=1},
latitude={S=-1,s=-1,N=1,n=1}
}
localfunctiondecdeg(degrees,minutes,seconds,hemisphere,decimal,direction)
ifdecimalthen
ifdegreesthen
error('Derajat desimal dan DMS tidak dapat diberikan untuk '..direction,2)
elseifminutesthen
error('Menit hanya dapat diberikan dengan derajat DMS untuk '..direction,2)
elseifsecondsthen
error('Detik hanya dapat diberikan dengan derajat DMS untuk '..direction,2)
elseifhemispherethen
error('Hemisfer hanya dapat diberikan dengan derajat DMS untuk '..direction,2)
end
localretval=tonumber(decimal)
ifretvalthen
returnretval
end
error('Nilai "'..decimal..'" yang disediakan untuk '..direction..' tidak sah',2)
elseifsecondsandnotminutesthen
error('Detik disediakan untuk '..direction..' tanpa menentukan menit',2)
elseifnotdegreesthen
ifminutesthen
error('Menit disediakan untuk '..direction..' tanpa menentukan derajat',2)
elseifhemispherethen
error('Hemisfer disediakan untuk '..direction..' tanpa menentukan derajat',2)
end
returnnil
end
decimal=tonumber(degrees)
ifnotdecimalthen
error('Nilai derajat "'..degrees..'" yang disediakan untuk '..direction..' tidak sah',2)
elseifminutesandnottonumber(minutes)then
error('Nilai menit "'..minutes..'" yang disediakan untuk '..direction..' tidak sah',2)
elseifsecondsandnottonumber(seconds)then
error('Nilai detik "'..seconds..'" yang disediakan untuk '..direction..' tidak sah',2)
end
decimal=decimal+(minutesor0)/60+(secondsor0)/3600
ifhemispherethen
localmultiplier=hemisphereMultipliers[direction][hemisphere]
ifnotmultiplierthen
error('Hemisfer "'..hemisphere..'" yang disediakan untuk '..direction..' tidak sah',2)
end
decimal=decimal*multiplier
end
returndecimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
localfunctioncoord2text(para,coord)-- this should be changed for languages which do not use Arabic numerals or the degree sign
locallat,long=mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
iflatthen
returntonumber(para=='longitude'andlongorlat)
end
localresult=mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]')or'','[ °]')
ifpara=='longitude'thenresult={result[3],result[4]}end
ifnottonumber(result[1])ornotresult[2]then
mw.log('Malformed coordinates value')
mw.logObject(para,'para')
mw.logObject(coord,'coord')
returnerror('Kesalahan format nilai koordinat',2)
end
returntonumber(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
functionp.valueFunc(key,value)
ifvaluethen
value=mw.text.trim(value)
end
ifvalue~=''orkey=='caption'orkey=='maplink'then
returnvalue
elseifkey=='useWikidata'then
returnfalse
end
end
localfunctiongetContainerImage(args,map)
ifargs.AlternativeMapthen
returnargs.AlternativeMap
elseifargs.reliefandmap('image1')~=''then
returnmap('image1')
else
returnmap('image')
end
end
functionp.top(frame,args,map)
ifnotargsthen
args=getArgs(frame,{frameOnly=true,valueFunc=p.valueFunc})
end
ifnotmapthen
map=p.getMapParams(args[1],frame)
end
localwidth
localdefault_as_number=tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
ifnotargs.widththen
width=round((default_as_numberor240)*(tonumber(map('defaultscale'))or1))
elseifmw.ustring.sub(args.width,-2)=='px'then
width=mw.ustring.sub(args.width,1,-3)
else
width=args.width
end
localwidth_as_number=tonumber(mw.ustring.match(tostring(width),"%d*"))or0;
ifwidth_as_number==0then
-- check to see if width is junk. If it is, then use default calculation
width=round((default_as_numberor240)*(tonumber(map('defaultscale'))or1))
width_as_number=tonumber(mw.ustring.match(tostring(width),"%d*"))or0;
end
ifargs.max_width~=""andargs.max_width~=nilthen
-- check to see if width bigger than max_width
localmax_as_number=tonumber(mw.ustring.match(args.max_width,"%d*"))or0;
ifwidth_as_number>max_as_numberandmax_as_number>0then
width=args.max_width;
end
end
localretval=frame:extensionTag{name='templatestyles',args={src='Module:Location map/styles.css'}}
ifargs.float=='center'then
retval=retval..'<div class="center">'
end
ifargs.captionandargs.caption~=''andargs.border~='infobox'then
retval=retval..'<div class="locmap noviewer thumb '
ifargs.float=='"left"'orargs.float=='left'then
retval=retval..'tleft'
elseifargs.float=='"center"'orargs.float=='center'orargs.float=='"none"'orargs.float=='none'then
retval=retval..'tnone'
else
retval=retval..'tright'
end
retval=retval..'"><div class="thumbinner" style="width:'..(width+2)..'px'
ifargs.border=='none'then
retval=retval..';border:none'
elseifargs.borderthen
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;'
ifargs.float=='"left"'orargs.float=='left'then
retval=retval..'float:left;clear:left'
elseifargs.float=='"center"'orargs.float=='center'then
retval=retval..'float:none;clear:both;margin-left:auto;margin-right:auto'
elseifargs.float=='"none"'orargs.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
localimage=getContainerImage(args,map)
localcurrentTitle=mw.title.getCurrentTitle()
retval=string.format(
'%s[[File:%s|%spx|%s%s]]',
retval,
image,
width,
args.altor((args.labelorcurrentTitle.text)..' di '..map('name')),
args.maplinkand('|link='..args.maplink)or''
)
ifargs.captionandargs.caption~=''then
if(currentTitle.namespace==0)andmw.ustring.find(args.caption,'##')then
retval=retval..'[[Kategori:Halaman yang menggunakan peta lokasi dengan tanda angka ganda pada keterangannya]]'
end
end
ifargs.overlay_imagethen
returnretval..'<div style="position:absolute;top:0;left:0">[[File:'..args.overlay_image..'|'..width..'px]]</div>'
else
returnretval
end
end
functionp.bottom(frame,args,map)
ifnotargsthen
args=getArgs(frame,{frameOnly=true,valueFunc=p.valueFunc})
end
ifnotmapthen
map=p.getMapParams(args[1],frame)
end
localretval='</div>'
localcurrentTitle=mw.title.getCurrentTitle()
ifnotargs.captionorargs.border=='infobox'then
ifargs.borderthen
retval=retval..'<div style="padding-top:0.2em">'
else
retval=retval..'<div style="font-size:91%;padding-top:3px">'
end
retval=retval
..(args.captionor(args.labelorcurrentTitle.text)..' ('..map('name')..')')
..'</div>'
elseifargs.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
ifargs.switcherLabelthen
retval=retval..'<span class="switcher-label" style="display:none">'..args.switcherLabel..'</span>'
elseifargs.autoSwitcherLabelthen
retval=retval..'<span class="switcher-label" style="display:none">Tampilkan peta '..map('name')..'</span>'
end
retval=retval..'</div></div>'
ifargs.caption_undefinedthen
mw.log('Removed parameter caption_undefined used.')
localparent=frame:getParent()
ifparentthen
mw.log('Parent is '..parent:getTitle())
end
mw.logObject(args,'args')
ifcurrentTitle.namespace==0then
retval=retval..'[[Kategori:Peta lokasi dengan parameter yang dihapus|caption_undefined]]'
end
end
ifmap('skew')~=''ormap('lat_skew')~=''ormap('crosses180')~=''ormap('type')~=''then
mw.log('Removed parameter used in map definition '..map())
ifcurrentTitle.namespace==0then
localkey=(map('skew')~=''and'skew'or'')..
(map('lat_skew')~=''and'lat_skew'or'')..
(map('crosses180')~=''and'crosses180'or'')..
(map('type')~=''and'type'or'')
retval=retval..'[[Kategori:Peta lokasi dengan parameter yang dihapus|'..key..' ]]'
end
end
ifstring.find(map('name'),'|',1,true)then
mw.log('Pipe used in name of map definition '..map())
ifcurrentTitle.namespace==0then
retval=retval..'[[Kategori:Peta lokasi dengan nama yang mengandung pipa]]'
end
end
ifargs.float=='center'then
retval=retval..'</div>'
end
returnretval
end
localfunctionmarkOuterDiv(x,y,imageDiv,labelDiv)
returnmw.html.create('div')
:addClass('od')
:cssText('top:'..round(y,3)..'%;left:'..round(x,3)..'%')
:node(imageDiv)
:node(labelDiv)
end
localfunctionmarkImageDiv(mark,marksize,label,link,alt,title)
localbuilder=mw.html.create('div')
:addClass('id')
:cssText('left:-'..round(marksize/2)..'px;top:-'..round(marksize/2)..'px')
:attr('title',title)
ifmarksize~=0then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s]]',
mark,
marksize,
marksize,
label,
link,
altand('|alt='..alt)or''
))
end
returnbuilder
end
localfunctionmarkLabelDiv(label,label_size,label_width,position,background,x,marksize)
iftonumber(label_size)==0then
returnmw.html.create('div'):addClass('l0'):wikitext(label)
end
localbuilder=mw.html.create('div')
:cssText('font-size:'..label_size..'%;width:'..label_width..'em')
localdistance=round(marksize/2+1)
ifposition=='top'then-- specified top
builder:addClass('pv'):cssText('bottom:'..distance..'px;left:'..(-label_width/2)..'em')
elseifposition=='bottom'then-- specified bottom
builder:addClass('pv'):cssText('top:'..distance..'px;left:'..(-label_width/2)..'em')
elseifposition=='left'or(tonumber(x)>70andposition~='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)
ifbackgroundthen
builder:cssText('background-color:'..background)
end
returnbuilder:done()
end
localfunctiongetX(longitude,left,right)
localwidth=(right-left)%360
ifwidth==0then
width=360
end
localdistanceFromLeft=(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
ifdistanceFromLeft-width/2>=180then
distanceFromLeft=distanceFromLeft-360
end
return100*distanceFromLeft/width
end
localfunctiongetY(latitude,top,bottom)
return100*(top-latitude)/(top-bottom)
end
functionp.mark(frame,args,map)
ifnotargsthen
args=getArgs(frame,{wrappers='Template:Location map~'})
end
localmapnames={}
ifnotmapthen
ifargs[1]then
map={}
formapnameinmw.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==1thenmap=map[1]end
else
map=p.getMapParams('World',frame)
args[1]='World'
end
end
iftype(map)=='table'then
localoutputs={}
localoldargs=args[1]
fork,vinipairs(map)do
args[1]=mapnames[k]
outputs[k]=tostring(p.mark(frame,args,v))
end
args[1]=oldargs
returntable.concat(outputs,'#PlaceList#')..'#PlaceList#'
end
localx,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')
ifargs.excludefromthen
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
forexclusionmapinmw.text.gsplit(args.excludefrom,'#',true)do
-- Check if this map is excluded. If so, return an empty string.
ifargs[1]==exclusionmapthen
return''
end
end
end
localbuilder=mw.html.create()
localcurrentTitle=mw.title.getCurrentTitle()
ifargs.coordinatesthen
--		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('longitude',args.coordinates)
latitude=coord2text('latitude',args.coordinates)
elseifnotlongitudeandnotlatitudeandargs.useWikidatathen
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
localentity=mw.wikibase.getEntity()
ifentityandentity.claimsandentity.claims.P625andentity.claims.P625[1].mainsnak.snaktype=='value'then
localvalue=entity.claims.P625[1].mainsnak.datavalue.value
longitude,latitude=value.longitude,value.latitude
end
ifargs.linkand(currentTitle.namespace==0)then
builder:wikitext('[[Kategori:Peta lokasi menggunakan penanda tertaut dengan koordinat dari Wikidata]]')
end
end
ifnotlongitudethen
error('Tidak ada nilai yang diberikan untuk garis bujur')
elseifnotlatitudethen
error('Tidak ada nilai yang diberikan untuk garis lintang')
end
ifcurrentTitle.namespace>0then
if(notargs.lon_deg)~=(notargs.lat_deg)then
builder:wikitext('[[Kategori:Peta lokasi dengan presisi garis bujur dan garis lintang yang berbeda|Derajat]]')
elseif(notargs.lon_min)~=(notargs.lat_min)then
builder:wikitext('[[Kategori:Peta lokasi dengan presisi garis bujur dan garis lintang yang berbeda|Menit]]')
elseif(notargs.lon_sec)~=(notargs.lat_sec)then
builder:wikitext('[[Kategori:Peta lokasi dengan presisi garis bujur dan garis lintang yang berbeda|Detik]]')
elseif(notargs.lon_dir)~=(notargs.lat_dir)then
builder:wikitext('[[Kategori:Peta lokasi dengan presisi garis bujur dan garis lintang yang berbeda|Hemisfer]]')
elseif(notargs.long)~=(notargs.lat)then
builder:wikitext('[[Kategori:Peta lokasi dengan presisi garis bujur dan garis lintang yang berbeda|Desimal]]')
end
end
if((tonumber(args.lat_deg)or0)<0)and((tonumber(args.lat_min)or0)~=0or(tonumber(args.lat_sec)or0)~=0or(args.lat_dirandargs.lat_dir~=''))then
builder:wikitext('[[Kategori:Peta lokasi dengan derajat dan menit atau detik negatif]]')
end
if((tonumber(args.lon_deg)or0)<0)and((tonumber(args.lon_min)or0)~=0or(tonumber(args.lon_sec)or0)~=0or(args.lon_dirandargs.lon_dir~=''))then
builder:wikitext('[[Kategori:Peta lokasi dengan derajat dan menit atau detik negatif]]')
end
if(((tonumber(args.lat_min)or0)<0)or((tonumber(args.lat_sec)or0)<0))then
builder:wikitext('[[Kategori:Peta lokasi dengan derajat dan menit atau detik negatif]]')
end
if(((tonumber(args.lon_min)or0)<0)or((tonumber(args.lon_sec)or0)<0))then
builder:wikitext('[[Kategori:Peta lokasi dengan derajat dan menit atau detik negatif]]')
end
ifargs.skeworargs.lon_shiftorargs.markhighthen
mw.log('Removed parameter used in invocation.')
localparent=frame:getParent()
ifparentthen
mw.log('Parent is '..parent:getTitle())
end
mw.logObject(args,'args')
ifcurrentTitle.namespace==0then
localkey=(args.skewand'skew'or'')..
(args.lon_shiftand'lon_shift'or'')..
(args.markhighand'markhigh'or'')
builder:wikitext('[[Kategori:Peta lokasi dengan parameter yang dihapus|'..key..' ]]')
end
end
ifmap('x')~=''then
x=tonumber(mw.ext.ParserFunctions.expr(map('x',{latitude,longitude})))
else
x=tonumber(getX(longitude,map('left'),map('right')))
end
ifmap('y')~=''then
y=tonumber(mw.ext.ParserFunctions.expr(map('y',{latitude,longitude})))
else
y=tonumber(getY(latitude,map('top'),map('bottom')))
end
if(x<0orx>100ory<0ory>100)andnotargs.outsidethen
mw.log('Mark placed outside map boundaries without outside flag set. x = '..x..', y = '..y)
localparent=frame:getParent()
ifparentthen
mw.log('Parent is '..parent:getTitle())
end
mw.logObject(args,'args')
ifcurrentTitle.namespace==0then
localkey=currentTitle.prefixedText
builder:wikitext('[[Kategori:Peta lokasi dengan tanda di luar peta dan parameter luar tidak diatur|'..key..' ]]')
end
end
localmark=args.markormap('mark')
ifmark==''then
mark='Red pog.svg'
end
localmarksize=tonumber(args.marksize)ortonumber(map('marksize'))or8
localimageDiv=markImageDiv(mark,marksize,args.labelormw.title.getCurrentTitle().text,args.linkor'',args.alt,args[2])
locallabelDiv
ifargs.labelandargs.position~='none'then
labelDiv=markLabelDiv(args.label,args.label_sizeor91,args.label_widthor6,args.position,args.background,x,marksize)
end
returnbuilder:node(markOuterDiv(x,y,imageDiv,labelDiv))
end
localfunctionswitcherSeparate(s)
ifs==nilthenreturn{}end
localretval={}
foriinstring.gmatch(s..'#','([^#]*)#')do
i=mw.text.trim(i)
retval[#retval+1]=(i~=''andi)
end
returnretval
end
functionp.infobox_pushpin_map(frame)
--This function is designed to be invoked from an infobox template
--* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters
--   in the outer infobox, settable by editors
--* Others are meant to be "hidden" (e.g., only set inside the infobox template code)
-- First get the combined arguments from both parent and invocation frame
localraw_args=getArgs(frame,{parentFirst=true})
--If no map is supplied, return.
ifnotraw_args['pushpin_map']then
return
end
-- Now get arguments from just the invocation frame
localframe_args=getArgs(frame,{frameOnly=true})
-- parsed_args will have the resulting merged parameters 
localparsed_args={}
-- Default to using wikidata coodinates if no other coordiantes supplied. 
ifraw_args.useWikidata==nilthen
parsed_args.useWikidata=true
else
parsed_args.useWikidata=raw_args.useWikidata
end
-- Parse the arguments
parsed_args[1]=raw_args['pushpin_map']
parsed_args.float=frame_args.floator'center'
parsed_args.border=frame_args.borderor'infobox'
parsed_args.default_width=frame_args.default_width
parsed_args.max_width=frame_args.max_width
parsed_args.coordinates=raw_args['coordinates']
parsed_args.caption=raw_args['pushpin_caption']
parsed_args.relief=raw_args['pushpin_relief']
parsed_args.label=raw_args['pushpin_label']
parsed_args.label_size=raw_args['pushpin_label_size']
parsed_args.position=raw_args['pushpin_label_position']
parsed_args.mark=raw_args['pushpin_mark']
parsed_args.marksize=raw_args['pushpin_mark_size']
parsed_args.alt=raw_args['pushpin_alt']
parsed_args.background=raw_args['pushpin_background']
parsed_args.width=raw_args['pushpin_map_size']
localmap={}
localcaption_list={}
formapnameinstring.gmatch(parsed_args[1],'[^#]+')do
map[#map+1]=p.getMapParams(mw.ustring.gsub(mapname,'^%s*(.-)%s*$','%1'),frame)
end
ifparsed_args['caption']then
forcaptioninmw.text.gsplit(parsed_args['caption'],'##',true)do
caption_list[#caption_list+1]=caption
end
end
if#map==1then
map=map[1]
ifnotparsed_args.captionthen
parsed_args.caption='Lokasi di '..map('name')
end
end
iftype(map)=='table'then
mw.log('----')
mw.logObject(map)
if#caption_list>#mapthen
error(string.format('%d keterangan gambar disediakan, tetapi hanya %d peta yang disediakan',#caption_list,#map))
elseifnotparsed_args.captionthen
-- Set a default caption for each of the multiple maps
fori=1,#mapdo
caption_list[#caption_list+1]='Lokasi di '..map[i]('name')
end
end
localoutputs={}
parsed_args.autoSwitcherLabel=true
fork,vinipairs(map)do
parsed_args.caption=caption_list[k]
outputs[k]=p.main(frame,parsed_args,v)
end
return'<div class="switcher-container">'..table.concat(outputs)..'</div>'
else
returnp.top(frame,parsed_args,map)..tostring(p.mark(frame,parsed_args,map))..p.bottom(frame,parsed_args,map)
end
end
functionp.main(frame,args,map)
localcaption_list={}
ifnotargsthen
args=getArgs(frame,{wrappers='Template:Location map',valueFunc=p.valueFunc})
end
ifargs.useWikidata==nilthen
args.useWikidata=true
end
ifnotmapthen
ifargs[1]then
map={}
formapnameinstring.gmatch(args[1],'[^#]+')do
map[#map+1]=p.getMapParams(mw.ustring.gsub(mapname,'^%s*(.-)%s*$','%1'),frame)
end
ifargs['caption']then
ifargs['caption']==""then
while#caption_list<#mapdo
caption_list[#caption_list+1]=args['caption']
end
else
forcaptioninmw.text.gsplit(args['caption'],'##',true)do
caption_list[#caption_list+1]=caption
end
end
end
if#map==1thenmap=map[1]end
else
map=p.getMapParams('World',frame)
end
end
iftype(map)=='table'then
localaltmaps=switcherSeparate(args.AlternativeMap)
if#altmaps>#mapthen
error(string.format('%d AlternatifMaps disediakan, tetapi hanya peta %d yang disediakan',#altmaps,#map))
end
localoverlays=switcherSeparate(args.overlay_image)
if#overlays>#mapthen
error(string.format('%d overlay_images disediakan, tetapi hanya peta %d yang disediakan',#overlays,#map))
end
if#caption_list>#mapthen
error(string.format('%d captions disediakan, tetapi hanya peta %d yang disediakan',#caption_list,#map))
end
localoutputs={}
args.autoSwitcherLabel=true
fork,vinipairs(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
returnp.top(frame,args,map)..tostring(p.mark(frame,args,map))..p.bottom(frame,args,map)
end
end
returnp
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan