Module:Ref: Difference between revisions

From Halopedia, the Halo wiki

No edit summary
No edit summary
Line 56: Line 56:
Generates the text content of a standard format reference from the provided
Generates the text content of a standard format reference from the provided
arguments. Content table supports unlimited numeric arguments, in
arguments. Content table supports unlimited numeric arguments, in
addition to Section, Detail, Quote, Quotee and Suffix arguments.
addition to section, detail, quote, quotee and suffix arguments.


@param content - table - The content of the reference
@param content - table - The content of the reference
Line 63: Line 63:
]]
]]
function makeRefText( content )
function makeRefText( content )
local text = ''
local text = "''" .. tostring( content[ 1 ] or '' ) .. "''"
if not utils.empty( content.section ) then
text = text .. ' - ' .. tostring( content.section )
end
content[ 1 ] = ''
for i, v in ipairs( content or {} ) do
if not utils.empty( v ) then
text = text .. ', ' .. tostring( v )
end
end
if not utils.empty( content.detail ) or not utils.empty( content.quote ) then
text = text .. ':'
if not utils.empty( content.detail ) then
text = text .. ' ' .. tostring( content.detail )
end
if not utils.empty( content.quote ) then
text = text .. ' ' .. tostring( content.quote )
if not utils.empty( content.quotee ) then
text = text .. ' - ' .. tostring( content.quotee )
end
end
end
if not utils.empty( content.suffix ) then
text = text .. ' <small>' .. tostring( content.suffix ) .. '</small>'
end
return text
return text
end
end
Line 158: Line 182:
function ref.generic( frame )
function ref.generic( frame )
local args, out = arguments.preprocess( frame, {
local args, out = arguments.preprocess( frame, {
[ 'required' ] = { 'heading' },
[ 'recommended' ] = { 2 },
[ 'valid' ] = { 'id', 'subheading', 3, 4, 5, 6, 7, 'detail', 'quote',
[ 'valid' ] = { 'id', 'subheading', 3, 4, 5, 6, 7, 'detail', 'quote',
'quotee', 'quoteelinktext', 'suffix' },
'quotee', 'quoteelinktext', 'suffix' },
[ 'recommended' ] = { 2 },
[ 'aliases' ] = { [ 1 ] = 'heading', [ 'section' ] = 'subheading' }
[ 'required' ] = { 'heading' },
[ 'aliases' ] = { [ 1 ] = 'heading' }
})
})
return out .. args.heading
local content = {
args.heading, args[2], args[3], args[4], args[5], args[6], args[7],
[ 'section' ] = args.subheading,
[ 'detail' ] = args.detail,
[ 'quote' ] = args.quote,
[ 'quotee' ] = args.quotee,
[ 'suffix' ] = args.suffix
}
return out .. makeStandardRef( frame, args.id, nil, content)
end
end


return ref
return ref

Revision as of 13:20, December 27, 2021

vde
Lua Module Documentation

This module provides the backend implementations of the Ref templates.

Public Functions

ref.ref

Invocation entry point for Template:Ref. Takes arguments Id, Name, Group and Text from the template parser frame and constructs the appropriate reference.

Parameters:

  • frame (object) - The current parser frame

Returns:

wikitext - the constructed reference

ref.list

Invocation entry point for Template:Ref/List. Takes argument Group from the template parser frame and constructs the appropriate reference list.

Parameters:

  • frame (object) - The current parser frame

Returns:

wikitext - the constructed reference list

ref.generic

Invocation entry point for Template:Ref/Generic. Currently unimplemented.

Parameters:

  • frame (object) - The current parser frame

Returns:

wikitext - the constructed reference


Private Functions

makeRef

Constructs a reference with the given text, using the provided parser frame, ref id and group.

Parameters:

  • frame (object) - The current parser frame
  • id (string) - The id to give to the reference
  • group (string) - The group to include the reference in
  • text (string) - The text of the reference

Returns:

wikitext - the constructed reference

makeStandardRef

Constructs a standard format reference using the given parameters, with the provided content. Content table supports unlimited numeric arguments, in addition to Section, Detail, Quote, Quotee and Suffix arguments.

Parameters:

  • frame (object) - The current parser frame
  • id (string) - The id to give to the reference
  • group (string) - The group to include the reference in
  • content (table) - The content of the reference

Returns:

wikitext - the constructed reference

makeRefText

Generates the text content of a standard format reference from the provided arguments. Content table supports unlimited numeric arguments, in addition to section, detail, quote, quotee and suffix arguments.

Parameters:

  • content (table) - The content of the reference

Returns:

wikitext - the constructed reference text

makeReuse

Constructs wikitext to reuse an existing reference with the given id, in the given group.

Parameters:

  • frame (object) - The current parser frame
  • id (string) - The id to give to the reference
  • group (string) - The group to include the reference in

Returns:

wikitext - the constructed reference reuse wikitext

makeList

Constructs the list of references in a given group.

Parameters:

  • frame (object) - The current parser frame
  • group (string) - The reference group to list
  • colNum (int) - The number of columns to use in the list
  • colWidth (int) - The width list columns should be
  • colGap (int) - The size of the gap between list columns

Returns:

wikitext - the constructed reference


Code

A copy of the code for this module follows:


local utils = require( 'Module:Utils' )
local arguments = require( 'Module:Arguments' )

--------------------------------------------------------------------------------
------------------------------- PRIVATE FUNCTIONS ------------------------------
--------------------------------------------------------------------------------

--[[[
Constructs a reference with the given text, using the provided parser frame, ref
id and group.

@param frame - object - The current parser frame
@param id - string - The id to give to the reference
@param group - string - The group to include the reference in
@param text - string - The text of the reference

@return wikitext - the constructed reference
]]
function makeRef( frame, id, group, text )
	if utils.empty( text ) then
		return utils.error(
			'No reference text was specified!',
			'ref',
			'Pages with empty citations' )
	end
	text = tostring( text )
	local args = {}
	if not utils.empty( id ) then
		args.name = tostring( id )
	end
	if not utils.empty( group ) then
		args.group = tostring( group )
	end
	
	return frame:extensionTag( 'ref', text, args )
end

--[[[
Constructs a standard format reference using the given parameters, with the
provided content. Content table supports unlimited numeric arguments, in
addition to Section, Detail, Quote, Quotee and Suffix arguments.

@param frame - object - The current parser frame
@param id - string - The id to give to the reference
@param group - string - The group to include the reference in
@param content - table - The content of the reference

@return wikitext - the constructed reference
]]
function makeStandardRef( frame, id, group, content )
	local text = makeRefText( content )
	return makeRef( frame, id, group, text )
end

--[[[
Generates the text content of a standard format reference from the provided
arguments. Content table supports unlimited numeric arguments, in
addition to section, detail, quote, quotee and suffix arguments.

@param content - table - The content of the reference

@return wikitext - the constructed reference text
]]
function makeRefText( content )
	local text = "''" .. tostring( content[ 1 ] or '' ) .. "''"
	if not utils.empty( content.section ) then
		text = text .. ' - ' .. tostring( content.section )
	end
	content[ 1 ] = ''
	for i, v in ipairs( content or {} ) do
		if not utils.empty( v ) then
			text = text .. ', ' .. tostring( v )
		end
	end
	if not utils.empty( content.detail ) or not utils.empty( content.quote ) then
		text = text .. ':'
		if not utils.empty( content.detail ) then
			text = text .. ' ' .. tostring( content.detail )
		end
		if not utils.empty( content.quote ) then
			text = text .. ' ' .. tostring( content.quote )
			if not utils.empty( content.quotee ) then
				text = text .. ' - ' .. tostring( content.quotee )
			end
		end
	end
	if not utils.empty( content.suffix ) then
		text = text .. ' <small>' .. tostring( content.suffix ) .. '</small>'
	end
	return text
end

--[[[
Constructs wikitext to reuse an existing reference with the given id, in the
given group.

@param frame - object - The current parser frame
@param id - string - The id to give to the reference
@param group - string - The group to include the reference in

@return wikitext - the constructed reference reuse wikitext
]]
function makeReuse( frame, id, group )
	local args = {}
	if id == nil or id == '' then
		return utils.error(
			'No id was specified for ref reuse!',
			'ref',
			'Pages containing missing template parameter errors' )
	else
		args.name = tostring( id )
	end
	if group ~= nil and group ~= '' then
		args.group = tostring( group )
	end
	return frame:extensionTag( 'ref', '', args )
end

--[[[
Constructs the list of references in a given group.

@param frame - object - The current parser frame
@param group - string - The reference group to list
@param colNum - int - The number of columns to use in the list
@param colWidth - int - The width list columns should be
@param colGap - int - The size of the gap between list columns

@return wikitext - the constructed reference
]]
function makeList( frame, group, colNum, colWidth, colGap )
	local args = {}
	if not utils.empty( group ) then
		args.group = tostring( group )
	end
	
	return frame:extensionTag( 'references', '', args )
end

--------------------------------------------------------------------------------
------------------------------- PUBLIC FUNCTIONS -------------------------------
--------------------------------------------------------------------------------

local ref = {}

--[[[
Invocation entry point for Template:Ref. Takes arguments Id, Name, Group and
Text from the template parser frame and constructs the appropriate reference.

@param frame - object - The current parser frame

@return wikitext - the constructed reference
]]
function ref.ref( frame )
	local templateFrame = frame:getParent()
	local id = templateFrame.args['Id'] or templateFrame.args['Name']
	local group = templateFrame.args['Group']
	local text = templateFrame.args[1] or templateFrame.args['Text']
	return makeRef( frame, text, id, group )
end

--[[[
Invocation entry point for Template:Ref/List. Takes argument Group from the
template parser frame and constructs the appropriate reference list.

@param frame - object - The current parser frame

@return wikitext - the constructed reference list
]]
function ref.list( frame )
	local templateFrame = frame:getParent()
	local group = templateFrame.args['Group']
	return makeList( frame, group, colNum, colWidth, colGap )
end

--[[[
Invocation entry point for Template:Ref/Generic. Currently unimplemented.

@param frame - object - The current parser frame

@return wikitext - the constructed reference
]]
function ref.generic( frame )
	local args, out = arguments.preprocess( frame, {
		[ 'required' ] = { 'heading' },
		[ 'recommended' ] = { 2 },
		[ 'valid' ] = { 'id', 'subheading', 3, 4, 5, 6, 7, 'detail', 'quote',
			'quotee', 'quoteelinktext', 'suffix' },
		[ 'aliases' ] = { [ 1 ] = 'heading', [ 'section' ] = 'subheading' }
	})
	local content = {
		args.heading, args[2], args[3], args[4], args[5], args[6], args[7],
		[ 'section' ] = args.subheading,
		[ 'detail' ] = args.detail,
		[ 'quote' ] = args.quote,
		[ 'quotee' ] = args.quotee,
		[ 'suffix' ] = args.suffix
	}
	return out .. makeStandardRef( frame, args.id, nil, content)
end

return ref