Module:Ref

local utils = require( 'Module:Utils' )

--- 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 = '' 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 ) return 'TODO: Implement this' end

return ref