Module:Redirect hatnote: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(remove the check for "other uses" coming last, as this is not how Template:Redirect currently works)
(create a formatUseTable to reduce code redundancy)
Line 43: Line 43:
iArg = iArg + 2
iArg = iArg + 2
local useTable = data[iData] or {}
local useTable = data[iData] or {}
local pages = useTable.pages or {}
local use = args[iArg]
local use = args[iArg]
local page = args[iArg + 1]
local page = args[iArg + 1]
local nextUse = args[iArg + 2]
local nextUse = args[iArg + 2]
useTable[#useTable + 1] = page
pages[#pages + 1] = page
useTable.pages = pages
if use ~= 'and' then
if use ~= 'and' then
useTable.use = use
useTable.use = use
Line 61: Line 63:
return p._redirect(redirect, data, options)
return p._redirect(redirect, data, options)
end

local function formatUseTable(useTable, isFirst, redirect)
-- Formats one use table. Use tables are the tables inside the data array.
-- Each one corresponds to one use. (A use might be the word "cats" in the
-- phrase "For cats, see [[Felines]]".)
-- Returns a string, or nil if no use was specified.
-- The isFirst parameter is used to apply special formatting for the first
-- table in the data array. If isFirst is specified, the redirect parameter
useTable = useTable or {}
local use
if isFirst then
use = useTable.use or 'other uses'
elseif not useTable.use then
return nil
elseif tonumber(useTable.use) == 1 then
use = 'other uses'
else
use = useTable.use
end
local pages = useTable.pages
if isFirst then
redirect = redirect or error(
'isFirst was set in formatUseTable, but no redirect was supplied',
2
)
pages[1] = pages[1] or redirect .. ' (disambiguation)'
else
pages[1] = pages[1] or useTable.use .. ' (disambiguation)'
end
pages = mHatnote.formatPages(unpack(pages))
pages = mw.text.listToText(pages)
return string.format(
'For %s, see %s.',
use,
pages
)
end
end


Line 70: Line 109:
-- Generate the text.
-- Generate the text.
local text = {}
local text = {}
-- Redirect text.
text[#text + 1] = '"' .. redirect .. '" redirects here.'
text[#text + 1] = '"' .. redirect .. '" redirects here.'
text[#text + 1] = formatUseTable(data[1] or {}, true, redirect)
-- The first table, a special case.
if data[1] and data[1].use and data[1].use ~= 'other uses' then
local useTable1 = data[1] or {}
local use1 = useTable1.use or 'other uses'
useTable1[1] = useTable1[1] or redirect .. ' (disambiguation)'
local pages1 = mHatnote.formatPages(unpack(useTable1))
pages1 = mw.text.listToText(pages1)
text[#text + 1] = string.format(
'For %s, see %s.',
use1,
pages1
)
-- The other tables.
if use1 ~= 'other uses' then
for i = 2, #data do
for i = 2, #data do
local useTable = data[i] or {}
text[#text + 1] = formatUseTable(data[i] or {}, false)
local origUse = useTable.use
if not origUse then
break
end
local use
if tonumber(origUse) == 1 then
use = 'other uses'
else
use = origUse
end
useTable[1] = useTable[1] or origUse .. ' (disambiguation)'
local pages = mHatnote.formatPages(unpack(useTable))
pages = mw.text.listToText(pages)
text[#text + 1] = string.format(
'For %s, see %s.',
use,
pages
)
end
end
end
end
Line 115: Line 124:


-- Find whether to add the tracking category.
-- Find whether to add the tracking category.
-- We add the category if:
-- We add the category if all of the following are true:
-- a) redirect isn't any of the keywords 'REDIRECT', 'REDIRECT1',
-- a) redirect isn't any of the keywords 'REDIRECT', 'REDIRECT1',
-- 'REDIRECT2', ..., or 'TERM'.
-- 'REDIRECT2', ..., or 'TERM'.