Module:Link if exists
Appearance
require('strict')
local p = {}
local function titleExistsUnprotected(titleObject)
return titleObject.exists
end
-- test for title existing
-- if we get an error accessing titleObject.exists, assume it doesn't exist
local function titleExists(titleObject)
local success, exists = pcall(titleExistsUnprotected, titleObject)
return success and exists
end
function p._main(args)
local title = args[1]
if not title then
return title
end
local display = args[2] or title
title = args.prefix and args.prefix..':'..title or title
local titleObject = mw.title.new(title, args.nsp)
local result = ''
if not titleObject or not titleExists(titleObject) then
result = result..(args.color and '<span style="color:'..args.color..'">' or '')
result = result..display
result = result..(args.color and '</span>' or '')
return result
end
-- use prefix only if args[2] is empty/false
display = args[2] or title
result = result..'[['
result = result..(titleObject.namespace ~= 0 and ':' or '')
result = result..(titleObject.fullText ~= display and titleObject.fullText..'|' or '')
result = result..display..']]'
return result
end
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._main(args) or ""
end
-- implement entry points that accept limited arguments
local function filteredMain(args, acceptList)
local filtered = {}
filtered[1] = args[1]
for _, key in ipairs(acceptList) do
filtered[key] = args[key]
end
return p._main(filtered) or ""
end
-- implement [[Template:Link if exists]]
function p.lie(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return filteredMain(args, {"nsp","prefix"})
end
-- implement [[Template:Auto link]]
function p.auto(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return filteredMain(args, {2})
end
--implement [[Template:Category link if exists]]
function p.clie(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
args.nsp = 'Category'
args.color = '#888'
return filteredMain(args, {2, "nsp", "color"})
end
return p