Module:Protected edit request
File:Lua-Logo.svg | This module depends on the following other modules: |
File:Green check.svg | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
File:Full-protection-shackle.svg | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
File:Ambox warning yellow.svg | This Lua module is used on approximately 43,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
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[edit source]
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}}
- Override the "must only be on a talk page" check
{{#invoke:protected edit request|function|skiptalk=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 = | skiptalk = }}
Categories[edit source]
The template categorises the page depending on the protection level of the pages to be edited.
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 = {} 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">Error: Protected edit requests can only be made on the talk page.</span>[[Category:Non-talk pages with an edit request template]]' 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 self:setArg('smalltext', "This [[Wikipedia:Edit requests|edit request]]" .. pagesText .. " has been answered. Set the <code style=\"white-space: nowrap;\">|answered=</code> or <code style=\"white-space: nowrap;\">|ans=</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 fully-protected', 'Template:Edit semi-protected', 'Template:Edit template-protected', 'Template:Edit extended-protected', 'Template:Edit interface-protected'}})) end end return setmetatable(p, mt)