Module:Catalog lookup link

--[[	Whitespace is trimmed off both ends and the strings are urlencoded as if they were query strings.	If not specified, |article-link= is used for display as well. If both parameters are not specified, the prefix is omitted completely.	This gets added in front of the last list item instead of the default whitespace which is added without this parameter.	This may be necessary if |list-separator= is used not only to define the list separator but also parts of the item prefix	(except for the first one). (At present, this is used only to cope with format oddities of the template.)
 * 1=, |2=, |3=, |4=, |5=, |6=, |7=, |8=, |9=: Optional unnamed parameters for 0 to 9 items to be listed.
 * article-link=: Optional Wikipedia article name to link to.
 * article-name=: Optional alternative text to be displayed for |article-link= link in front of catalog link.
 * article-postfix=: Optional symbol to be displayed after article name or link (f.e. ":"; omitted, if not defined).
 * link-prefix=: Optional prefix portion of url to external catalog item(s).
 * link-postfix=: Optional postfix portion of url to external catalog item(s).
 * item-prefix=: Optional text displayed in front of each external link (omitted, if not defined)
 * item-postfix=: Optional text displayed immediately after each external link (omitted, if not defined)
 * list-separator=: Optional alternative separator displayed between list items (default: ", ", if not specified). Whitespace must be encoded.
 * list-leadout=: Optional alternative leadout text displayed between the last two list items (f.e. "and", "or", "as well as", etc., default is the |list-separator= or ", ".)
 * leadout-postfix=: Optional alternative postfix text of the leadout (see |list-leadout=) displayed between the last two list items.

]]

require('Module:No globals'); local getArgs = require ('Module:Arguments').getArgs;

local p = {};

--[[--< I S _ S E T >--

Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.

]]

local function is_set( var ) return not (var == nil or var == ''); end

--[=[-< M A K E _ W I K I L I N K >

Makes a wikilink; when both link and display text is provided, returns a wikilink in the form L|D; if only link is provided, returns a wikilink in the form L; if neither are provided or link is omitted, returns an empty string.

]=]

local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({, display, }); else return table.concat ({, link, }); end else return ''; end end

--[[--< M A I N >--

]]

function p.main (frame) local args = getArgs (frame); local result = {};

local article;

local article_postfix = args['article-postfix'] or ''; local link_prefix = args['link-prefix'] or ''; local link_postfix = args['link-postfix'] or ''; local item_prefix = args['item-prefix'] or ''; local item_postfix = args['item-postfix'] or ''; local list_separator = args['list-separator'] or ', '; local list_leadout;

if is_set (args['list-leadout']) then list_leadout = table.concat ({' ', args['list-leadout'], ' '}); else list_leadout = ''; end -- leadout-postfix?

article = make_wikilink (args['article-link'], args['article-name']); if is_set (article) then article = table.concat ({article, article_postfix}); elseif is_set (args['article-name']) then article = table.concat ({args['article-name'], article_postfix}); end

for k, item in ipairs (args) do												-- for each of the positional parameters item = mw.text.trim (item);												-- remove extraneous whitespace if is_set (link_prefix) then											-- if there is link prefix... item = table.concat ({												-- create an external link item				'[',															-- open ext link markup				link_prefix,													-- url prefix				mw.uri.encode (item),											-- item is part of url				link_postfix,													-- url postfix				' ',															-- required space between url and label				item_prefix,													-- label prefix				item,															-- item as label				item_postfix,													-- item postfix				']'																-- close ext link markup				}); else item = table.concat ({												-- create an unlinked item				item_prefix,													-- label prefix				item,															-- item as label				item_postfix,													-- item postfix				}); end

table.insert (result, item);												-- add the item to the result list end

if is_set (args['list-leadout']) then return table.concat ({article, mw.text.listToText (result, list_separator, list_leadout)}, ' '); else return table.concat ({article, table.concat (result, list_separator)}, ' '); end end

return p;