モジュール:Labelled list hatnote
モジュールの解説[作成]
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments -- initialize lazily
local p = {}
-- Defaults global to this module
local defaults = {
label = 'を参照', -- Final fallback for label argument
mainLabelForm = '→詳細は%s%s', -- Label format for main template
labelForm = '→%s%s', -- Label format for see_also template
prefixes = {'label', 'label ', 'l'},
template = 'Module:Labelled list hatnote'
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays(args, prefixes)
prefixes = prefixes or defaults.prefixes
local pages = {}
for k, v in pairs(args) do
if type(k) == 'number' then
local display
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
if display then break end
end
local page = display and
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
pages[#pages + 1] = page
end
end
return pages
end
-- Produces a labelled pages-list hatnote.
function p.labelledList(frame)
mArguments = require('Module:Arguments')
local template = frame:getParent():getTitle()
if template ~= 'Template:Main' and template ~= 'Template:Main/sandbox' then
template = 'Template:See Also' -- Default template if not Main
end
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = p.preprocessDisplays(args)
local labels
local labelForm
if template == 'Template:Main' or template == 'Template:Main/sandbox' then
labels = {defaults.label}
labelForm = frame.args.labelForm or defaults.mainLabelForm
else
labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labelForm = frame.args.labelForm or defaults.labelForm
end
local options = {
extraclasses = frame.args.extraclasses,
category = args.category,
selfref = frame.args.selfref or args.selfref,
template = template,
labelForm = labelForm
}
return p._labelledList(pages, labels, options)
end
function p._labelledList(pages, labels, options)
labels = labels or {}
if #pages == 0 then
return mHatnote.makeWikitextError(
'ページ名が指定されていません',
(options.template or defaults.template) .. '#エラー',
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,
mHatlist.andList(pages, true),
label
)
local classes = {}
if type(options.extraclasses) == 'string' then
classes[#classes + 1] = options.extraclasses
end
if options.selfref then
classes[#classes + 1] = 'selfref'
end
-- Render the HTML div with the specified style and classes
local html = string.format(
'<div class="rellink %s" style="margin-bottom: 0.5em; padding-left: 2em; font-size: 90%%;" role="note">%s</div>',
table.concat(classes, ' '),
text
)
return html
end
return p