The editors' meeting has been canceled for technical reasons.
Module:Labelled list hatnote: Difference between revisions
Jump to navigation
Jump to search
m 1 revision imported |
No edit summary |
||
Line 1: | Line 1: | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- Labelled list -- | -- Labelled list -- | ||
-- This module generates a hatnote with a colon-terminated label, e.g., -- | |||
-- This module | -- "LABEL: [andList of pages]", for {{see also}} and similar templates. -- | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local mHatnote = require('Module:Hatnote') | local mHatnote = require('Module:Hatnote') | ||
local mHatlist = require('Module:Hatnote list') | local mHatlist = require('Module:Hatnote list') | ||
local mArguments | local mArguments | ||
local p = {} | local p = {} | ||
-- Defaults | -- Defaults for this module | ||
local defaults = { | local defaults = { | ||
label = 'See also', -- Fallback for the label argument | |||
labelForm = '%s: %s', -- Format for the label | |||
prefixes = {'label', 'label ', 'l'}, -- Prefixes for display parameters | |||
template = 'Module:Labelled list hatnote' | |||
} | } | ||
-- | -- Preprocess display parameters and combine them with page arguments. | ||
local function preprocessDisplays(args, prefixes) | |||
function | prefixes = prefixes or defaults.prefixes | ||
local pages = {} | |||
for k, v in pairs(args) do | |||
if type(k) == 'number' then | |||
local display | |||
for _, prefix in ipairs(prefixes) do | |||
display = args[prefix .. k] | |||
if display then break end | |||
end | |||
local page = display and string.format('%s|%s', v:gsub('|.*$', ''), display) or v | |||
table.insert(pages, page) | |||
end | |||
end | |||
return pages | |||
end | end | ||
-- | -- Main entry point for the module. | ||
function p.labelledList(frame) | |||
mArguments = mArguments or require('Module:Arguments') | |||
local args = mArguments.getArgs(frame, {parentOnly = true}) | |||
local labels = {frame.args[1] or defaults.label, frame.args[2] or frame.args[1] or defaults.label} | |||
function p.labelledList (frame) | local pages = preprocessDisplays(args) | ||
local options = { | |||
extraclasses = frame.args.extraclasses, | |||
category = args.category, | |||
selfref = frame.args.selfref or args.selfref, | |||
template = frame:getParent():getTitle() | |||
} | |||
return p._labelledList(pages, labels, options) | |||
end | end | ||
function p._labelledList (pages, labels, options) | -- Generates the hatnote text and wraps it. | ||
function p._labelledList(pages, labels, options) | |||
if #pages == 0 then | |||
return mHatnote.makeWikitextError( | |||
'Page name not specified', | |||
(options.template or defaults.template) .. '#error', | |||
options.category | |||
) | |||
end | |||
local label = (#pages == 1 and labels[1] or labels[2]) or defaults.label | |||
local text = string.format( | |||
options.labelForm or defaults.labelForm, | |||
label, | |||
mHatlist.andList(pages, true) | |||
) | |||
return mHatnote._hatnote(text, {extraclasses = options.extraclasses, selfref = options.selfref}) | |||
end | end | ||
return p | return p |