Koha Test Wiki MW Canasta on Koha Portainer
Test major Koha Wiki changes or bug fixes here without fear of breaking the production wiki.
For the current Koha Wiki, visit https://wiki.koha-community.org .Module:Redirect hatnote/sandbox
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Redirect hatnote/sandbox/doc
--[[
-- This module produces a "redirect" hatnote. It looks like this:
-- '"X" redirects here. For other uses, see Y.'
-- It implements the {{redirect}} template.
--]]
local mHatnote = require('Module:Hatnote')
local mHatList = require('Module:Hatnote list')
local mArguments --lazily initialize
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
local p = {}
local function getTitle(...)
local success, titleObj = pcall(mw.title.new, ...)
if success then
return titleObj
else
return nil
end
end
function p.redirect(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {parentOnly=true})
--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] = '"' .. v .. '"'
end
local text = {
mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'redirects' or 'redirect') .. ' here.',
mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
}
text = table.concat(text, ' ')
-- Functionality for adding categories
local categoryTable = {}
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 = {}
for k,v in pairs(redirect) do
redirectTitle = redirectTitle or getTitle(v)
local tracking = p._trackingcats(v, currentTitle);
if tracking then
addCategory(tracking)
end
-- Generate the options to pass to [[Module:Hatnote]].
if currentTitle.namespace == 0 and not mhOptions.selfref
and redirectTitle and redirectTitle.namespace ~= 0
then
-- We are on a mainspace page, and the hatnote starts with something
-- like "Wikipedia:Foo redirects here", so automatically label it as
-- a self-reference.
mhOptions.selfref = true
else
mhOptions.selfref = options.selfref
end
end
--concatenate all the categories
local category = ''
for k,v in pairs(categoryTable) do
category = category .. k
end
return mHatnote._hatnote(text, mhOptions) .. category
end
function p.trackingcats(frame)
local category = p._trackingcats(frame.args[1])
if category then
return string.format('[[Category:%s]]', category)
else
return ''
end
end
function p._trackingcats(redirect, currentTitle)
-- 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.
currentTitle = currentTitle or mw.title.getCurrentTitle()
if not redirect:find('^REDIRECT%d*$') and redirect ~= 'TERM' --
and currentTitle.namespace == 0 or currentTitle.namespace == 14
then
redirectTitle = redirectTitle or getTitle(redirect)
if not redirectTitle or not redirectTitle.exists then
return 'Missing redirects'
elseif not redirectTitle.isRedirect then
return 'Articles with redirect hatnotes needing review'
else
local mRedirect = require('Module:Redirect')
local target = mRedirect.getTarget(redirectTitle)
targetTitle = targetTitle or target and getTitle(target)
if targetTitle and targetTitle ~= currentTitle then
return 'Articles with redirect hatnotes needing review'
end
end
end
end
return p