Editing Module:Section link
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
local p = {} | local p = {} | ||
local function makeWikitextError(msg) | |||
return string.format( | |||
'<strong class="error">[[Template:Section link]] error: %s.</strong>', | |||
msg | |||
) | |||
end | |||
local function makeSectionLink(page, section, display) | local function makeSectionLink(page, section, display) | ||
Line 9: | Line 16: | ||
page = page or '' | page = page or '' | ||
return string.format('[[%s#%s|%s]]', page, section, display) | return string.format('[[%s#%s|%s]]', page, section, display) | ||
end | end | ||
Line 20: | Line 22: | ||
checkType('_main', 1, page, 'string', true) | checkType('_main', 1, page, 'string', true) | ||
checkType('_main', 3, options, 'table', true) | checkType('_main', 3, options, 'table', true) | ||
if | if type(sections) == 'string' then | ||
sections = {sections} | sections = {sections} | ||
elseif type(sections) ~= 'table' then | elseif type(sections) ~= 'table' then | ||
error(string.format( | error(string.format( | ||
"type error in argument #2 to '_main' | "type error in argument #2 to '_main' (string or table expected, got %s)", | ||
type(sections) | type(sections) | ||
), 2) | ), 2) | ||
Line 33: | Line 32: | ||
options = options or {} | options = options or {} | ||
title = title or mw.title.getCurrentTitle() | title = title or mw.title.getCurrentTitle() | ||
if #sections < 1 then | |||
return makeWikitextError('at least one section must be specified') | |||
end | end | ||
-- Make the link(s). | -- Make the link(s). | ||
local isShowingPage = not options.nopage | local isShowingPage = not options.nopage | ||
if #sections | if #sections == 1 then | ||
local linkPage = page or '' | local linkPage = page or '' | ||
local section = sections[1] or 'Notes' | local section = sections[1] or 'Notes' | ||
local display = '§& | local display = '§ ' .. section | ||
if isShowingPage then | if isShowingPage then | ||
page = page or title.prefixedText | page = page or title.prefixedText | ||
display = page .. ' ' .. display | |||
end | end | ||
return makeSectionLink(linkPage, section, display) | return makeSectionLink(linkPage, section, display) | ||
else | else | ||
-- Multiple sections. First, make | -- Multiple sections. First, make the list of links. | ||
local ret = {} | local ret = {} | ||
for i, section in ipairs(sections) do | for i, section in ipairs(sections) do | ||
ret[i] = makeSectionLink(page, section) | ret[i] = makeSectionLink(page, section) | ||
end | end | ||
-- Assemble the list of links into a string with mw.text.listToText. | -- Assemble the list of links into a string with mw.text.listToText. | ||
-- We use the default | -- We use the default arguments for mw.text.listToText, unless we have | ||
-- | -- exactly two sections, in which case we use a custom conjunction. | ||
local conjunction | local conjunction | ||
if #sections == 2 then | if #sections == 2 then | ||
conjunction = '​ and ' | conjunction = '​ and ' | ||
end | end | ||
ret = mw.text.listToText(ret, nil, conjunction) | ret = mw.text.listToText(ret, nil, conjunction) | ||
-- Add the intro text. | -- Add the intro text. | ||
local intro = '§§& | local intro = '§§ ' | ||
if isShowingPage then | if isShowingPage then | ||
intro = (page or title.prefixedText) .. ' ' .. intro | intro = (page or title.prefixedText) .. ' ' .. intro | ||
end | end | ||
ret = intro .. ret | ret = intro .. ret | ||
return ret | return ret | ||
end | end | ||
Line 95: | Line 76: | ||
function p.main(frame) | function p.main(frame) | ||
local args = require('Module:Arguments').getArgs(frame, { | local args = require('Module:Arguments').getArgs(frame, { | ||
wrappers = 'Template:Section link' | wrappers = 'Template:Section link' | ||
}) | }) | ||
Line 112: | Line 86: | ||
-- Doing this in the loop because of a bug in [[Module:Arguments]] | -- Doing this in the loop because of a bug in [[Module:Arguments]] | ||
-- when using pairs with deleted arguments. | -- when using pairs with deleted arguments. | ||
page = | page = v | ||
elseif type(k) == 'number' then | elseif type(k) == 'number' then | ||
sections[k] = v | sections[k] = v | ||
Line 118: | Line 92: | ||
options[k] = v | options[k] = v | ||
end | end | ||
end | end | ||
Line 139: | Line 107: | ||
end | end | ||
sections = compressArray(sections) | sections = compressArray(sections) | ||
return p._main(page, sections, options) | return p._main(page, sections, options) | ||
end | end | ||
return p | return p |