Modul:Protected edit request

IMT HilfeWiki - das Wiki
Version vom 11. Oktober 2014, 19:51 Uhr von Oetterer (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Documentation icon Module documentation

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[Quelltext bearbeiten]

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

Function Protection level Template
full Full protection {{edit protected}}
template Template protection {{edit template-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[Quelltext bearbeiten]

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

Function Category
full Category:Protected edit requests
template Category:Template-protected edit requests
semi Category: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: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 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

-- unfortunately with REL1_23 setting of metatable doesn't seem to work.
-- more precisely: setting metatables works, but Scribunto strips them when the module is returned to the mw environment
-- you can thereby use metatables as long as you are within your module. but it gets lost at the final return :(
--[[
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', 'Vorlage:Edit protected', 'Vorlage:Edit semi-protected', 'Vorlage:Edit template-protected'}}))
	end
end

return setmetatable(p, mt)
--]]
 
-- we have to declare a function for each action manually. reason see line 65ff
function p.full(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._main('full', getArgs(frame, {wrappers = {'Template:Edit protected', 'Template:Edit semi-protected', 'Template:Edit template-protected', 'Vorlage:Edit protected', 'Vorlage:Edit semi-protected', 'Vorlage:Edit template-protected'}}))
end
 
function p.semi(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._main('semi', getArgs(frame, {wrappers = {'Template:Edit protected', 'Template:Edit semi-protected', 'Template:Edit template-protected', 'Vorlage:Edit protected', 'Vorlage:Edit semi-protected', 'Vorlage:Edit template-protected'}}))
end
 
function p.template(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return p._main('template', getArgs(frame, {wrappers = {'Template:Edit protected', 'Template:Edit semi-protected', 'Template:Edit template-protected', 'Vorlage:Edit protected', 'Vorlage:Edit semi-protected', 'Vorlage:Edit template-protected'}}))
end

return p
Cookies helfen uns bei der Bereitstellung des IMT HilfeWikis. Bei der Nutzung vom IMT HilfeWiki werden die in der Datenschutzerklärung beschriebenen Cookies gespeichert.