Module:Ref: Difference between revisions

From Halopedia, the Halo wiki

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


@param frame - object - The current parser frame
@param frame - object - The current parser frame
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 subheading, detail, quote, quotee and suffix arguments.


@param content - table - The content of the reference
@param content - table - The content of the reference
Line 64: Line 64:
function makeRefText( content )
function makeRefText( content )
local text = "''" .. tostring( content[ 1 ] or '' ) .. "''"
local text = "''" .. tostring( content[ 1 ] or '' ) .. "''"
if not utils.empty( content.section ) then
if not utils.empty( content.subheading ) then
text = text .. ': ' .. tostring( content.subheading )
text = text .. ': ' .. tostring( content.subheading )
end
end
Line 217: Line 217:
[ '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' },
[ 'aliases' ] = { [ 1 ] = 'heading', [ 'section' ] = 'subheading' },
[ 'aliases' ] = { [ 1 ] = 'heading' }
[ 'invalid' ] = { 'section' }
} )
} )
local content = {
local content = {

Revision as of 20:18, January 19, 2022

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.

Parameters:

  • frame (object) - The current parser frame

Returns:

wikitext - the constructed reference

ref.game

Invocation entry point for Template:Ref/Game.

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 Subheading, 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 subheading, 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

uniqueLink

uniqueLinkIfExists

acronym

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 Subheading, 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 subheading, 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.subheading ) then
		text = text .. ': ' .. tostring( content.subheading )
	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 .. ' - '
				text = uniqueLinkIfExists( content.quotee, content.quoteetext, 'ref' )
			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

function uniqueLink( page, text, category )
	local frame = mw.getCurrentFrame()
	
	if utils.empty( text ) then
		text = page
	end
	
	return frame:callParserFunction( '#uniquelink', page, text, category )
end

function uniqueLinkIfExists( page, text, category )
	local frame = mw.getCurrentFrame()
	
	if utils.empty( text ) then
		text = page
	end
	
	return frame:callParserFunction( '#uniquelinkifexists', page, text, category )
end

function acronym( category, acronym, target, default )
	local frame = mw.getCurrentFrame()
	
	if utils.empty( default ) then
		default = acronym
	end
	
	return frame:callParserFunction( '#acronym', category, acronym, target, default )
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.

@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' }
	} )
	local content = {
		args.heading, args[2], args[3], args[4], args[5], args[6], args[7],
		[ 'subheading' ] = args.subheading,
		[ 'detail' ] = args.detail,
		[ 'quote' ] = args.quote,
		[ 'quotee' ] = args.quotee,
		[ 'suffix' ] = args.suffix
	}
	return out .. makeStandardRef( frame, args.id, nil, content)
end

--[[[
Invocation entry point for Template:Ref/Game.

@param frame - object - The current parser frame

@return wikitext - the constructed reference
]]
function ref.game( frame )
	local args, out = arguments.preprocess( frame, {
		[ 'required' ] = { 'game' },
		[ 'recommended' ] = { 'what' },
		[ 'valid' ] = { 'whattext', 'id', 'part', 'parttext', 'detail', 'quote',
			'quotee', 'quoteetext', 'suffix' },
		[ 'aliases' ] = { [ 1 ] = 'game', [ 2 ] = 'what',
			[ 'whatlink' ] = 'what', [ 3 ] = 'whattext',
			[ 'whatlinktext' ] = 'whattext', [ 'expansion' ] = 'part',
			[ 'dlc' ] = 'part', [ 'edition' ] = 'part',
			[ 'partlinktext' ] = 'parttext', [ 'expansiontext' ] = 'parttext',
			[ 'dlctext' ] = 'parttext', [ 'editiontext' ] = 'parttext' }
	} )

	local game = uniqueLinkIfExists(
		acronym( 'game', args.game, 'page', args.game ),
		args.gameLinkText or acronym( 'game', args.game, 'title', args.game ),
		'ref'
	)
	
	local part
	if not utils.empty( args.part ) then
		local part = uniqueLinkIfExists(
			args.part,
			args.parttext or args.part
			'ref'
		)
	end
	
	local what = uniqueLinkIfExists(
		args.what,
		args.whattext or args.what,
		'ref'
	)

	local content = {
		game, what,
		[ 'subheading' ] = part or args.part,
		[ 'detail' ] = args.detail,
		[ 'quote' ] = args.quote,
		[ 'quotee' ] = args.quotee,
		[ 'quoteetext' ] = args.quoteetext or args.quotee,
		[ 'suffix' ] = args.suffix
	}
	return out .. makeStandardRef( frame, args.id, nil, content)
end

return ref