Module:Protection banner: Difference between revisions
tidy this up and comment it so it will be easier for others to understand
(fix logic for reasonBehavior == 'all' and fix the office protection category key) |
(tidy this up and comment it so it will be easier for others to understand) |
||
Line 3: | Line 3: | ||
local categories = { | local categories = { | ||
-- The key strings follow this format: | |||
-- type, level, ns, reason, expiry | |||
['edit-autoconfirmed-user-all-all'] = 'Wikipedia semi-protected user and user talk pages', | ['edit-autoconfirmed-user-all-all'] = 'Wikipedia semi-protected user and user talk pages', | ||
['edit-autoconfirmed-project-all-all'] = 'Semi-protected project pages', | ['edit-autoconfirmed-project-all-all'] = 'Semi-protected project pages', | ||
Line 57: | Line 59: | ||
} | } | ||
local reasonBehaviors = { | |||
vandalism = 'namespaceFirst', | |||
dispute = 'reasonFirst', | |||
blp = 'reasonFirst', | |||
sock = 'reasonFirst', | |||
office = 'reasonFirst', | |||
} | |||
--[[ | |||
-- Not currently used | |||
local error_categories = { | local error_categories = { | ||
incorrect = 'Wikipedia pages with incorrect protection templates', | incorrect = 'Wikipedia pages with incorrect protection templates', | ||
Line 63: | Line 75: | ||
template = 'Wikipedia template-protected pages other than templates and modules' | template = 'Wikipedia template-protected pages other than templates and modules' | ||
} | } | ||
--]] | |||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
Line 80: | Line 81: | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local | -- Define often-used functions as local variables. | ||
local | local tconcat = table.concat | ||
local p = {} | local p = {} | ||
function p. | function p.matchNamespace(ns) | ||
-- | -- Matches a namespace number to a string that can be passed to the | ||
-- namespacep parameter of p.getCategoryName. | |||
-- | |||
if not ns or type(ns) ~= 'number' then | if not ns or type(ns) ~= 'number' then | ||
return 'all' | return 'all' | ||
Line 123: | Line 102: | ||
function p.getCategoryName(cats, protType, protLevel, namespace, reason, expiry) | function p.getCategoryName(cats, protType, protLevel, namespace, reason, expiry) | ||
-- Gets a category name from the category table, given a combination of | |||
-- the protection type, the protection level, the namespace number, the | |||
-- reason for protection, and the expiry date. | |||
-- Preprocess parameters | -- Preprocess parameters | ||
cats = cats or categories | cats = cats or categories | ||
protType = protType or 'all' | protType = protType or 'all' | ||
protLevel = protLevel or 'all' | protLevel = protLevel or 'all' | ||
namespace = p. | namespace = p.matchNamespace(namespace) | ||
reason = reason or 'all' | reason = reason or 'all' | ||
if not expiry then | if not expiry then | ||
Line 135: | Line 118: | ||
end | end | ||
--[[ | |||
-- Define the key table and the order to test it in. | -- Define the key table and the order to test it in. | ||
-- | -- The idiosyncracies of the old template system have been distilled down to | ||
-- | -- two basic behaviors - templates that prioritise matching the reason over | ||
-- matching the namespace, and templates that prioritise matching the | |||
-- namespace over matching the reason. In each case the function tries to | |||
local | -- match specific keys, and if there is no match, it proceeds to match | ||
-- increasingly generic keys, until eventually it will match the key | |||
-- "all-all-all-all-all". | |||
--]] | |||
local protectionProperties = {protType, protLevel, namespace, reason, expiry} | |||
local reasonBehavior = reasonBehaviors[reason] | local reasonBehavior = reasonBehaviors[reason] | ||
local attemptOrder | local attemptOrder | ||
Line 153: | Line 134: | ||
attemptOrder = { | attemptOrder = { | ||
-- type, level, ns, reason, expiry | -- type, level, ns, reason, expiry | ||
-- true corresponds to the original protectionProperties key, | |||
-- and false corresponds to the key "all". | |||
{true, true, true, true, true}, -- 1 | {true, true, true, true, true}, -- 1 | ||
{true, true, true, true, false}, -- 2 | {true, true, true, true, false}, -- 2 | ||
Line 199: | Line 182: | ||
for i, t in ipairs(attemptOrder) do | for i, t in ipairs(attemptOrder) do | ||
local key = {} | local key = {} | ||
for j, | for j, useProperty in ipairs(t) do | ||
if | if useProperty then | ||
key[j] = | key[j] = protectionProperties[j] | ||
else | else | ||
key[j] = 'all' | key[j] = 'all' | ||
end | end | ||
end | end | ||
key = | key = tconcat(key, '-') | ||
mw.log(key) -- for debugging | mw.log(key) -- for debugging | ||
local attempt = cats[key] | local attempt = cats[key] |