Module:Protected edit request
![]() | 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. |
![]() | 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. |
![]() | This Lua module is used on approximately 54,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 depends on the following other modules: |
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}}
- 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
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.
local p = {}
local yesno = require('Module:Yesno')
local makeToolbar = require('Module:Toolbar').main
local function getTitleObject(...)
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function getSubjectTitleObject(title)
return getTitleObject(title.text, mw.site.namespaces[title.namespace].subject.id)
end
local function getSubpageObject(title, subpage)
local success, obj = pcall(title.subPageTitle, title, subpage)
if success then
return obj
end
end
local function makeUrlLink(title, query, display)
return mw.ustring.format('[%s %s]', title:fullUrl(query), display)
end
local function makeWikilink(title, display)
return mw.ustring.format('[[%s|%s]]', title.prefixedText, display)
end
local function makeWikilink(title, display)
return mw.ustring.format('[[%s|%s]]', title.prefixedText, display)
end
local function makeViewLink(title, display)
return makeUrlLink(title, {redirect = 'no'}, display)
end
local function makeEditLink(title, display)
return makeUrlLink(title, {action = 'edit'}, display)
end
local function makeHistoryLink(title, display)
return makeUrlLink(title, {action = 'history'}, display)
end
local function makeCompareLink(title1, title2, display)
display = display or 'diff'
local compareTitle = getTitleObject('Special:ComparePages')
return makeUrlLink(compareTitle, {page1 = title1.prefixedText, page2 = title2.prefixedText}, display)
end
local function makeLogLink(title, logType, display)
local logTitle = getTitleObject('Special:Log')
return makeUrlLink(logTitle, {type = logType, page = title.prefixedText}, display)
end
local function urlEncodeTitle(title)
return mw.uri.encode(title.prefixedText)
end
local function makeLinksList(title)
local tbargs = {} -- The argument list to pass to Module:Toolbar
tbargs.style = 'font-size: smaller;'
tbargs.separator = 'dot'
-- Page links.
table.insert(tbargs, makeViewLink(title, 'view'))
table.insert(tbargs, makeEditLink(title, 'edit'))
table.insert(tbargs, makeHistoryLink(title, 'history'))
-- Sandbox links.
local sandboxTitle = getSubpageObject(title, 'sandbox')
if sandboxTitle and sandboxTitle.exists then
table.insert(tbargs, makeViewLink(sandboxTitle, 'sandbox'))
table.insert(tbargs, makeEditLink(sandboxTitle, 'edit sandbox'))
table.insert(tbargs, makeHistoryLink(sandboxTitle, 'sandbox history'))
table.insert(tbargs, makeCompareLink(title, sandboxTitle, 'sandbox diff'))
end
-- Test cases links.
local testcasesTitle = getSubpageObject(title, 'testcases')
if testcasesTitle and testcasesTitle.exists then
table.insert(tbargs, makeViewLink(testcasesTitle, 'test cases'))
end
-- Transclusion count link.
if title.namespace == 10 or title.namespace == 828 then -- Only add the transclusion count link for templates and modules.
table.insert(tbargs, mw.ustring.format('[http://toolserver.org/~jarry/templatecount/index.php?lang=en&name=%s#bottom transclusion count]', urlEncodeTitle(title)))
end
-- Protection log link.
if title.namespace ~= 8 then -- MediaWiki pages don't have protection log entries.
table.insert(tbargs, makeLogLink(title, 'protect', 'protection log'))
end
return makeToolbar(tbargs)
end
function p.main(frame)
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().origArgs
for k, v in pairs(frame.origArgs) do
origArgs = frame.origArgs
break
end
else
origArgs = frame
end
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(args)
end
function p.test(frame)
local title = mw.title.new(frame.args[1])
return makeLinksList(title)
end
return p