Module:Redirect hatnote: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(check category-space hatnotes too) |
(Updated module from sandbox with support for multiple redirect arguments.) |
||
Line 8: | Line 8: | ||
local libraryUtil = require('libraryUtil') |
local libraryUtil = require('libraryUtil') |
||
local checkType = libraryUtil.checkType |
local checkType = libraryUtil.checkType |
||
local checkTypeMulti = libraryUtil.checkTypeMulti |
|||
local p = {} |
local p = {} |
||
Line 35: | Line 36: | ||
end |
end |
||
--Get table of redirects |
|||
⚫ | |||
local |
local numRedirects = tonumber(frame.args[1]) or 1 |
||
local redirect = {} |
|||
for i = 1, numRedirects do |
|||
⚫ | |||
-- Return an error if no redirect was specified. |
|||
if not args[i] then |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
redirect[i] = args[i] |
|||
end |
end |
||
-- Create the data table. |
-- Create the data table. |
||
local data = {} |
local data = {} |
||
local iArg = |
local iArg = numRedirects - 1 |
||
local iData = 1 |
local iData = 1 |
||
repeat |
repeat |
||
Line 94: | Line 101: | ||
local pages = useTable.pages or {} |
local pages = useTable.pages or {} |
||
if isFirst then |
if isFirst then |
||
redirect = redirect or error( |
redirect = redirect[1] or error( |
||
'isFirst was set in formatUseTable, but no redirect was supplied', |
'isFirst was set in formatUseTable, but no redirect was supplied', |
||
2 |
2 |
||
Line 114: | Line 121: | ||
-- Validate the input. Don't bother checking currentTitle, redirectTitle or |
-- Validate the input. Don't bother checking currentTitle, redirectTitle or |
||
-- targetTitle, as they are only used in testing. |
-- targetTitle, as they are only used in testing. |
||
checkTypeMulti('_redirect', 1, redirect, {'string', 'table'}) |
|||
-- String type can stay valid until extant use-cases are checked-for and |
|||
-- updated, but we'll coerce them to table for now |
|||
if type(redirect) == 'string' then redirect = {redirect} end |
|||
checkType('_redirect', 2, data, 'table', true) |
checkType('_redirect', 2, data, 'table', true) |
||
checkType('_redirect', 3, options, 'table', true) |
checkType('_redirect', 3, options, 'table', true) |
||
Line 123: | Line 133: | ||
-- Generate the text. |
-- Generate the text. |
||
local text = {} |
local text = {} |
||
local formattedRedirect = {} |
|||
text[#text + 1] = '"' .. redirect .. '" redirects here.' |
|||
for k,v in pairs(redirect) do |
|||
formattedRedirect[k] = '"' .. v .. '"' |
|||
end |
|||
text[#text + 1] = mw.text.listToText(formattedRedirect) .. ' ' .. (#redirect == 1 and 'redirects' or 'redirect') .. ' here.' |
|||
text[#text + 1] = formatUseTable(data[1] or {}, true, redirect) |
text[#text + 1] = formatUseTable(data[1] or {}, true, redirect) |
||
if data[1] and data[1].use and data[1].use ~= 'other uses' then |
if data[1] and data[1].use and data[1].use ~= 'other uses' then |
||
Line 132: | Line 146: | ||
text = table.concat(text, ' ') |
text = table.concat(text, ' ') |
||
local categoryTable = {} |
|||
⚫ | |||
--add categories to a table by index, so we don't get duplicates |
|||
⚫ | |||
function addCategory(cat) |
|||
⚫ | |||
if cat and cat ~= '' then |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
end |
end |
||
⚫ | |||
⚫ | |||
local mhOptions = {} |
local mhOptions = {} |
||
for k,v in pairs(redirect) do |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
end |
|||
end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
end |
|||
--concatenate all the categories |
|||
⚫ | |||
for k,v in pairs(categoryTable) do |
|||
category = category .. k |
|||
end |
end |
||