Această pagină este protejată de mișcare
Această pagină este protejată

Modul: Harta de localizare

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Modul care implementează funcționalitatea șabloanelor {{Location Map }}, {{Location Map ~ }} și {{Location Map + }}.


 - [[
* Modul care implementează funcționalitățile șabloanelor:
* {{Location Map}}, {{Location Map ~}} și {{Location Map +}}.
*
* Modulul a fost importat din:
* http://en.wikipedia.org/w/index.php?title=Module:Location_map&oldid=656514684
]]

require ( „Modul: fără globali” )

local p = {}

local getArgs = require ( 'Modul: Argumente' ). getArgs

runda funcției locale ( n , zecimale )
pow local = 10 ^ ( zecimale sau 0 )
returnează math.floor ( n * pow + 0,5 ) / pow
Sfârșit

funcția p . getMapParams ( hartă , cadru )
dacă nu hartă atunci
eroare ( „Harta nespecificată” , 2 )
Sfârșit
- Gestionarea hărților prin subpagini ale modulului, care nu sunt utilizate în prezent în itwiki
- [[
local moduletitle = mw.title.new ('Module: Location Location / data /' .. map)
dacă nu moduletitle atunci
eroare ('"' .. hartă .. '" nu este un nume de hartă valid', 2)
elseif moduletitle.există atunci
local mapData = mw.loadData ('Module: Location Map / data /' .. map)
funcție de returnare (nume, parametri)
if name == zero atunci
returnează 'Modul: Harta locației / data /' .. harta
elseif mapData [nume] == zero atunci
întoarcere ''
elseif params atunci
returnează mw.message.newRawMessage (tostring (mapData [nume]), despachetați (params)): plain ()
altceva
return mapData [nume]
Sfârșit
Sfârșit
]] -
local maptitle = mw . titlu . nou ( „Șablon: Harta de localizare /” .. hartă )
dacă nu maptitle atunci
eroare ( '"' .. hartă .. '" nu este un nume de hartă valid' , 2 )
elseif maptitle . există atunci
cache local = {}
dacă tip ( cadru ) ~ = 'tabel' sau tip ( cadru . expandTemplate ) ~ = 'funcție' atunci
eroare ( 'frame.expandTemplate nu este disponibil' )
Sfârșit
funcție de returnare ( nume , parametri )
dacă params atunci
retur cadru : expandTemplate { title = ' Harta locației /' .. hartă , args = { nume , despachetați ( params ) }}
altceva
if name == zero atunci
returnează „Șablon: Harta locației /” .. hartă
elseif cache [ nume ] == zero atunci
cache [ name ] = frame : expandTemplate { title = ' Harta locației /' .. map , args = { name }}
Sfârșit
returnează memoria cache [ nume ]
Sfârșit
Sfârșit
altceva
eroare ( 'Harta nu este disponibilă (' .. hartă .. ')' , 2 )
Sfârșit
Sfârșit

- [[
- nu este utilizat în it.wiki
funcția p.data (cadru, argumente, hartă)
dacă nu argumentează atunci
args = getArgs (cadru, {frameOnly = true})
Sfârșit
dacă nu hartă atunci
map = p.getMapParams (args [1], cadru)
Sfârșit
parametri locali = {}
pentru k, v în ipairs (args) do
dacă k> 2 atunci
params [k-2] = v
Sfârșit
Sfârșit
harta de returnare (args [2], #params ~ = 0 și params)
Sfârșit
]]

hemisphereMultipliers local = {
longitudine = { W = - 1 , w = - 1 , E = 1 , e = 1 },
latitudine = { S = - 1 , s = - 1 , N = 1 , n = 1 }
}

funcție locală decdeg ( grade , minute , secunde , emisferă , zecimală , direcție )
dacă zecimal atunci
dacă grade atunci
eroare ( „Gradele zecimale și DMS nu trebuie utilizate împreună pentru” .. direcție , 2 )
elseif minute apoi
eroare ( „Procesul - verbal trebuie să fie utilizat în conjuncție cu gradele DMS pentru“ .. direcția, 2)
secunde , apoi elseif
eroare ( „secundele trebuie utilizat în conjuncție cu gradele DMS pentru“ .. direcția, 2)
altfel dacă emisfera atunci
eroare ( emisfera „L  ar trebui utilizată împreună cu gradele DMS pentru direcția „.. , 2)
Sfârșit
retval local = număr ( zecimal )
dacă retval atunci
returnează retval
Sfârșit
eroare ( 'Gradele "' .. zecimal .. '" din direcția ' .. .. nu sunt valide ' , 2 )
altfel dacă secunde și nu minute atunci
error ( „Secundele din„ .. direcția .. ”sunt utilizate fără minute” , 2 )
altfel dacă nu grade atunci
dacă minute atunci
error ( „Minutele din„ .. direcția .. ”sunt folosite fără grade” , 2 )
altfel dacă emisfera atunci
eroare ( direcția „L \„ emisfera  .. ..„ se folosește fără note ”, 2)
Sfârșit
întoarceți zero
Sfârșit
zecimal = tonum ( grade )
dacă nu zecimal atunci
eroare ( 'Gradele "' .. grade .. '" din direcția ' .. .. nu sunt valide ' , 2 )
altfel dacă minute și nu numărul ( minute ) atunci
eroare ( 'Minutele "' .. minute .. '" din direcția ' .. .. nu sunt valide ' , 2 )
altfel dacă secunde și nu numărul ( secunde ) atunci
eroare ( 'Secundele "' .. secunde .. '" din direcția ' .. .. nu sunt valide ' , 2 )
Sfârșit
zecimal = zecimal + ( minute sau 0 ) / 60 + ( secunde sau 0 ) / 3600
dacă emisfera atunci
multiplicator local = hemisphereMultipliers [ direcție ] [ emisferă ]
dacă nu multiplicator atunci
eroare ( 'L \' emisfera '' emisfera .. .. '"din' direcția .. .. 'nu este validă', 2)
Sfârșit
zecimal = zecimal * multiplicator
Sfârșit
returnează zecimal
Sfârșit

- faceți efectiv removeBlanks fals pentru subtitrare și maplink și adevărat pentru orice altceva
- dacă useWikidata este prezent, dar necompletat, convertiți-l în fals în loc de zero
- p.top, p.bottom și apelanții lor trebuie să folosească acest lucru
funcția p . valueFunc ( cheie , valoare )
dacă valoare atunci
valoare = mw . text . decupare ( valoare )
Sfârșit
dacă valoarea ~ = " sau cheia == " subtitrare " sau cheia == " maplink " atunci
valoarea returnată
tasta elseif == 'useWikidata' atunci
returnează fals
Sfârșit
Sfârșit

funcție locală getContainerImage ( argumente , hartă )
dacă arg . AlternativeMap atunci
întoarce arg . AlternativeMap
elseif ( args . relief sau args . fizică ) și hartă ( 'image1' ) ~ = '' atunci
retur harta ( 'image1' )
altceva
harta de întoarcere ( „imagine” )
Sfârșit
Sfârșit

funcție locală getWidth ( argumente , hartă )
lățime locală = args . lățime sau 240
întoarcere (tonumber (args. max_height) și tonumber (hartă ( 'raport'))) și
math.min ( tonumber ( width ), round ( tonumber ( args . max_height ) / tonumber ( map ( 'ratio' ))))) or
lăţime
Sfârșit

funcția p . sus ( cadru , argumente , hartă )
dacă nu argumentează atunci
args = getArgs ( cadru , { frameOnly = true , valueFunc = p . valueFunc })
Sfârșit
dacă nu hartă atunci
hartă = p . getMapParams ( args [ 1 ], cadru )
Sfârșit
- it.wiki are în plus parametrul max_height în șablon și raportul pe hărți
lățime locală = getWidth ( argumente , hartă )
- [[
dacă nu arg.width atunci
width = round ((args.default_width or 240) * (tonumber (hartă ('defaultscale')) sau 1))
elseif mw.ustring.sub (args.width, -2) == 'px' atunci
width = mw.ustring.sub (args.width, 1, -3)
altceva
width = args.width
Sfârșit
]]
retval local = args . float == 'centru' și '<div class = "centru">' sau ''
dacă arg . subtitrare și argumente . legenda ~ = " atunci
retval = retval .. '<div class = "noviewer thumb"
dacă arg . float == '"stânga"' sau args . float == 'stânga' atunci
retval = retval .. 'tleft'
elseif arg . float == '"centru"' sau args . float == 'centru' sau args . float == '"none"' sau args . float == 'none' atunci
retval = retval .. 'tnone'
altceva
retval = retval .. 'tright'
Sfârșit
retval = retval .. '"> <div class =" thumbinner "style =" width:' .. ( width + 2 ) .. 'px'
dacă arg . border == 'none' atunci
retval = retval .. '; border: none'
elseif arg . hotar atunci
retval = retval .. '; border-color:' .. args . frontieră
Sfârșit
retval = retval .. '"> <div style =" position: relative; width:' .. width .. 'px' .. ( args . border ~ = 'none' and '; border: 1px solid lightgray ">' sau '">' )
altceva
retval = retval .. '<div style = "width:' .. width .. 'px;'
dacă arg . float == '"stânga"' sau args . float == 'stânga' atunci
retval = retval .. 'float: left; clear: left'
elseif arg . float == '"centru"' sau args . float == „centru” atunci
retval = retval .. 'float: none; clear: both; margin-left: auto; margin-right: auto'
elseif arg . float == '"none"' sau args . float == 'none' atunci
retval = retval .. 'float: none; clear: none'
altceva
retval = retval .. 'float: right; clear: right'
Sfârșit
retval = retval .. '"> <div style =" width:' .. width .. 'px; padding: 0 "> <div style =" position: relative; width:' .. width .. 'px "> '
Sfârșit
local image = getContainerImage ( argumente , hartă )
retval = string.format (
'% s [[Fișier:% s |% spx |% s | link =% s]]' ,
retval ,
imagine ,
lățime ,
argumente . alt sau „Harta de localizare:” .. hartă ( „nume” ),
argumente . maplink sau ''
)
dacă arg . overlay_image atunci
return retval .. '<div style = "position: absolute; top: 0; left: 0"> [[File:' .. args . overlay_image .. '|' .. lățime .. 'px]] </div>'
altceva
returnează retval
Sfârșit
Sfârșit

funcția p . jos ( cadru , argumente , hartă )
dacă nu argumentează atunci
args = getArgs ( cadru , { frameOnly = true , valueFunc = p . valueFunc })
Sfârșit
dacă nu hartă atunci
hartă = p . getMapParams ( args [ 1 ], cadru )
Sfârșit
local retval = '</div>'
	
dacă nu arg . legenda atunci
retval = retval .. '<div style = "font-size: 90%; padding-top: 3px">'
.. (( args . etichetă sau mw . titlu . getCurrentTitle (). text ) .. '(' .. hartă ( 'nume' ) .. ')' )
.. „</div>”
elseif arg . legenda ~ = " atunci
- Acesta nu este trucul conductei. Creăm un link fără text intenționat, astfel încât CSS să ne poată oferi o imagine frumoasă
retval = retval .. '<div class = "thumbcaption"> <div class = "magnify"> [[: File:' .. getContainerImage ( args , map ) .. '| ]] </div> ' .. args . legenda .. „</div>”
Sfârșit

- [[
- Comutatorul nu este utilizat în it.wiki
dacă args.switcherLabel atunci
retval = retval .. '<span class = "switcher-label" style = "display: none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel atunci
retval = retval .. '<span class = "switcher-label" style = "display: none"> Arată harta lui' .. hartă ('nume') .. '</span>'
Sfârșit
]]
	
retval = retval .. '</div> </div>'
- [[
- Parametrul nu există în it.wiki
dacă args.caption_undefined atunci
mw.log ('Parametru eliminat caption_undefined folosit.')
părinte local = cadru: getParent ()
dacă părinte atunci
mw.log („Părintele este” .. părinte: getTitle ())
Sfârșit
mw.logObject (args, 'args')
retval = retval .. '[[Categorie: Hărți de locație cu posibile erori | Pagină folosind parametrul eliminat]]'
Sfârșit
]]
dacă arg . float == „centru” atunci
retval = retval .. '</div>'
Sfârșit
returnează retval
Sfârșit

funcție locală markOuterDiv ( x , y , imageDiv , labelDiv )
întoarce-te mw . html . create ( 'div' )
: cssText ( 'poziție: absolut; sus:' .. rotund ( y , 3 ) .. '%; stânga:' .. rotund ( x , 3 ) .. '%; înălțime: 0; lățime: 0; marjă: 0; umplutură: 0 ' )
: nod ( imageDiv )
: nod ( labelDiv )
Sfârșit

Funcția locală markImageDiv (marca, marksize, etichetă, link - ul, alt, titlu)
local builder = mw . html . create ( 'div' )
: cssText ( 'poziție: absolut; text-align: centru; stânga: -' .. rotund ( mărime / 2 ) .. 'px; sus: -' .. rotund ( mărime / 2 ) .. 'px; lățime: ' .. marksize .. ' px; font-size: ' .. marksize .. ' px; înălțimea liniei: 0 ' )
: attr ( „titlu” , titlu )
dacă mărime ~ = 0 atunci
constructor : wikitext ( string.format (
'[[Fișier:% s |% dx% dpx |% s | link =% s% s]]' ,
marca ,
mărime ,
mărime ,
eticheta ,
link ,
alt și ( '| alt =' .. alt ) sau ''
)))
Sfârșit
constructor de retur
Sfârșit

Funcția locală markLabelDiv (label, label_size, label_width, poziție, fundal, x, marksize)
local builder = mw . html . create ( 'div' )
: cssText ( 'font-size:' .. label_size .. '%; înălțimea liniei: 110%; poziția: absolută; lățimea:' .. label_width .. 'em' )
distanță locală = rotund ( mărime / 2 + 1 )
local spanCss
if position == 'top' then - specificat top
constructor : cssText ( 'jos:' .. distanță .. 'px; stânga:' .. ( - label_width / 2 ) .. '; text-align: center' )
pozitia elseif == 'jos' apoi - partea de jos specificata
builder : cssText ( 'top:' .. distance .. 'px; left:' .. ( - label_width / 2 ) .. ' them ; text-align: center' )
elseif position == 'topleft' atunci 
constructor : cssText ( 'jos:' .. distanță .. 'px; dreapta:' .. distanță .. 'px; text-align: dreapta' )
spanCss = 'float: right'
elseif poziție == 'topright' atunci 
constructor : cssText ( 'jos:' .. distanță .. 'px; stânga:' .. distanță .. 'px; text-align: left' )
spanCss = 'float: left'
elseif poziție == „stânga jos” atunci 
constructor : cssText ( 'sus:' .. distanță .. 'px; dreapta:' .. distanță .. 'px; text-align: dreapta' )
spanCss = 'float: right'
elseif position == 'bottomright' atunci 
constructor : cssText ( 'sus:' .. distanță .. 'px; stânga:' .. distanță .. 'px; text-align: left' )
spanCss = 'float: left'
elseif position == 'left' or ( tonumber ( x ) > 70 and position ~ = 'right' ) apoi - specificat stânga sau autodetectat la stânga
constructor : cssText ( 'sus: -0.75em; dreapta:' .. distanță .. 'px; text-align: dreapta' )
spanCss = 'float: right'
else - specificat la dreapta sau autodetectat la dreapta
constructor : cssText ( 'sus: -0.75em; stânga:' .. distanță .. 'px; text-align: left' )
spanCss = 'float: left'
Sfârșit
builder = builder : tag ( 'span' )
: cssText ( 'padding: 1px' )
: cssText ( spanCss )
: wikitext ( etichetă )
dacă fundal atunci
constructor : cssText ( 'background-color:' .. fundal )
Sfârșit
return builder : done ()
Sfârșit

funcția locală getX ( longitudine , stânga , dreapta )
lățime locală = ( dreapta - stânga ) % 360
dacă lățimea == 0 atunci
lățime = 360
Sfârșit
local distanceFromLeft = ( longitudine - stânga ) % 360
- distanța necesară după hartă spre dreapta este egală cu distanceFromLeft - width. distanța necesară după hartă spre stânga este egală cu 360 - distanceFromLeft. pentru a minimiza întinderea paginii, mergeți în orice mod este mai scurt
dacă distanceFromLeft - width / 2 > = 180 atunci
distanceFromLeft = distanceFromLeft - 360
Sfârșit
returnează 100 * distanceFromLeft / width
Sfârșit

funcția locală getY ( latitudine , sus , jos )
returnează 100 * ( sus - latitudine ) / ( sus - jos )
Sfârșit

- Conexiune la serviciul cartografic extern
- Pentru moment folosiți openstreetmap.org. Niveluri de zoom disponibile: http://wiki.openstreetmap.org/wiki/Zoom_levels
funcție locală getLink ( lat , lon , hartă )
lățime locală , interval , zoom
if map ( 'top' ) == '' atunci
zoom = 5 - Dacă nu are extreme ale hărții (hărți de tip X / Y) se folosește o valoare medie
altceva
width = math.max ( hartă ( 'sus' ) - hartă ( 'jos' ), hartă ( 'dreapta' ) - hartă ( 'stânga' ))
bandă = 180
zoom = 1
în timp ce amplitudinea < intervalul face
zoom = zoom + 1
band = band / 2
Sfârșit
Sfârșit
returnează 'http://www.openstreetmap.org/?mlat=' .. lat .. '& mlon =' .. lon .. '& zoom =' .. zoom
Sfârșit

marca funcției locale ( cadru , argumente , hartă )
dacă nu argumentează atunci
args = getArgs ( cadru , { wrappers = 'Șablon: Harta locației ~' })
Sfârșit
dacă nu hartă atunci
hartă = p . getMapParams ( args [ 1 ], cadru )
Sfârșit
	
- numele parametrilor din it.wiki
argumente . lat_deg = args . lat_deg sau args . latitudine grade
argumente . lat_min = args . lat_min sau args . latitudine În primul rând
argumente . lat_sec = args . lat_sec sau args . latitudine Secunde
argumente . lat_dir = args . lat_dir sau args . latitudine NS
argumente . lon_deg = args . lon_deg sau args . longitudine grade
argumente . lon_min = args . lon_min sau args . longitudine În primul rând
argumente . lon_sec = args . lon_sec sau args . longitudine Secunde
argumente . lon_dir = args . lon_dir sau args . longitudinea EW
	
x local , y , longitudine , latitudine
longitudine = 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' )
dacă nu longitudine și nu latitudine și args . atunci folosiți Wikidata
- Dacă nu au furnizat niciuna dintre coordonate, încercați Wikidata. Dacă au furnizat una, dar nu alta, nu.
entitate locală = mw . wikibase . getEntity ()
dacă entitate și entitate . creanțe și entitate . pretenții . P625 și entitate . pretenții . P625 [ 1 ]. mainsnak . snaktype == „valoare” atunci
valoare locală = entitate . pretenții . P625 [ 1 ]. mainsnak . valoare de date . valoare
longitudine , latitudine = valoare . longitudine , valoare . latitudine
Sfârșit
Sfârșit
dacă nu longitudine atunci
eroare ( „Longitudine nespecificată” )
Sfârșit
dacă nu latitudine atunci
eroare ( „Latitude nespecificată” )
Sfârșit
local builder = mw . html . create ()
- [[
- Categorii care nu există în it.wiki
if (not args.lon_deg) ~ = (not args.lat_deg) atunci
constructor: wikitext ('[[Categorie: Hărți de localizare cu precizii diferite de longitudine și latitudine | grade]]')
elseif (nu args.lon_min) ~ = (nu args.lat_min) atunci
constructor: wikitext ('[[Categorie: Hărți de locație cu precizii diferite de longitudine și latitudine | Minute]]')
elseif (not args.lon_sec) ~ = (not args.lat_sec) atunci
builder: wikitext ('[[Categorie: Hărți de locație cu precizii diferite de longitudine și latitudine | Secunde]]')
elseif (nu args.lon_dir) ~ = (nu args.lat_dir) atunci
constructor: wikitext ('[[Categorie: Hărți de localizare cu precizii diferite de longitudine și latitudine | emisferă]]')
elseif (not args.long) ~ = (not args.lat) atunci
constructor: wikitext ('[[Categorie: Hărți de locație cu precizii diferite de longitudine și latitudine | Zecimal]]')
Sfârșit
]] -
- [[
- Parametrii care nu există în it.wiki sau învechi
dacă args.skew sau args.lon_shift sau args.markhigh atunci
mw.log („Parametru eliminat utilizat în invocație.”)
părinte local = cadru: getParent ()
dacă părinte atunci
mw.log („Părintele este” .. părinte: getTitle ())
Sfârșit
mw.logObject (args, 'args')
builder: wikitext ('[[Categorie: Hărți de locație cu posibile erori | Pagină folosind parametrul eliminat]]')
Sfârșit
dacă hartă ('înclinare') ~ = '' sau hartă ('lat_skew') ~ = '' sau hartă ('încrucișări180') ~ = '' sau hartă ('tip') ~ = '' atunci
mw.log („Parametru eliminat utilizat în definirea hărții” .. map ())
builder: wikitext ('[[Categorie: Hărți de localizare cu posibile erori | Hartă folosind parametrul eliminat]]')
Sfârșit
]]
dacă hartă ( 'x' ) ~ = '' atunci
x = tonumber ( mw . ext . ParserFunctions . expr ( map ( 'x' , { latitude , longitude }))))
altceva
x = tonumber (getX (longitudine, harta ( 'stânga'), harta ( 'dreapta')))
Sfârșit
dacă hartă ( 'y' ) ~ = '' atunci
y = tonumber ( mw . ext . ParserFunctions . expr ( hartă ( 'y' , { latitudine , longitudine })))
altceva
y = tonumber (gety (latitudine, hartă ( 'sus'), harta ( 'fund')))
Sfârșit
dacă ( x < 0 sau x > 100 sau y < 0 sau y > 100 ) și nu args . afară atunci
eroare ( „Coordonate în afara hărții” )
- [[
- în it.wiki nu există nicio categorie
mw.log („Marcați plasarea în afara limitelor hărții fără setul de drapel exterior. x =„ .. x .. ”, y =„ .. y)
părinte local = cadru: getParent ()
dacă părinte atunci
mw.log („Părintele este” .. părinte: getTitle ())
Sfârșit
mw.logObject (args, 'args')
builder: wikitext ('[[Categorie: Hărți de localizare cu posibile erori | Steagul exterior nu este setat cu marcajul în afara hărții]])
]]
Sfârșit
local mark = args . marcaj sau hartă ( „marcaj” )
dacă marca == " atunci
mark = 'Pog.svg roșu'
Sfârșit
local marksize = tonumber ( args . marksize ) sau tonumber ( hartă ( 'marksize' )) sau 8
dacă arg . link == zero atunci
argumente . link = getLink ( latitudine , longitudine , hartă )
Sfârșit
local imageDiv = markImageDiv ( mark , marksize , args . label sau mw . title . getCurrentTitle (). text , args . link sau '' , args . alt , args [ 2 ])
eticheta locală Div
dacă arg . eticheta și argumente . poziția ~ = 'none' atunci
labelDiv = markLabelDiv (args. etichetă, args. label_size sau 90, args. label_width sau 6, ARGS. poziție, ARGS. fundal, x, marksize)
Sfârșit
return builder : nod ( markOuterDiv ( x , y , imageDiv , labelDiv ))
Sfârșit

container de funcții locale ( cadru , argumente , hartă )
dacă nu argumentează atunci
args = getArgs ( cadru , { wrappers = 'Șablon: Harta locației +' , valueFunc = p . valueFunc })
Sfârșit
dacă nu hartă atunci
hartă = p . getMapParams ( args [ 1 ], cadru )
Sfârșit
retur p . sus ( cadru , argumente , hartă ) .. ( argumente . locuri sau '' ) .. p . jos ( cadru , argumente , hartă )
Sfârșit

funcția locală principală ( cadru , argumente , hartă )
dacă nu argumentează atunci
args = getArgs ( cadru , { wrappers = 'Șablon: Harta locației' , valueFunc = p . valueFunc })
Sfârșit
dacă arg . useWikidata == zero atunci
argumente . useWikidata = true
Sfârșit
dacă nu hartă atunci
hartă = p . getMapParams ( args [ 1 ], cadru )
Sfârșit
- parametrul „sinoptic” este utilizat pentru a seta valorile și valorile implicite ale parametrilor
- adecvat pentru utilizarea hărții de locație într-un sinoptic
dacă arg . sinoptic atunci
argumente . position = 'centru'
argumente . float = „centru”
argumente . subtitrare = "
argumente . width = args . lățime sau 260
argumente . max_height = args . max_height sau 400
Sfârșit
retur p . sus ( cadru , argumente , hartă ) .. tostring ( marcare ( cadru , argumente , hartă ) ) .. p . jos ( cadru , argumente , hartă )
Sfârșit

- Handler de eroare pentru xpcall, formatează eroarea și adaugă categoria
funcție locală errhandler ( msg )
local errmsg = msg : match ( ': (. +) $' )
local args = mw . getCurrentFrame (): getParent (). argumente
pisica locala = "
local cat2 = "
dacă arg . noerr atunci
cat2 = '- eroare ascunsă'
Sfârșit
dacă mw . titlu . getCurrentTitle (). spațiu de nume == 0 atunci
dacă errmsg : match ( '^ Harta nu este disponibilă' ) sau
errmsg : match ( 'nu este un nume de hartă valid $' ) atunci
cat = '[[Categorie: Pagini cu hartă de locație inexistentă' .. cat2 .. ']]'
elseif errmsg == 'Coordonatele în afara hărții' atunci
cat = ( args . cat_off map and args . cat_off map ~ = '' ) și
string.format ( '[[Categorie:% s]]' , args . cat_offmap ) sau
( '[[Categorie: Pagini cu coordonate în afara hărții de locație' .. cat2 .. ']]' )
altceva
cat = '[[Categorie: erori de compilare a șablonului de hartă de locație' .. cat2 .. ']]'
Sfârșit
Sfârșit
întoarce arg . noerr și pisică sau
string.format ( '<div class = "touch colors error" style = "width: 200px; text-align: center; margin-left: auto; margin-right: auto;">% s </div>% s' , errmsg , pisică )
Sfârșit

-------------------------------------------------- -----------------------------
- API
-------------------------------------------------- -----------------------------

- Comparativ cu versiunea originală a en.wiki, în it.wiki punctele de intrare
- sunt chemați prin xpcall pentru a prinde excepții, etc.
- nu clasificați în genericul [[: Categorie: Pagini cu erori de script]]
- dar în categorii specifice și fiind capabil să formateze eroarea.

- Punct de intrare pentru {{Location map ~}}
funcția p . marcaj ( cadru , argumente , hartă )
return select ( 2 , xpcall ( function () marca return ( frame , args , map ) end , errhandler ))
Sfârșit

- Punct de intrare pentru {{Harta locației +}}
- Notă: alăturat de [[: en: Module: Location map / multi]] deoarece restul modulului era necesar pentru [[: en: Template: Location map many]] care nu era prezent în it.wiki
funcția p . container ( cadru , argumente , hartă )
return select ( 2 , xpcall ( function () return container ( frame , args , map ) end , errhandler ))
Sfârșit

- Punct de intrare pentru {{Harta locației}}
funcția p . principal ( cadru , argumente , hartă )
return select ( 2 , xpcall ( function () return main ( frame , args , map ) end , errhandler ))
Sfârșit

retur p