Модуль:Redirect hatnote: различия между версиями

Материал из Янтарной ноосферы, свободной интернет-энциклопедии
вставил из энвики
 
немного локализовал, надо будет остеречься тянуть потом с энвики
 
(не показана 1 промежуточная версия этого же участника)
Строка 54: Строка 54:
if not args[i] then
if not args[i] then
return mHatnote.makeWikitextError(
return mHatnote.makeWikitextError(
'missing redirect parameter',
'отсутствует параметр перенаправления',
'Template:Redirect#Errors',
'Шаблон:Перенаправление#Ошибки',
args.category
args.category
)
)
Строка 67: Строка 67:
end
end
local text = {
local text = {
mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'redirects' or 'redirect') .. ' here.',
mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'перенаправляется' or 'перенаправляется') .. ' сюда.',
mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.text})
}
}
Строка 76: Строка 76:
if cat and cat ~= '' then
if cat and cat ~= '' then
-- Add by index to avoid duplicates
-- Add by index to avoid duplicates
categoryTable[string.format('[[Category:%s]]', cat)] = true
categoryTable[string.format('[[Категория:%s]]', cat)] = true
end
end
end
end
Строка 90: Строка 90:
redirTitle = redirectTitle or getTitle(v)
redirTitle = redirectTitle or getTitle(v)
if not redirTitle or not redirTitle.exists then
if not redirTitle or not redirTitle.exists then
addCategory('Missing redirects')
addCategory('Неуказанные перенаправления')
elseif not redirTitle.isRedirect then
elseif not redirTitle.isRedirect then
if string.find(redirTitle:getContent(), '#invoke:RfD') then
if string.find(redirTitle:getContent(), '#invoke:RfD') then

Текущая версия от 21:41, 5 ноября 2024

Для документации этого модуля может быть создана страница Модуль:Redirect hatnote/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 = {}

--------------------------------------------------------------------------------
-- 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 nil
end

--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------

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(
				'отсутствует параметр перенаправления',
				'Шаблон:Перенаправление#Ошибки',
				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 = {
		mHatList.andList(formattedRedirect) .. ' ' .. (#redirect == 1 and 'перенаправляется' or 'перенаправляется') .. ' сюда.',
		mHatList._forSee(args, #redirect + 1, {title = redirect[1], extratext = args.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('[[Категория:%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 == 0 or currentTitle.namespace == 14
		then
			redirTitle = redirectTitle or getTitle(v)
			if not redirTitle or not redirTitle.exists then
				addCategory('Неуказанные перенаправления')
			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 [[Module:Hatnote]].
		if currentTitle.namespace == 0 and not mhOptions.selfref
			and redirTitle and redirTitle.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
 
return p