Модуль:Повторное использование

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Модуль реализует функционал шаблона {{Повторное использование}} и является его неотъемлемой частью.

local MessageBox = require('Модуль:Message box')


local p = {}

local function row(args, i)
	local text = ""
	local afd = args["к удалению" .. i]
	if (afd or args["к объединению" .. i]) then
		text = string.format("%s\n*Объединено", text)
	else 
		local action = args["действие" .. i]
		if not action then
			action = "Скопировано"
		end
		action = mw.ustring.gsub(action, '^%l', mw.ustring.upper)
		text = string.format("%s\n*%s:", text, action)
	end

	local from = args["из" .. i] or ""
	text = string.format("%s [%s %s] (", text, tostring(mw.uri.fullUrl(from, {redirect = "no"} )), from)

	local from_oldid = args["исходный oldid" .. i]
	if (from_oldid) then
		text = string.format("%s[%s %s], ", text, tostring(mw.uri.fullUrl(from, {oldid = from_oldid} )), from_oldid)
	end
	
	local to = args["в".. i] or ""
	text = string.format("%s[%s история]) → [[%s]]", text, tostring(mw.uri.fullUrl(from, {action = "history"} )), to)
	
	local diff = args["diff" .. i]
	if (diff) then
		text = string.format("%s ([%s diff])", text, diff)
	elseif (args["целевой oldid" .. i] or args["целевой diff".. i]) then
		local to_diff = args["целевой diff".. i] or "next"
		local to_oldid = args["целевой oldid" .. i] or "prev"
		text = string.format("%s ([%s diff])", text, tostring(mw.uri.fullUrl(to, {diff=to_diff, oldid = to_oldid} )))
	end
	local date = args["дата" .. i]
	if (date) then
		text = string.format("%s от %s", text, date)
	end

	if (afd) then
		if (mw.ustring.match(afd, "Википедия:", 1 )) then --If no venue is given add AfD prefix
			text = string.format("%s после [[%s|номинирования на удаление]]", text, afd)
		else
			text = string.format("%s после [[Википедия:К удалению/%s|номинирования на удаление]]",text,afd)
		end
	end
	
	return text
end

local function list(args)
	local text = ""
	local from = args["из"]
	local from1 = args["из1"]
	if from then
		text = string.format("%s%s", text, row(args, ""))
	elseif from1 then
		text = string.format("%s%s", text, row(args, 1))
	else
		return '<div class="error">Не указан параметр "из1" (или "из").</div>'
	end

	local i = 2
	while i > 0 do
		if not args["из" .. i] then
			break
		end
		text = string.format("%s%s", text, row(args, i))
		i = i + 1 --Check if from(i+1) exist
	end

	return text
end
	
local function multiText(args)
	local pageType
	if (mw.title.getCurrentTitle():inNamespace(1)) then
		pageType = "статью"
	else
		pageType = "страницу"
	end
	
	local historyList = list(args)
	if (args["collapse"] == 'yes') then
		local collapsedText = '<table style="width:100%%; background: transparent;" class="mw-collapsible mw-collapsed">\n<tr><th>Страницы, в рамках которых было копирование:</th></tr>\n<tr><td> %s </td></tr></table>'
		historyList = string.format(collapsedText, historyList)
	end

	local text = "Содержимое было скопировано/перемещено/переведено из или в текущую %s; смотрите список ниже. Исходная страница теперь служит для [[Википедия:Копирование внутри Википедии|предоставления атрибуции]] для содержимого, добавленного в целевую статью, и не должна удаляться до тех пор, пока существует целевая статья со скопированным/перемещённым/переведённым в неё содержимым. Для атрибуции и просмотра сделанных изменений смотрите ссылки на историю правок ниже. %s"
	text = string.format(text, pageType, historyList)
	return text
end

local function categories(args)
	local nocat = args["nocat"]
	if nocat then
		return ''
	end
	
	local title = mw.title.getCurrentTitle()
	local talkNamespaces = mw.site.talkNamespaces
	local isTalkPage = false
	for _, nm in ipairs(talkNamespaces) do
		if nm.id == title.namespace then
			isTalkPage = true
			break
		end
	end
	if not isTalkPage then
		return ''
	end

	local text = "[[Категория:Страницы Википедии, использующие шаблон повторного использования]]"

	local i = 1
	while i > 0 do
		if not args["из" .. i] then 
			break
		end

		if not (args["целевой oldid" .. i] or args["целевой diff".. i]) then
			text = text .. "%s[[Категория:Страницы Википедии, использующие шаблон повторного использования без oldid]]"
			break
		end

		i = i + 1
	end

	local to_oldid = args["целевой oldid"] or args["целевой diff"] or args["diff"] or args["целевой oldid1"] or args["целевой diff1"] or args["diff1"]
	local from_oldid = args["исходный oldid"] or args["исходный oldid1"]
	if (not from_oldid) or (not to_oldid) then
		text = text .. "[[Категория:Страницы Википедии, использующие шаблон повторного использования без oldid]]"
	end
	return text
end

local function BannerText(args)
	--Checks if there are multiple rows
	local text
	text = multiText(args) .. categories(args)
	return text
end

local function renderBanner(args)
	return MessageBox.main('tmbox', {
		class = "copiednotice",
		small = args["small"],
		image = '[[File:Splitsection.svg|50px]]',
		text = BannerText(args)
	})
end

function p.main(frame)
	local getArgs = require('Модуль:Arguments').getArgs
	local args = getArgs(frame)
	return renderBanner(args)
end

return p