Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Portada
mantenimiento
Páginas nuevas
Página aleatoria
Cambios recientes
Páginas especiales
Ayuda
Comunidad
Portal de la comunidad
Centro de reportes
Tablón de solicitudes
Tutorial de edición
Políticas
Buscar
Buscar
Apariencia
Crear una cuenta
Acceder
Herramientas personales
Crear una cuenta
Acceder
Páginas para editores desconectados
más información
Contribuciones
Discusión
Edición de «
Módulo:Mapa de localización
»
Módulo
Discusión
English
Leer
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar código
Ver historial
Actualizar
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Enlace corto
En otros proyectos
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
require('Módulo:No globals') local p = {} local getArgs = require('Módulo:Argumentos').obtenerArgumentos 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('Se debe especificar el nombre de la definición del mapa de localización que va a usar', 2) end map = mw.text.trim(map) --local moduletitle = mw.title.new('Módulo:Mapa de localización/datos/' .. map) --mw.log('Nombre ' .. 'Módulo:Mapa de localización/datos/' .. map) --if not moduletitle then -- mw.log('Nombre no válido ' .. 'Módulo:Mapa de localización/datos/' .. map) -- error('"' .. map .. '" no es un nombre válido para una definición de mapa de localización', 2) --elseif moduletitle.exists then -- local mapData = mw.loadData('Módulo:Mapa de localización/datos/' .. map) -- return function(name, params) -- if name == nil then -- return 'Módulo:Mapa de localización/datos/' .. 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 --elseif mw.title.new('Plantilla:Mapa de localización de ' .. map).exists then if mw.title.new('Plantilla:Mapa de localización de ' .. map).exists then local cache = {} if type(frame) ~= 'table' or type(frame.expandTemplate) ~= 'function' then error('Debe proporcionar el objeto frame de la página si utiliza un mapa implementado mediante una plantilla') end return function(name, params) if params then return frame:expandTemplate{title = 'Plantilla:Mapa de localización de ' .. map, args = { name, unpack(params) }} else if name == nil then return 'Plantilla:Mapa de localización de ' .. map elseif cache[name] == nil then cache[name] = frame:expandTemplate{title = 'Plantilla:Mapa de localización de ' .. map, args = { name }} end return cache[name] end end else error('No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/' .. map .. ' ni la Plantilla:Mapa de localización de ' .. map, 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, O = -1, o = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if not degrees or degrees == '' then if not decimal or decimal == '' then return nil end local retval = tonumber(decimal) if not retval then error('El valor "' .. decimal .. '" provisto en ' .. direction .. ' no es válido', 2) end return retval end decimal = tonumber(degrees) if not decimal then error('El valor de grados "' .. degrees .. '" provisto en ' .. direction .. ' no es válido', 2) end if minutes and minutes == '' then minutes = 0 end if seconds and seconds == '' then seconds = 0 end if minutes and not tonumber(minutes) then error('El valor de minutos "' .. minutes .. '" provisto en ' .. direction .. ' no es válido', 2) end if seconds and not tonumber(seconds) then error('El valor de segundos "' .. seconds .. '" provisto en ' .. direction .. ' no es válido', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere and hemisphere ~= '' then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('El hemisferio "' .. hemisphere .. '" provisto en ' .. direction .. ' no es válido', 2) end decimal = decimal * multiplier end return decimal end -- Efectivamente hacer removeBlanks false para el pie y mapLink, y true para todo lo demás -- Si useWikidata está presente, pero en blanco, convertirlo en false en lugar de cero -- p.top, p.bottom y sus interlocutores necesitan utilizar esto function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'pie' or key == 'caption' or key == 'maplink' or key == "enlace_mapa" then return value elseif key == 'useWikidata' or key == "usar_wikidata"then return false end end local function getContainerImage(args, map) if (args.AlternativeMap and args.AlternativeMap ~= '') or (args.mapa_alternativo and args.mapa_alternativo ~= '') then return args.AlternativeMap or args.mapa_alternativo elseif args.tipo and args.tipo ~= '' and map(args.tipo) and map(args.tipo) ~= '' then return map(args.tipo) elseif args.relief or args.relieve and map('image1') ~= '' then return map('image1') else return map('image') end end function p.top(frame, args, map) local alineacion, borde, pie, ancho, enlaceMapa, etiqueta, ImagenSuperpuesta if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end -- Variable con los parámetros en inglés o en español local width ancho = args.ancho or args.width alineacion = args['alineación'] or args.float pie = args.caption or args['pie'] enlaceMapa = args.enlace_mapa or args.maplink etiqueta = args.label or args.etiqueta borde = args.borde or args.border ImagenSuperpuesta = args.imagen_superpuesta or args.overlay_image if not ancho or ancho == '' then width = round((args.default_width or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(ancho, -2) == 'px' then width = mw.ustring.sub(ancho, 1, -3) else width = ancho end local retval = alineacion == 'center' and '<div class="center">' or '' if pie and pie ~= '' and pie ~= 'no' then retval = retval .. '<div class="noviewer thumb ' if alineacion == '"left"' or alineacion == 'left' then retval = retval .. 'tleft' elseif alineacion == '"center"' or alineacion == 'center' or alineacion == 'centrado' or alineacion == '"none"' or alineacion == 'none' then retval = retval .. 'tnone' else retval = retval .. 'tright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if borde == 'none' then retval = retval .. ';border:none' elseif borde then retval = retval .. ';border-color:' .. borde end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (borde ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div style="width:' .. width .. 'px;' if alineacion == '"left"' or alineacion == 'left' then retval = retval .. 'float:left;clear:left' elseif alineacion == '"center"' or alineacion == 'center' or alineacion == 'centrado' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif alineacion == '"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) retval = string.format( '%s[[Archivo:%s|%spx|%s%s]]', retval, image, width, args.alt or ('alt=' .. (etiqueta or mw.title.getCurrentTitle().text) .. ' ubicada en ' .. map('name')), enlaceMapa and ('|link=' .. enlaceMapa) or '' ) if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[Archivo:' .. ImagenSuperpuesta .. '|' .. width .. 'px]]</div>' else return retval end end function p.bottom(frame, args, map) local alineacion, borde, pie, ancho, enlaceMapa, etiqueta, pieNoDefinido if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end -- Variable con los parámetros en inglés o en español local width ancho = args.ancho or args.width alineacion = args['alineación'] or args.float pie = args.caption or args['pie'] enlaceMapa = args.enlace_mapa or args.maplink etiqueta = args.etiqueta or args.label borde = args.borde or args.border pieNoDefinido = args.pie_no_definido or args.caption_undefined local retval = '</div>' if not pie then retval = retval .. '<div style="font-size:90%;padding-top:3px">' .. (( etiqueta or mw.title.getCurrentTitle().text) .. ' (' .. map('name') .. ')') .. '</div>' elseif pie == '' or pie == 'no' then retval = retval .. '<div style="font-size:90%;padding-top:3px"></div>' else -- Creando un vínculo sin ningún texto a propósito para que el CSS nos pueda dar una buena imagen retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:Archivo:' .. getContainerImage(args, map) .. '| ]]</div>' .. pie .. '</div>' end retval = retval .. '</div></div>' retval = retval .. (alineacion == 'center' and '</div>' or '') if pieNoDefinido then mw.log('parámetro pie_no_definido eliminado') local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') retval = retval .. '[[Categoría:Wikipedia:Mapas de localización con parámetro eliminado en la llamada]]' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv) return mw.html.create('div') :cssText('position:absolute;top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;height:0;width:0;margin:0;padding:0') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :cssText('position:absolute;text-align:center;left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px;width:' .. marksize .. 'px;font-size:' .. marksize .. 'px;line-height:0') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[Archivo:%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) local builder = mw.html.create('div') :cssText('font-size:' .. label_size .. '%;line-height:110%;position:absolute;width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) local spanCss if position == 'top' then -- specified top builder:cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em;text-align:center') elseif position == 'bottom' then -- specified bottom builder:cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em;text-align:center') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:cssText('top:-0.75em;right:' .. distance .. 'px;text-align:right') spanCss = 'float:right' else -- specified right or autodetected to right builder:cssText('top:-0.75em;left:' .. distance .. 'px;text-align:left') spanCss = 'float:left' end builder = builder:tag('span') :cssText('padding:1px') :cssText(spanCss) :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (tonumber(right) - tonumber(left)) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- La distancia más allá de la derecha del mapa es igual a distanceFromLeft - ancho. -- La distancia más allá de la izquierda del mapa es igual a 360 - distanceFromLeft. -- para minimizar el estiramiento de la página será de cualquier manera más corta 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 = 'Mapa de localización~'}) end if not map then map = p.getMapParams(args[1], frame) end local x, y, longitude, latitude, fuera, wikidata, declaraciones fuera = args.fuera or args.outside longitude = decdeg(args.lon_deg or args.lon_gra, args.lon_min, args.lon_sec or args.lon_seg, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg or args.lat_gra, args.lat_min, args.lat_sec or args.lat_seg, args.lat_dir, args.lat, 'latitude') wikidata = args.usar_wikidata or args.useWikidata if not longitude and not latitude and wikidata then -- Si no se proporcionan coordenadas se intentan obtener de Wikidata. declaraciones = require('Módulo:Wikidata').getDeclaraciones(args['entidad']) if declaraciones and declaraciones.P625 and declaraciones.P625[1].mainsnak.snaktype == 'value' then local value = declaraciones.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end end if not longitude then error('No se ha dado un valor a la longitud') end if not latitude then error('No se ha dado valor a la latitud') end local builder = mw.html.create() if args.skew or args.lon_shift or args.markhigh then mw.log('Eliminados parámetros usados en la invocación.') local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') builder:wikitext('[[Categoría:Netxipedia:Mapas de localización con parámetro eliminado en la llamada]]') end --if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' then --or map('type') ~= '' then -- mw.log('Eliminados parámetros usados en la definición del mapa ' .. map()) -- builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con parámetro eliminado en la llamada]]') --end if map('x') and map('x') ~= '' and tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) then mw.log('Existe x -' .. map('x')) x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else mw.log('No existe x') x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') and map('y') ~= '' and tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) then mw.log('Existe y -' .. map('y')) y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else mw.log('No existe y') y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not fuera then mw.log('La localización está fuera de los límites del mapa. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') builder:wikitext('[[Categoría:Netxipedia:Mapas de localización con la marca fuera de sus límites]]') end local mark = args.marca or args.mark or map('marca') or map('mark') if mark == '' then mark = 'Red pog.svg' end local etiqueta = args.etiqueta or args.label local posicion = args['posición'] or args.position local marksize = tonumber(args.marksize) or tonumber(args['tamaño_marca']) or tonumber(map('marksize')) or tonumber(map('tamaño_marca')) or 8 local imageDiv = markImageDiv(mark, marksize, etiqueta or mw.title.getCurrentTitle().text, args.enlace or args.link or '', args.alt, args[2]) local labelDiv if etiqueta and posicion ~= 'none' then labelDiv = markLabelDiv(etiqueta, args['tamaño_etiqueta'] or args.label_size or 90, args['ancho_etiqueta'] or args.label_width or 6, args['posición'] or args.position, args['color_etiqueta'] or args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv)) end function p.main(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Plantilla:Mapa de localización de ', valueFunc = p.valueFunc}) mw.log('No detectados args') if args[1] then mw.log('Nombre ' .. args[1]) end end if not args[1] then args[1] = 'Tierra' end if args.useWikidata == nil and args.usar_wikidata == nil then args.useWikidata = true end if not map then map = p.getMapParams(tostring(args[1]), frame) end return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end return p
Resumen:
Ten en cuenta que todas las contribuciones a Netxipedia se consideran publicadas bajo la Creative Commons Atribución-CompartirIgual (véase
Netxipedia:Derechos de autor
para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre.
¡No uses textos con copyright sin permiso!
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Plantillas usadas en esta página:
Plantilla:Ancla
(
editar
)
Plantilla:Anclar
(
editar
)
Plantilla:Clear
(
editar
)
Plantilla:Ep
(
editar
)
Plantilla:Mapa de localización de Croacia
(
editar
)
Plantilla:Mapa de localización de Escocia
(
editar
)
Plantilla:Mapa de localización de Fiyi
(
editar
)
Plantilla:Mapa de localización de Italia
(
editar
)
Plantilla:Mapa de localización de Nepal
(
editar
)
Plantilla:Mapa de localización de Reino Unido
(
editar
)
Módulo:Argumentos
(
editar
)
Módulo:Mapa de localización
(
editar
)
Módulo:Mapa de localización/doc
(
editar
)
Módulo:No globals
(
editar
)
Buscar
Buscar
Edición de «
Módulo:Mapa de localización
»
Añadir tema