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

Модуль:Protected edit request

Матеріал з Вікіпедії — вільної енциклопедії.
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Цей модуль створює контейнер повідомлень, які використовуються, щоб робити запити на редагування захищених. Запити на редагування можна роботи для повністю захищених або частково захищених сторінок. Крім того, код модуля містить закоментований код, що може забезпечити, при бажані, роботу запитів на редагування одночасно кількох сторінок.

Цей модуль повинен використовуватися лише на сторінках обговорення сторінок, на яких потрібно внести зміни.

Синтаксис

[ред. код]

Модуль має три функції, доступні для кожного рівня захисту:

Функція Рівень захисту Шаблон
full Повний захист {{Editprotected}}
semi Частковий захист {{Editsemiprotected}}

Просте використання

{{#invoke:protected edit request|функція}}

Виконаний запит

{{#invoke:protected edit request|функція|виконано=так}}

Відхилений запит

{{#invoke:protected edit request|функція|виконано=ні}}

Відхилений запит із поясненням причини

{{#invoke:protected edit request|функція|виконано=ні|причина=Не вказано авторитетні джерела}}

Додати власну категорію для запиту

{{#invoke:protected edit request|функція|категорія=[[Категорія:Приклад]]}}

Вимкнути категоризацію

{{#invoke:protected edit request|функція|nocat=так}}
Примусити використати вказаний рівень захисту в запиті на редагуванні, ніж автоматично його визначити
{{#invoke:protected edit request|функція|force=так}}
Перезаписати перевірку «повинно бути лише на сторінці обговорення»
{{#invoke:protected edit request|функція|skiptalk=так}}

Усі параметри

{{#invoke:protected edit request|функція
| причина, чому відхилено
| виконано  = 
| done      = 
| причина   = 
| категорія =
| category  =
| nocat     =  
| demo      = 
| force     = 
| skiptalk  =
}}

Категорії

[ред. код]

Шаблон категоризує сторінку залежно від рівня захисту сторінки, до якої потрібно внести зміни. Якщо вказано параметр |категорія=, то буде використано вказану категорію.

Функція Категорія
full Категорія:Запити на редагування захищених сторінок
semi Категорія:Запити на редагування частково захищених сторінок

Модуль намагається визначити рівень захисту сторінки, на якій він використаний. Якщо не вказано параметр |force=, то він автоматично категоризує до відповідного рівня захисту.

require('strict')

local yesno = require('Модуль:Yesno')
local makeMessageBox = require('Модуль:Message box').main
local getArgs

local activeBox -- lazily initialized if we get an active request

----------------------------------------------------------------------
-- Box class definition
----------------------------------------------------------------------

local box = {}
box.__index = box

function box.new(protectionType, args)
	local obj = {}
	obj.args = args
	setmetatable(obj, box)
	obj.tmboxArgs = {} -- Used to store arguments to be passed to tmbox by the box:export method.
	-- Set data fields.
	obj.tmboxArgs.attrs = { ['data-origlevel'] = protectionType }
	return obj
end

function box:setArg(key, value)
	-- This sets a value to be passed to tmbox.
	if key then
		self.tmboxArgs[key] = value
	end
end

function box:export()
	local title = mw.title.getCurrentTitle()
	local skipCheck = yesno(self.args.demo) or yesno(self.args.skiptalk)
	if not title.isTalkPage and not skipCheck then
		return '<span class="error">Помилка: Запити на редагування можна робити лише на сторінці обговорення.</span>' .. (self.args.nocat and '[[Category:Non-talk pages with an edit request template]]' or '')
	end

	-- String together page names provided
--	local titles = {}
--	for k, v in pairs(self.args) do
--		if type(k) == 'number' then
--			table.insert(titles, self.args[k])
--		end
--	end
--	local pagesText
--	if #titles == 0 then
--		pagesText = ''
--	elseif #titles == 1 and mw.title.getCurrentTitle().subjectPageTitle.fullText == titles[1] then
--		pagesText = ''
--	else 
--		for i, v in pairs(titles) do
--		    if i == 1 then
--		        pagesText = ' to [[:' .. v .. ']]'
--		    elseif i == #titles then
--		        pagesText = pagesText .. ' and [[:' .. v .. ']]'
--		    else
--		        pagesText = pagesText .. ', [[:' .. v .. ']]'
--		    end
--		end
--	end
	
	local smalltext, image
	if yesno(self.args.done) then
		smalltext = 'Запит виконано'
		image = '[[Файл:Symbol confirmed.svg|20px]]'
	else
		self.args['причина'] = self.args['причина'] or self.args[1]
		smalltext = 'Запит відхилено' .. (self.args['причина'] and ('<br/><span style=font-size:smaller>' .. self.args['причина'] .. '</span>') or '')
		image = '[[Файл:Symbol declined.svg|20px]]'
	end
	
	self:setArg('smalltext', smalltext)
	self:setArg('image', image)
	self:setArg('small', true)
	self:setArg('class', 'editrequest')
	self:setArg('style', 'min-height:30px;')
	return makeMessageBox('tmbox', self.tmboxArgs)
end

----------------------------------------------------------------------
-- Process arguments and initialise objects
----------------------------------------------------------------------

local p = {}

function p._main(protectionType, args)
	local boxType = box
	args.done = args.done or args['виконано']
	if not args.done then
		if not activeBox then
			activeBox = require('Модуль:Protected edit request/active')(box, yesno, makeMessageBox)
		end
		boxType = activeBox
	end
	local requestBox = boxType.new(protectionType, args)
	return requestBox:export()
end

local mt = {}

function mt.__index(t, k)
	if not getArgs then
		getArgs = require('Модуль:Arguments').getArgs
	end
	return function (frame)
		return t._main(k, getArgs(frame, {wrappers = {'Шаблон:Editprotected', 'Шаблон:Editsemiprotected'--[[, 'Template:Edit template-protected', 'Template:Edit extended-protected', 'Template:Edit interface-protected', 'Template:Edit protected']]}}))
	end
end

return setmetatable(p, mt)