Jump to content

Module:Link if exists

From Simple English Wikipedia, the free encyclopedia


Implements {{Link if exists}} and {{Auto link}}.

{{#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