Module:Reference
Jump to navigation
Jump to search
Reference-list and note presentation for Template:Reflist, Template:Efn, Template:Refbegin and Template:Refend.
-- Module:Reference
-- Templates for reference lists, bibliographies, and footnotes
local p = {}
-- Helper: get frame arguments
local function getArgs(frame)
return require('Module:Arguments').getArgs(frame)
end
-- Reflist: displays references
-- Parameters: columns, colwidth, group
function p.reflist(frame)
local args = getArgs(frame)
local columns = args.columns or args[1]
local colwidth = args.colwidth or args[2]
local group = args.group
local container = mw.html.create('div'):addClass('reflist')
if colwidth then
container:addClass('reflist-columns'):css('column-width', colwidth)
elseif columns then
container:addClass('reflist-columns'):css('column-count', columns)
end
-- Build references tag using frame:extensionTag for proper parsing
local refArgs = {}
if group then
refArgs.group = group
end
local refContent = frame:extensionTag('references', '', refArgs)
return tostring(container:wikitext(refContent))
end
-- Refbegin: starts a formatted bibliography
-- Parameters: columns (1), colwidth, indent, liststyle
function p.refbegin(frame)
local args = getArgs(frame)
local columns = args.columns or args[1]
local colwidth = args.colwidth
local indent = args.indent
local liststyle = args.liststyle
local html = mw.html.create('div')
:addClass('refbegin')
-- Column styling
if colwidth then
html:addClass('refbegin-columns')
html:css('column-width', colwidth)
elseif columns then
html:addClass('refbegin-columns')
html:css('column-count', columns)
end
-- Custom indent
if indent then
html:css('margin-left', indent)
end
-- Custom list style
html:css('list-style-type', liststyle or 'none')
-- mw.html has no open-tag mode. This builder has no children, so remove
-- its known closing tag to preserve the paired Refbegin/Refend interface.
return tostring(html):sub(1, -7) .. '\n'
end
-- Refend: closes a bibliography started by refbegin
function p.refend(frame)
return '</div>'
end
-- Efn: explanatory footnote (separate from citations)
-- Parameters: 1 (note text), name, group
function p.efn(frame)
local args = getArgs(frame)
local text = args[1] or ''
local name = args.name
local group = args.group or 'note'
if text == '' and not name then
return '<span class="error">Efn: note text is required</span>'
end
return frame:extensionTag('ref', text, { group = group, name = name })
end
-- Notelist: displays explanatory notes (shortcut for reflist with group=note)
function p.notelist(frame)
local args = getArgs(frame)
local group = args.group or 'note'
-- Use frame:extensionTag for proper parsing
local refContent = frame:extensionTag('references', '', {group = group})
return '<div class="reflist reflist-notes">' .. refContent .. '</div>'
end
return p