Difference between revisions of "Module:Protected edit request"

From blackwiki
Jump to navigation Jump to search
blackwiki>Jackmcbarn
blackwiki>Jackmcbarn
(use Module:Arguments and metatables)
Line 3: Line 3:
 
local yesno = require('Module:Yesno')
 
local yesno = require('Module:Yesno')
 
local makeMessageBox = require('Module:Message box').main
 
local makeMessageBox = require('Module:Message box').main
 +
local getArgs
  
 
local activeBox -- lazily initialized if we get an active request
 
local activeBox -- lazily initialized if we get an active request
Line 42: Line 43:
 
local p = {}
 
local p = {}
  
function p.main(protectionType, args)
+
function p._main(protectionType, args)
 
local boxType = box
 
local boxType = box
 
if not yesno(args.answered or args.ans, true) then
 
if not yesno(args.answered or args.ans, true) then
Line 54: Line 55:
 
end
 
end
  
local function makeWrapper(protectionType)
+
local mt = {}
 +
 
 +
function mt.__index(t, k)
 +
if not getArgs then
 +
getArgs = require('Module:Arguments').getArgs
 +
end
 
return function (frame)
 
return function (frame)
-- If called via #invoke, use the args passed into the invoking template, or the args passed to #invoke if any exist.
+
return t._main(k, getArgs(frame, {wrappers = {'Template:Edit protected', 'Template:Edit semi-protected', 'Template:Edit template-protected'}}))
-- Otherwise assume args are being passed directly in from the debug console or from another Lua module.
 
local origArgs
 
if frame == mw.getCurrentFrame() then
 
origArgs = frame:getParent().args
 
for k, v in pairs(frame.args) do
 
origArgs = frame.args
 
break
 
end
 
else
 
origArgs = frame
 
end
 
-- Trim whitespace and remove blank arguments.
 
local args = {}
 
for k, v in pairs(origArgs) do
 
if type(v) == 'string' then
 
v = mw.text.trim(v)
 
end
 
if v ~= '' then
 
args[k] = v
 
end
 
end
 
return p.main(protectionType, args)
 
 
end
 
end
 
end
 
end
  
local funcNames = {'semi', 'template', 'full'}
+
return setmetatable(p, mt)
for _, funcName in ipairs(funcNames) do
 
p[funcName] = makeWrapper(funcName)
 
end
 
 
 
return p
 

Revision as of 16:51, 6 June 2014

This module produces a message box used to request edits to protected pages. Edit requests can be made for fully protected, template-protected and semi-protected pages, and it is possible to request edits to multiple pages at once.

This module should be used on the talk page of the page to be edited. If you are not able to place it directly on this talk page, then you can specify the page to be edited with the positional parameters. You can also specify multiple pages to be edited, if this is more convenient than making multiple edit requests in different locations.

Syntax

The module has five functions, one for each available protection level:

Function Protection level Template
interface CSS/JS protection {{edit interface-protected}}
full Full protection {{edit fully-protected}}
template Template protection {{edit template-protected}}
extended Extended confirmed protection {{edit extended-protected}}
semi Semi-protection {{edit semi-protected}}
Basic usage
{{#invoke:protected edit request|function}}
Specify pages to be edited
{{#invoke:protected edit request|function|First page to be edited|Second page to be edited|...}}
Deactivate a request
{{#invoke:protected edit request|function|answered=yes}}
Force a request's protection level rather than allowing auto-detection
{{#invoke:protected edit request|function|force=yes}}
All parameters
{{#invoke:protected edit request|function
| First page to be edited|Second page to be edited|Third page to be edited|...
| answered = 
| ans      = 
| demo     = 
| force    = 
}}

Categories

The template categorises the page depending on the protection level of the pages to be edited.

Function Category
interface Category:Wikipedia interface-protected edit requests
full Category:Wikipedia fully-protected edit requests
template Category:Wikipedia template-protected edit requests
extended Category:Wikipedia extended-confirmed-protected edit requests
semi Category:Wikipedia semi-protected edit requests

The module attempts to detect the protection level of the pages used. If one or more of the pages are unprotected, or multiple pages with different protection levels are specified, the page is categorized in Category:Wikipedia edit requests possibly using incorrect templates. Otherwise, if the force parameter is not set, it is automatically categorized in the correct protection level.


require('Module:No globals')

local yesno = require('Module:Yesno')
local makeMessageBox = require('Module: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 = {}
	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()
	self:setArg('smalltext', "This [[Wikipedia:Edit requests|edit request]] has been answered. Set the <code style=\"white-space: nowrap;\">&#124;answered&#61;</code> or <code style=\"white-space: nowrap;\">&#124;ans&#61;</code> parameter to '''no''' to reactivate your request.")
	self:setArg('small', true)
	self:setArg('class', 'editrequest')
	return makeMessageBox('tmbox', self.tmboxArgs)
end

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

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('Module: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('Module:Arguments').getArgs
	end
	return function (frame)
		return t._main(k, getArgs(frame, {wrappers = {'Template:Edit protected', 'Template:Edit semi-protected', 'Template:Edit template-protected'}}))
	end
end

return setmetatable(p, mt)