Module:Link if exists
Appearance
Implements {{Link if exists}} and {{Auto link}}.
Usage
[change source]{{#invoke:Link if exists|main}}
Arguments
[change source]- 1
- title of page to link to
- 2
- text to display
- prefix
- prepend this string to title
- nsp
- namespace for title, does not display
- color
- Color of text if no link is found
- hide_display
- If page does not exist, do not display anything
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 titleObject and titleExists(titleObject) then
-- 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..']]'
elseif not args.hide_display then
result = result..(args.color and '<span style="color:'..args.color..'">' or '')
result = result..display
result = result..(args.color and '</span>' or '')
end
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", "hide_display"})
end
return p