Módulo:Testes/Gkiyoshinishimoto/Protected edit request

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Este módulo ainda está em fase de testes aqui.

Este módulo produz uma caixa de mensagem usada para solicitar edições para páginas protegidas. As solicitações de edição podem ser feitas para páginas protegidas por administradores, protegidas por editores de predefinições e semiprotegidas (ainda estamos "trabalhando" nas semiprotegidas por autorrevisores), e é possível solicitar edições em várias páginas de uma só vez.

Este módulo deve ser utilizado na página de discussão da página a ser editada. Se você não conseguir colocá-lo diretamente nesta página de discussão, poderá especificar a página a ser editada com os parâmetros posicionais. Você também pode especificar diversas páginas a serem editadas, se isso for mais conveniente do que fazer diversas solicitações de edição em locais diferentes.

Sintaxe[editar código-fonte]

O módulo possui cinco funções, uma para cada nível de proteção disponível:

Função Nível de proteção Predefinição
interface protegida por administradores de interface {{Teste/Gkiyoshinishimoto/Edit interface-protected}}
full protegida por administradores {{Teste/Gkiyoshinishimoto/Edit fully-protected}}
template protegida por editores de predefinições {{Teste/Gkiyoshinishimoto/Edit template-protected}}
extended protegida por autoconfirmados estendidos {{Teste/Gkiyoshinishimoto/Edit extended-protected}}
semi Semiprotegida {{Teste/Gkiyoshinishimoto/Edit semi-protected}}

Uso básico

{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função}}

Especificar as páginas que serão editadas

{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função|Primeira página a ser editada|Segunda página a ser editada|...}}

Desativar uma solicitação

{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função|answered=yes}}
Forçar o nível de proteção de uma solicitação em vez de permitir a detecção automática
{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função|force=yes}}
Substituir a verificação "deve estar apenas em uma página de discussão"
{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função|skiptalk=yes}}

Todos os parâmetros

{{#invoke:Testes/Gkiyoshinishimoto/Protected edit request|função
| Primeira página a ser editada|Segunda página a ser editada|Terceira página a ser editada|...
| answered = 
| ans      = 
| demo     = 
| force    = 
| skiptalk =
}}

Categorias[editar código-fonte]

A predefinição categoriza a página dependendo do nível de proteção das páginas a serem editadas.

Função Categoria
interface Categoria:!Solicitações de edição em páginas protegidas por administradores de interface da Wikipédia
full Categoria:!Solicitações de edição em páginas protegidas por administradores da Wikipédia
template Categoria:!Solicitações de edição em páginas protegidas por editores de predefinições da Wikipédia
extended Categoria:!Solicitações de edição em páginas semiprotegidas por autoconfirmados estendidos da Wikipédia
semi Categoria:!Solicitações de edição em páginas semiprotegidas da Wikipédia

O módulo tenta detectar o nível de proteção das páginas utilizadas. Se uma ou mais páginas estiverem desprotegidas, ou múltiplas páginas com diferentes níveis de proteção forem especificadas, a página será categorizada em Categoria:!Solicitações de edição da Wikipédia possivelmente usando predefinições incorretas. Caso não, se o parâmetro force não estiver definido, elas serão automaticamente categorizadas no nível de proteção correto.

require('strict')

local yesno = require('Módulo:Testes/Gkiyoshinishimoto/Yesno')
local makeMessageBox = require('Módulo:Testes/Gkiyoshinishimoto/Message box').main
local getArgs

local activeBox -- Inicializado preguiçosamente se recebermos uma solicitação ativa

----------------------------------------------------------------------
-- Definição de classe de caixa
----------------------------------------------------------------------

local box = {}
box.__index = box

function box.new(protectionType, args)
	local obj = {}
	obj.args = args
	setmetatable(obj, box)
	obj.tmboxArgs = {} -- Usado para armazenar argumentos a serem passados para "tmbox" pelo método "box:export".
	-- Define os campos de dados.
	obj.tmboxArgs.attrs = { ['data-origlevel'] = protectionType }
	return obj
end

function box:setArg(key, value)
	-- Isso define um valor a ser passado para "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">Erro: Solicitações de edição protegidas só podem ser feitas na página de discussão.</span>[[Categoria:!Páginas que não são de discussão com uma predefinição de solicitação de edição]]'
	end

	-- Sequencia os nomes de páginas fornecidos juntos
	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 = ' para [[:' .. v .. ']]'
		    elseif i == #titles then
		        pagesText = pagesText .. ' e [[:' .. v .. ']]'
		    else
		        pagesText = pagesText .. ', [[:' .. v .. ']]'
		    end
		end
	end
	
	self:setArg('smalltext', "Esta solicitação de edição" .. pagesText ..
		" foi respondida. Defina o parâmetro <code style=\"white-space: nowrap;\">&#124;answered&#61;</code> ou <code style=\"white-space: nowrap;\">&#124;ans&#61;</code> como '''no''' para reativar sua solicitação.")
	self:setArg('small', true)
	self:setArg('class', 'editrequest')
	return makeMessageBox('tmbox', self.tmboxArgs)
end

----------------------------------------------------------------------
-- Processa argumentos e inicializa objetos
----------------------------------------------------------------------

local p = {}

function p._main(protectionType, args)
	local boxType = box
	if not yesno(args.answered or args.ans, true) then
		if not activeBox then
			activeBox = require('Módulo:Testes/Gkiyoshinishimoto/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('Módulo:Testes/Gkiyoshinishimoto/Arguments').getArgs
	end
	return function (frame)
		return t._main(k, getArgs(frame, {wrappers = {'Predefinição:Teste/Gkiyoshinishimoto/Edit fully-protected', 'Predefinição:Teste/Gkiyoshinishimoto/Edit semi-protected', 'Predefinição:Teste/Gkiyoshinishimoto/Edit template-protected', 'Predefinição:Teste/Gkiyoshinishimoto/Edit extended-protected', 'Predefinição:Teste/Gkiyoshinishimoto/Edit interface-protected'}}))
	end
end

return setmetatable(p, mt)