en>Mr. Stradivarius |
|
Line 1: |
Line 1: |
| -- This module implements {{pp-meta}} and its daughter templates such as
| | {{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude> |
| -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
| | {{documentation}} |
| | | <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> |
| local categories = {
| | </noinclude> |
| ['edit-semi-user-all-all'] = 'Wikipedia semi-protected user and user talk pages',
| |
| ['edit-semi-project-all-all'] = 'Semi-protected project pages',
| |
| ['edit-semi-file-all-all'] = 'Semi-protected images',
| |
| ['edit-semi-template-all-all'] = 'Wikipedia semi-protected templates',
| |
| ['edit-semi-portal-all-all'] = 'Semi-protected portals',
| |
| ['edit-semi-talk-all-all'] = 'Semi-protected talk pages',
| |
| ['edit-semi-all-vandalism-all'] = 'Wikipedia pages semi-protected against vandalism',
| |
| ['edit-full-user-all-all'] = 'Wikipedia protected user and user talk pages',
| |
| ['edit-full-file-all-all'] = 'Protected images',
| |
| ['edit-full-project-all-all'] = 'Protected project pages',
| |
| ['edit-full-template-all-all'] = 'Wikipedia protected templates',
| |
| ['edit-full-talk-all-all'] = 'Protected talk pages',
| |
| ['edit-full-all-vandalism-all'] = 'Wikipedia pages protected against vandalism',
| |
| ['edit-semi-all-dispute-all'] = 'Wikipedia pages semi-protected due to dispute',
| |
| ['edit-full-all-dispute-all'] = 'Wikipedia pages protected due to dispute',
| |
| ['move-full-all-dispute-all'] = 'Wikipedia pages move-protected due to dispute',
| |
| ['move-full-user-all-all'] = 'Wikipedia move-protected user and user talk pages',
| |
| ['move-full-project-all-all'] = 'Wikipedia move-protected project pages',
| |
| ['move-full-portal-all-all'] = 'Wikipedia move-protected portals',
| |
| ['move-full-all-vandalism-all'] = 'Wikipedia pages move-protected due to vandalism',
| |
| ['edit-semi-template-all-all'] = 'Wikipedia semi-protected templates',
| |
| ['move-full-template-all-all'] = 'Wikipedia move-protected templates',
| |
| ['edit-all-template-all-all'] = 'Wikipedia protected templates',
| |
| ['move-full-portal-all-all'] = 'Wikipedia move-protected portals',
| |
| ['edit-semi-all-sock-all'] = 'Wikipedia pages semi-protected from banned users',
| |
| ['edit-full-all-sock-all'] = 'Wikipedia pages protected from banned users',
| |
| ['edit-semi-all-blp-temp'] = 'Wikipedia temporarily semi-protected biographies of living people',
| |
| ['edit-full-all-blp-temp'] = 'Wikipedia temporarily protected biographies of living people',
| |
| ['edit-semi-all-blp-indef'] = 'Wikipedia indefinitely semi-protected biographies of living people',
| |
| ['edit-full-all-blp-indef'] = 'Wikipedia indefinitely protected biographies of living people',
| |
| ['edit-semi-all-all-indef'] = 'Wikipedia indefinitely semi-protected pages',
| |
| ['move-full-talk-all-all'] = 'Wikipedia move-protected talk pages',
| |
| ['move-full-all-all-indef'] = 'Wikipedia indefinitely move-protected pages',
| |
| ['edit-semi-all-all-all'] = 'Wikipedia semi-protected pages',
| |
| ['all-all-all-all-all'] = 'Wikipedia protected pages',
| |
| ['edit-semi-category-all-all'] = 'Wikipedia semi-protected categories',
| |
| ['edit-full-category-all-all'] = 'Wikipedia protected categories',
| |
| ['move-full-all-all-all'] = 'Wikipedia move-protected pages',
| |
| ['all-all-all-office-all'] = 'Wikipedia Office-protected pages',
| |
| ['pc-semi-all-all-all'] = 'Wikipedia pending changes protected pages (level 1)',
| |
| ['pc-reviewer-all-all-all'] = 'Wikipedia pending changes protected pages (level 2)',
| |
| }
| |
| | |
| local nskeys = {
| |
| [2] = 'user',
| |
| [3] = 'user',
| |
| [4] = 'project',
| |
| [6] = 'file',
| |
| [10] = 'template',
| |
| [12] = 'project',
| |
| [14] = 'category',
| |
| [100] = 'portal',
| |
| }
| |
| | |
| local error_categories = {
| |
| incorrect = 'Wikipedia pages with incorrect protection templates',
| |
| no_expiry = 'Wikipedia protected pages without expiry',
| |
| create = 'Wikipedia pages tagged as create-protected',
| |
| template = 'Wikipedia template-protected pages other than templates and modules'
| |
| }
| |
| | |
| local template_types = {
| |
| vandalism = {
| |
| namespaces = false, -- defaults to all namespaces
| |
| editLevels = false, -- all edit protection levels
| |
| moveLevels = false, -- all move protection levels
| |
| createLevels = false, -- all create protection levels
| |
| header = false,
| |
| reason = 'due to [[Wikipedia:Vandalism|vandalism]]',
| |
| icon_reason = 'due to vandalism',
| |
| }
| |
| }
| |
| | |
| --------------------------------------------------------------------------------
| |
| -- Main functions
| |
| --------------------------------------------------------------------------------
| |
| | |
| local getArgs = require('Module:Arguments').getArgs
| |
| local yesno = require('Module:Yesno')
| |
| | |
| local p = {}
| |
| | |
| function p.main(frame)
| |
| -- Get data
| |
| local args = getArgs(frame)
| |
| local title = p.getTitle(args.page)
| |
| local protType, protLevel = p.getProtectionStatus(title)
| |
| local namespace = p.getNamespace(title)
| |
| local expiry = p.getExpiry(args.expiry)
| |
| local reason = p.getReason(args.reason)
| |
| | |
| -- Sort categories and build a category link with the best match
| |
| categories = p.sortCategories(categories, protType, protLevel, namespace, expiry, reason)
| |
| local category = categories[1].name
| |
| category = string.format('[[Category:%s]]', category)
| |
| | |
| -- Find whether we are small or not and output a padlock or a banner as appropriate
| |
| local isSmall = yesno(args.small, true)
| |
| if isSmall then
| |
| return p.exportPadlock()
| |
| else
| |
| return p.exportBanner()
| |
| end
| |
| end
| |
| | |
| function p.parseNamespace(ns)
| |
| -- The ns variable is the namespace number.
| |
| if not ns or type(ns) ~= 'number' then
| |
| return 'all'
| |
| end
| |
| local nskey = nskeys[ns]
| |
| if not nskey and ns % 2 == 1 then
| |
| nskey = 'talk'
| |
| elseif not nskey then
| |
| nskey = 'all'
| |
| end
| |
| return nskey
| |
| end
| |
| | |
| function p.getCategoryName(cats, protType, protLevel, namespace, reason, expiry)
| |
| -- Preprocess parameters
| |
| cats = cats or categories
| |
| protType = protType or 'all'
| |
| protLevel = protLevel or 'all'
| |
| namespace = p.parseNamespace(namespace)
| |
| reason = reason or 'all'
| |
| if not expiry then
| |
| expiry = 'all'
| |
| elseif expiry ~= 'indef' then
| |
| expiry = 'temp'
| |
| end
| |
|
| |
| -- Define the key table and the order to test it in.
| |
| -- This part is a little like playing regex golf - we have to make up a new
| |
| -- rule for every idiosyncracy that was in the old template system.
| |
| local keyTable = {protType, protLevel, namespace, reason, expiry}
| |
| local attemptOrder = {
| |
| -- type, level, ns, reason, expiry
| |
| {true, true, true, true, true}, -- 1
| |
| {true, true, true, true, false}, -- 2
| |
| {true, true, true, false, true}, -- 3
| |
| {true, true, false, true, true}, -- 4
| |
| {true, true, true, false, false}, -- 5
| |
| {true, true, false, true, false}, -- 6
| |
| {true, true, false, false, true}, -- 7
| |
| {true, true, false, false, false}, -- 8
| |
| {true, false, false, false, false}, -- 9
| |
| {false, false, false, false, false} -- 10
| |
| }
| |
| if reason ~= 'vandalism' then
| |
| attemptOrder[3], attemptOrder[4] = attemptOrder[4], attemptOrder[3]
| |
| attemptOrder[5], attemptOrder[6] = attemptOrder[6], attemptOrder[5]
| |
| end
| |
|
| |
| -- Try successively generic matches until we run out of key combinations
| |
| for i, t in ipairs(attemptOrder) do
| |
| local key = {}
| |
| for j, useKeyTable in ipairs(t) do
| |
| if useKeyTable then
| |
| key[j] = keyTable[j]
| |
| else
| |
| key[j] = 'all'
| |
| end
| |
| end
| |
| key = table.concat(key, '-')
| |
| mw.log(key) -- for debugging
| |
| local attempt = cats[key]
| |
| if attempt then
| |
| return attempt
| |
| end
| |
| end
| |
| error('No category match found; please define the category for key "all-all-all-all-all"')
| |
| end
| |
| | |
| return p
| |