--
local mHatnote = require('Module:Hatnote')local mHatList = require('Module:Hatnote list')local mArguments --lazily initializelocal libraryUtil = require('libraryUtil')local checkType = libraryUtil.checkTypelocal checkTypeMulti = libraryUtil.checkTypeMulti
local p =
---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------
local function getTitle(...) --Calls mw.title.new and returns either a title object, or nil on error local success, titleObj = pcall(mw.title.new, ...) return success and titleObj or nilend
---------------------------------------------------------------------------------- Main functions--------------------------------------------------------------------------------
function p.redirect(frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame,) --Get number of redirects local numRedirects = tonumber(frame.args[1]) or 1 -- Create the options table. local options = options.selfref = args.selfref return p._redirect(args, numRedirects, options)end
function p._redirect(args, numRedirects, options, currentTitle, redirectTitle, targetTitle) -- Validate the input. Don't bother checking currentTitle, redirectTitle or -- targetTitle, as they are only used in testing. checkType('_redirect', 1, args, 'table') checkType('_redirect', 2, numRedirects, 'number', true) numRedirects = numRedirects or 1 checkType('_redirect', 3, options, 'table', true) options = options or currentTitle = currentTitle or mw.title.getCurrentTitle -- Get the table of redirects local redirect = for i = 1, numRedirects do -- Return an error if a redirect parameter is missing. if not args[i] then return mHatnote.makeWikitextError('missing redirect parameter', 'Template:Redirect#Errors', args.category ) end redirect[i] = args[i] end -- Generate the text. local formattedRedirect = for k,v in pairs(redirect) do formattedRedirect[k] = mHatnote.quote(v) end local text = text = table.concat(text, ' ') -- Functionality for adding categories local categoryTable = local function addCategory(cat) if cat and cat ~= then -- Add by index to avoid duplicates categoryTable[string.format('[[Category:%s]]', cat)] = true end end --Generate tracking categories local mhOptions = local redirTitle for k,v in pairs(redirect) do -- We don't need a tracking category if the template invocation has been -- copied directly from the docs, or if we aren't in main- or category-space. if not v:find('^REDIRECT%d*$') and v ~= 'TERM' -- and currentTitle.namespace
14 then redirTitle = redirectTitle or getTitle(v) if not redirTitle or not redirTitle.exists then addCategory('Missing redirects') elseif not redirTitle.isRedirect then if string.find(redirTitle:getContent, '#invoke:RfD') then addCategory('Articles with redirect hatnotes impacted by RfD') else addCategory('Articles with redirect hatnotes needing review') end else local target = targetTitle or redirTitle.redirectTarget if target and target ~= currentTitle then addCategory('Articles with redirect hatnotes needing review') end end end
-- Generate the options to pass to . if currentTitle.namespace
return mHatnote._hatnote(text, mhOptions) .. categoryend return p