A Lua implementation of {{External link}}.
Module source
local p = {}
local function setProtocol(url)
local protocol = mw.text.split(string.lower(url), '://', true)[1]
if protocol ~= 'http' and protocol ~= 'https' then
url = 'http://' .. url
end
return url
end
local function hasValue(arg)
return arg and #mw.text.trim(arg) > 0
end
function p.main(frame)
local args = frame:getParent().args
local target = setProtocol(args[1])
local linkWrapper = hasValue(args[5]) and args[5] or ''
local mainLink = target
local currentPage = mw.title.getCurrentTitle()
local archiveFileExists = hasValue(args.archivefile) and mw.title.new(args.archivefile, 6).file.exists
local archiveDate = type(tonumber(args.archivedate)) == 'number' and args.archivedate or '*'
local originalLink = ''
local templateStyles = ''
local category = ''
local displayText = ''
if hasValue(args[2]) then
displayText = ' ' .. args[2]
elseif hasValue(args[3]) then
displayText = ' ' .. currentPage.text
end
if args.urlstatus == 'dead' then
templateStyles = frame:extensionTag{
name = 'templatestyles',
args = {src = 'External link/styles.css'}
}
originalLink = '<sup class="original-link plainlinks" title="Original link">[' .. target .. ' (X)]</sup>'
if archiveFileExists then
mainLink = mw.title.new('Special:FilePath/' .. args.archivefile):canonicalUrl()
else
mainLink = 'https://web.archive.org/web/' .. archiveDate .. '/' .. target
end
end
if currentPage.namespace == 0 and not archiveFileExists and archiveDate == '*' then
local categoryName
if args.urlstatus == 'dead' then
categoryName = 'Memory Alpha link rot'
else
categoryName = 'Memory Alpha articles risking link rot'
end
category = '[[Category:' .. categoryName .. ']]'
end
local linkString = linkWrapper .. '[' .. mainLink .. displayText .. ']' .. linkWrapper .. originalLink
linkString = category .. templateStyles .. linkString
if hasValue(args[3]) then
local siteTarget = setProtocol(args[3])
local mainSiteLink = siteTarget
local originalSiteLink = ''
local siteDisplayText
if hasValue(args[4]) then
siteDisplayText = args[4]
else
siteDisplayText = mw.ustring.gsub(mw.text.split(siteTarget, '://', true)[2], '[wW][wW][wW]%.', '')
end
if args.urlstatus == 'dead' and not hasValue(args.site) then
originalSiteLink = '<sup class="original-link plainlinks" title="Original link">[' .. siteTarget .. ' (X)]</sup>'
mainSiteLink = 'https://web.archive.org/web/' .. archiveDate .. '/' .. target
end
local siteLinkString = '[' .. mainSiteLink .. ' ' .. siteDisplayText .. ']' .. originalSiteLink
return '<span class="plainlinks">' .. linkString .. ' at ' .. siteLinkString .. '</span>'
end
return linkString
end
return p