Module:URL: Difference between revisions

m
1 revision imported
m (1 revision imported)
m (1 revision imported)
 
(4 intermediate revisions by 4 users not shown)
Line 2:
-- This module implements {{URL}}
--
-- See unit tests at [[Module:URL/teststestcases]]
 
local p = {}
Line 17:
local function extractUrl(args)
for name, val in pairs(args) do
localif urlname ~= 2 and name ..~= "=msg" .. val;then
local url = name .. "=" .. val;
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
local uri = safeUri(url);
if local uri and= uri.host thensafeUri(url);
if uri and uri.host then
return url
end
end
end
Line 89 ⟶ 91:
 
--[[
The main entry point for calingcalling from Template:URL.
--]]
function p.url(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1] or ''
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 ''
if not text then
url = url or extractUrl(templateArgs) or extractUrl(parentArgs)
end
text = text or ''
return p._url(url, text, msg)
end
Line 112 ⟶ 111:
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1] or ''
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 text == '' then
-- if the url came from a Wikidata call, it might have a pen icon appended
url = url or extractUrl(templateArgs) or extractUrl(parentArgs)
-- we want to keep that and add it back at the end.
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
 
verified
704

edits