Module:See also: Difference between revisions
m (1 revision) |
m (1 revision imported) |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
--[[ | --[[ | ||
-- This module produces a "See also: a, b and c" link. It implements the | -- This module produces a "See also: a, b, and c" link. It implements the | ||
-- template {{see also}}. | -- template {{see also}}. | ||
--]] | --]] | ||
Line 42: | Line 42: | ||
local altphrase = options and options.altphrase or 'See also' | local altphrase = options and options.altphrase or 'See also' | ||
local links = mHatnote.formatPageTables(...) | local links = mHatnote.formatPageTables(...) | ||
links = mw.text.listToText(links) | -- Use semicolons if any links contain a comma | ||
local separator = ', ' | |||
for k, v in pairs(links) do | |||
if string.find(v, ',') then | |||
separator = '; ' | |||
break | |||
end | |||
end | |||
-- Apply the Oxford comma in general | |||
-- Insert comma after every item if the first item contains a section link. | |||
if table.getn(links) >= 3 or string.find(links[1], ' § ') then | |||
links = mw.text.listToText(links, separator, (separator .. 'and ')) | |||
else | |||
links = mw.text.listToText(links, ' and ') | |||
end | |||
local text = altphrase .. ': ' .. links | local text = altphrase .. ': ' .. links | ||
Latest revision as of 08:52, 16 May 2016
--[[ -- This module produces a "See also: a, b, and c" link. It implements the -- template Lua error: Cannot create process: proc_open(/home4/iltornan/lua/error.log): Failed to open stream: No such file or directory. --]]
local mHatnote = require('Module:Hatnote') local mTableTools -- lazily initialise local mArguments -- lazily initialise
local p = {}
function p.seealso(frame) mTableTools = require('Module:TableTools') mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame, {parentOnly = true}) local pages = {} for k, v in pairs(args) do if type(k) == 'number' then local numstring = tostring(k) local display = args['label ' .. numstring] or args['l' .. numstring] local page = {v, display} pages[k] = page end end pages = mTableTools.compressSparseArray(pages) if not pages[1] then return mHatnote.makeWikitextError( 'no page names specified', 'Template:See also#Errors', args.category ) end local options = { altphrase = args.altphrase, selfref = args.selfref } return p._seealso(options, unpack(pages)) end
function p._seealso(options, ...) local altphrase = options and options.altphrase or 'See also' local links = mHatnote.formatPageTables(...) -- Use semicolons if any links contain a comma local separator = ', ' for k, v in pairs(links) do if string.find(v, ',') then separator = '; ' break end end -- Apply the Oxford comma in general -- Insert comma after every item if the first item contains a section link. if table.getn(links) >= 3 or string.find(links[1], ' § ') then links = mw.text.listToText(links, separator, (separator .. 'and ')) else links = mw.text.listToText(links, ' and ') end local text = altphrase .. ': ' .. links
-- Pass options through. local hnOptions = {} hnOptions.selfref = options.selfref
return mHatnote._hatnote(text, hnOptions) end
return p