Module:Catalog lookup link: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
meta>Trappist the monk
No edit summary
meta>Ahecht
Copy from sandbox. Various formatting improvements to match existing template.
Line 32: Line 32:


local function is_set( var )
local function is_set( var )
return not (var == nil or var == '');
return (var and mw.ustring.match(var,'%S')) and true or false;
end
end


Line 51: Line 51:
return table.concat ({'[[', link, ']]'});
return table.concat ({'[[', link, ']]'});
end
end
elseif is_set (display) then
return display
else
else
return '';
return ''
end
end
end
end
Line 64: Line 66:


function p.main (frame)
function p.main (frame)
local args = getArgs (frame);
local args = getArgs (frame);
local result = {};
local out_text = '';
 
local article;
if is_set(args[1]) then
 
local result = {};
local article_postfix = args['article-postfix'] or '';
local article;
local link_prefix = args['link-prefix'] or '';
local link_postfix = args['link-postfix'] or '';
local article_postfix = args['article-postfix'] or '';
local item_prefix = args['item-prefix'] or '';
local link_prefix = args['link-prefix'] or '';
local item_postfix = args['item-postfix'] or '';
local link_postfix = args['link-postfix'] or '';
local list_separator = args['list-separator'] or ', ';
local item_prefix = args['item-prefix'] or '';
local list_leadout;
local item_postfix = args['item-postfix'] or '';
 
local list_separator = args['list-separator'] or ', ';
if is_set (args['list-leadout']) then
local leadout_postfix = args['leadout-postfix'] or ' ';
list_leadout = table.concat ({' ', args['list-leadout'], ' '});
local url_access = lock_icons[mw.text.trim(args['url-access'] or '')] or '';
else
local list_leadout;
list_leadout = '';
end
if is_set (args['list-leadout']) then
-- leadout-postfix?
list_leadout = table.concat ({
 
mw.ustring.match(mw.ustring.sub(args['list-leadout'],1,1), '[%a]') and ' ' or '',
article = make_wikilink (args['article-link'], args['article-name']);
args['list-leadout'],
if is_set (article) then
leadout_postfix,
article = table.concat ({article, article_postfix});
});
elseif is_set (args['article-name']) then
else
article = table.concat ({args['article-name'], article_postfix});
list_leadout = '';
end
end
 
for k, item in ipairs (args) do -- for each of the positional parameters
article = make_wikilink (args['article-link'], args['article-name']);
item = mw.text.trim (item); -- remove extraneous whitespace
if is_set (article) then
if is_set (link_prefix) then -- if there is link prefix...
article = table.concat ({article, article_postfix, ' '});
item = table.concat ({ -- create an external link item
elseif is_set (article_postfix) then
'[', -- open ext link markup
article = article_postfix
link_prefix, -- url prefix
end
mw.uri.encode (item), -- item is part of url
link_postfix, -- url postfix
for k, item in ipairs (args) do -- for each of the positional parameters
' ', -- required space between url and label
item = mw.text.trim (item); -- remove extraneous whitespace
item_prefix, -- label prefix
if is_set (link_prefix) then -- if there is link prefix...
item, -- item as label
item = table.concat ({ -- create an external link item
item_postfix, -- item postfix
'[', -- open ext link markup
']' -- close 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
out_text = table.concat ({article, mw.text.listToText (result, list_separator, list_leadout)});
else
else
item = table.concat ({ -- create an unlinked item
out_text = table.concat ({article, table.concat (result, list_separator)});
item_prefix, -- label prefix
item, -- item as label
item_postfix, -- item postfix
});
end
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 out_text
end
end


return p;
return p;

Revision as of 21:53, 17 July 2018

Documentation for this module may be created at Module:Catalog lookup link/doc

--[[
|1=, |2=, |3=, |4=, |5=, |6=, |7=, |8=, |9=: Optional unnamed parameters for 0 to 9 items to be listed.
	Whitespace is trimmed off both ends and the strings are urlencoded as if they were query strings.
|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.
	If not specified, |article-link= is used for display as well. If both parameters are not specified, the prefix is omitted completely.
|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.
	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 {{MR}} template.)

]]

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 (var and mw.ustring.match(var,'%S')) and true or false;
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 ({'[[', link, '|', display, ']]'});
		else
			return table.concat ({'[[', link, ']]'});
		end
	elseif is_set (display) then
		return display
	else
		return ''
	end
end



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


]]

function p.main (frame)
	local args = getArgs (frame);
	local out_text = '';
	
	if is_set(args[1]) then
		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 leadout_postfix = args['leadout-postfix'] or ' ';
		local url_access = lock_icons[mw.text.trim(args['url-access'] or '')] or '';
		local list_leadout;
		
		if is_set (args['list-leadout']) then
			list_leadout = table.concat ({
				mw.ustring.match(mw.ustring.sub(args['list-leadout'],1,1), '[%a]') and ' ' or '',
				args['list-leadout'],
				leadout_postfix,
			});
		else
			list_leadout = '';
		end
		
		article = make_wikilink (args['article-link'], args['article-name']);
		if is_set (article) then
			article = table.concat ({article, article_postfix, '&nbsp;'});
		elseif is_set (article_postfix) then
			article = 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
			out_text = table.concat ({article, mw.text.listToText (result, list_separator, list_leadout)});
		else
			out_text = table.concat ({article, table.concat (result, list_separator)});
		end
	end
	
	return out_text
end

return p;