Diferencia entre revisiones de «Módulo:URL»

De Wiki TVenserio
wikitves>MSGJ
(fixes for pen icon)
m (1 revisión importada)
Línea 1: Línea 1:
--
local z = {}
-- This module implements {{URL}}
--
-- See unit tests at [[Module:URL/testcases]]


local p = {}
function z.enlazar(url, texto)
--if true then return 'url: ' .. (url or '') .. ' texto: ' .. (texto or '') end
local function safeUri(s)
    if not url or
local success, uri = pcall(function()
      url:match('^%s*$') then
return mw.uri.new(s)
return
end)
elseif url:find('%[') or
if success then
url:match('^{{{.*}}}$') then  -- Por ejemplo, un parámetro de una plantilla, {{{página web|}}}
return uri
return url
elseif z.esValida(url) then
urlCorregida = url
else
urlCorregida = 'http://' .. url
end
end
end
 
if texto then
local function extractUrl(args)
    return '[' .. urlCorregida .. ' ' .. texto .. ']'
for name, val in pairs(args) do
else
if name ~= 2 and name ~= "msg" then
textoCorregido = urlCorregida:match('^http://(.+)') or
local url = name .. "=" .. val;
                urlCorregida:match('^https://(.+)') or
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
                urlCorregida
local uri = safeUri(url);
if uri and uri.host then
-- Eliminar la / al final
return url
textoCorregido = textoCorregido:match('(.+)/$') or textoCorregido
end
end
return '[' .. urlCorregida .. ' ' .. textoCorregido .. ']'
end
end
end
end


function p._url(url, text, msg)
function z.url(frame)
url = mw.text.trim(url or '')
if not frame or not frame.args then
text = mw.text.trim(text or '')
return
local nomsg = (msg or ''):sub(1,1):lower() == "n" or msg == 'false' -- boolean: true if msg is "false" or starts with n or N
 
if url == '' then
if text == '' then
if nomsg then
return nil
else
return mw.getCurrentFrame():expandTemplate{ title = 'tlx', args = { 'URL', "''example.com''", "''optional display text''" } }
end
else
return text
end
end
end
 
-- If the URL contains any unencoded spaces, encode them, because MediaWiki will otherwise interpret a space as the end of the URL.
return z.enlazar(frame.args[1], frame.args[2])
url = mw.ustring.gsub(url, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
 
-- If there is an empty query string or fragment id, remove it as it will cause mw.uri.new to throw an error
url = mw.ustring.gsub(url, '#$', '')
url = mw.ustring.gsub(url, '%?$', '')
 
-- If it's an HTTP[S] URL without the double slash, fix it.
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
 
-- Handle URLs from Wikidata of the format http://
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?)://', 'http%1://')
 
local uri = safeUri(url)
 
-- Handle URL's without a protocol and URL's that are protocol-relative,
-- e.g. www.example.com/foo or www.example.com:8080/foo, and //www.example.com/foo
if uri and (not uri.protocol or (uri.protocol and not uri.host)) and url:sub(1, 2) ~= '//' then
url = 'http://' .. url
uri = safeUri(url)
end
 
if text == '' then
if uri then
if uri.path == '/' then uri.path = '' end
 
local port = ''
if uri.port then port = ':' .. uri.port end
 
text = mw.ustring.lower(uri.host or '') .. port .. (uri.relativePath or '')
 
-- Add <wbr> before _/.-# sequences
text = mw.ustring.gsub(text,"(/+)","<wbr/>%1")      -- This entry MUST be the first. "<wbr/>" has a "/" in it, you know.
text = mw.ustring.gsub(text,"(%.+)","<wbr/>%1")
-- text = mw.ustring.gsub(text,"(%-+)","<wbr/>%1") -- DISABLED for now
text = mw.ustring.gsub(text,"(%#+)","<wbr/>%1")
text = mw.ustring.gsub(text,"(_+)","<wbr/>%1")
else -- URL is badly-formed, so just display whatever was passed in
text = url
end
end
 
return mw.ustring.format('<span class="url">[%s %s]</span>', url, text)
end
end


--[[
--function z.enlacePlano
The main entry point for calling from Template:URL.
-- Ver la plantilla Enlace plano
--]]
-- return
function p.url(frame)
--end
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
local msg = templateArgs.msg or parentArgs.msg or ''
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
return p._url(url, text, msg)
end


--[[
-- Ver la función checkurl del módulo de citas.
The entry point for calling from the forked Template:URL2.
function z.esValida(url)
This function returns no message by default.
return url:sub(1,2) == "//" or url:match( "^[^/]*:" )
It strips out wiki-link markup, html tags, and everything after a space.
--]]
function p.url2(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
-- default to no message
local msg = templateArgs.msg or parentArgs.msg or 'no'
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
-- if the url came from a Wikidata call, it might have a pen icon appended
-- we want to keep that and add it back at the end.
local u1, penicon = mw.ustring.match( url, "(.*)(&nbsp;<span class='penicon.*)" )
if penicon then url = u1 end
-- strip out html tags and [ ] from url
url = (url or ''):gsub("<[^>]*>", ""):gsub("[%[%]]", "")
-- truncate anything after a space
url = url:gsub("%%20", " "):gsub(" .*", "")
return (p._url(url, text, msg) or "") .. (penicon or "")
end
end


return p
return z

Revisión del 17:45 15 mar 2021

La documentación para este módulo puede ser creada en Módulo:URL/doc

local z = {}

function z.enlazar(url, texto)
	--if true then return 'url: ' .. (url or '') .. ' texto: ' .. (texto or '') end
    if not url or 
       url:match('^%s*$') then
		return
	elseif url:find('%[') or 
		url:match('^&#123;&#123;&#123;.*&#125;&#125;&#125;$') then  -- Por ejemplo, un parámetro de una plantilla, {{{página web|}}}
		return url
	elseif z.esValida(url) then
		urlCorregida = url
	else
		urlCorregida = 'http://' .. url
	end
	
	if texto then
	    return '[' .. urlCorregida .. ' ' .. texto .. ']'
	else
		textoCorregido = urlCorregida:match('^http://(.+)') or 
		                 urlCorregida:match('^https://(.+)') or
		                 urlCorregida
		
		-- Eliminar la / al final
		textoCorregido = textoCorregido:match('(.+)/$') or textoCorregido
		
		return '[' .. urlCorregida .. ' ' .. textoCorregido .. ']'
	end
end

function z.url(frame)
	if not frame or not frame.args then
		return
	end
	
	return z.enlazar(frame.args[1], frame.args[2])
end

--function z.enlacePlano
	-- Ver la plantilla Enlace plano
--	return
--end

-- Ver la función checkurl del módulo de citas.
function z.esValida(url)
	return url:sub(1,2) == "//" or url:match( "^[^/]*:" )
end

return z