Перейти до вмісту

Модуль:Redirect

Матеріал з Вікіпедії — вільної енциклопедії.

Модуль містить функції для визначення цільової сторінки, на яку веде сторінка перенаправлення.

Main

Функція «Main» приймає назву однієї сторінки як аргумент. Визначає чи є сторінка перенаправленням, якщо так, то шукає сторінку, витягує ціль та повертає назву цільової сторінки у вигляді тексту. Викликається як: {{#invoke:redirect|main|назва-сторінки}}. Якщо назва-сторінки не існує або вона не є перенаправленням, то тоді повертається назва-сторінки. Якщо назва-сторінки є пустим, то повертається пустий текст.

Функція, зазвичай, не приймає і не додає квадратних дужок, тому щоб відобразити результат у вигляді посилання, то використайте [[{{#invoke:redirect|main|назва-сторінки}}]].

Якщо зазначено непусте значення в параметрі bracket, дужки будуть передані до результату, якщо вони наявні.

Приклади

  • {{#invoke:redirect|main|ВП:К}} → Вікіпедія:Кнайпа
  • {{#invoke:redirect|main|[[ВП:ВИЛ]]|bracket=yes}}Вікіпедія:Статті-кандидати на вилучення
  • {{#invoke:redirect|main|Вікіпедія:Статті-кандидати на вилучення}} → Вікіпедія:Статті-кандидати на вилучення

Зверніть увагу: ВП:К та ВП:ВИЛ є перенаправленням, але Вікіпедія:Статті-кандидати на вилучення ним не є.

LuaMain

Якщо ви хочете використати функцію «Main» в іншому модулі Lua, то ви можете використати функцію «luaMain». Це забезпечує той самий функціонал, як і у функції «Main», але не вимагає, щоб був доступним об'єкт frame.

Щоб використати її, спершу завантажте модуль.

local mRedirect = require('Module:Redirect')

Тоді використайте функцію з наступним синтаксисом:

mRedirect.luaMain(rname, bracket)

rname є назвою сторінки перенаправлення, і якщо bracket є будь-чим, окрім false або nil, то модуль створить посилання ніж просто поверне назву сторінки.

isRedirect

Функція «isRedirect» використовується у вікісторінці, щоб знайти чи передана сторінка є перенаправленням чи ні. Якщо сторінка є перенаправленням, то функція повертає «yes», і якщо ні, то вивід є пустим. Вона викликається як {{#invoke:redirect|isRedirect|назва-сторінки}}.

Приклади

  • {{#invoke:redirect|isRedirect|ВП:ВИЛ}} → yes
  • {{#invoke:redirect|isRedirect|Вікіпедія:Статті-кандидати на вилучення}}

LuaIsRedirect

isRedirect можна викликати в іншому модулі Lua, так само як і основну функцію:

local mRedirect = require('Module:Redirect')
mRedirect.luaIsRedirect(rname)

GetTarget

Функція «getTarget» отримує назву цільової сторінки, на яку веде сторінка перенаправлення, і її можна викликати лише в іншому модулі Lua. Якщо зазначена сторінка є перенаправленням, то повертається цільова сторінка; в іншому випадку повертається nil.

Щоб використати її, спершу завантажте модуль.

local mRedirect = require('Module:Redirect')

Тоді використайте функцію з наступним синтаксисом:

mRedirect.getTarget(page)

page може бути як назва сторінки перенаправлення у вигляді рядка, так і об'єктом mw.title.

Див. також

-- This module provides functions for getting the target of a redirect page.

local p = {}

-- Gets a mw.title object, using pcall to avoid generating script errors if we
-- are over the expensive function count limit (among other possible causes).
local function getTitle(...)
	local success, titleObj = pcall(mw.title.new, ...)
	if success then
		return titleObj
	else
		return nil
	end
end

-- Gets the name of a page that a redirect leads to, or nil if it isn't a
-- redirect.
function p.getTargetFromText(text)
	local target = string.match(
		text,
		"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]"
	) or string.match(
		text,
		"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
	) or mw.ustring.match(text,
		"^%s*#[Пп][Ее][Рр][Ее][Нн][Аа][Пп][Рр][Аа][Вв][Лл][Ее][Нн][Нн][Яя]%s*:?%s*%[%[([^%[%]|]-)%]%]"
	) or mw.ustring.match(text,
		"^%s*#[Пп][Ее][Рр][Ее][Нн][Аа][Пп][Рр][Аа][Вв][Лл][Ее][Нн][Нн][Яя]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
	)	
	return target and mw.uri.decode(target, 'PATH')
end

-- Gets the target of a redirect. If the page specified is not a redirect,
-- returns nil.
function p.getTarget(page, fulltext)
	-- Get the title object. Both page names and title objects are allowed
	-- as input.
	local titleObj
	if type(page) == 'string' or type(page) == 'number' then
		titleObj = getTitle(page)
	elseif type(page) == 'table' and type(page.getContent) == 'function' then
		titleObj = page
	else
		error(string.format(
			"bad argument #1 to 'getTarget'"
				.. " (string, number, or title object expected, got %s)",
			type(page)
		), 2)
	end
	if not titleObj then
		return nil
	end
	local targetTitle = titleObj.redirectTarget
	if targetTitle then
		if fulltext then
			return targetTitle.fullText
		else
			return targetTitle.prefixedText
		end
	else
		return nil
	end
end

--[[
-- Given a single page name determines what page it redirects to and returns the
-- target page name, or the passed page name when not a redirect. The passed
-- page name can be given as plain text or as a page link.
--
-- Returns page name as plain text, or when the bracket parameter is given, as a
-- page link. Returns an error message when page does not exist or the redirect
-- target cannot be determined for some reason.
--]]
function p.luaMain(rname, bracket, fulltext)
	if type(rname) ~= "string" or not rname:find("%S") then
		return nil
	end
	bracket = bracket and "[[%s]]" or "%s"
	rname = rname:match("%[%[(.+)%]%]") or rname
	local target = p.getTarget(rname, fulltext)
	local ret = target or rname
	ret = getTitle(ret)
	if ret then
		if fulltext then
			ret = ret.fullText
		else
			ret = ret.prefixedText
		end
		return bracket:format(ret)
	else
		return nil
	end
end

-- Provides access to the luaMain function from wikitext.
function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
	return p.luaMain(args[1], args.bracket, args.fulltext) or ''
end

-- Returns true if the specified page is a redirect, and false otherwise.
function p.luaIsRedirect(page)
	local titleObj = getTitle(page)
	if not titleObj then
		return false
	end
	if titleObj.isRedirect then
		return true
	else
		return false
	end
end

-- Provides access to the luaIsRedirect function from wikitext, returning 'yes'
-- if the specified page is a redirect, and the blank string otherwise.
function p.isRedirect(frame)
	local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
	if p.luaIsRedirect(args[1]) then
		return 'yes'
	else
		return ''
	end
end

return p