Module:Protection banner: Difference between revisions
make the category attempt order more configurable
(more data table restructuring, plus some fiddling around with the category name function; this is a progress save, so the code is horribly broken at the moment) |
(make the category attempt order more configurable) |
||
Line 196: | Line 196: | ||
--[[ | --[[ | ||
-- Define the initial order to test properties in. The subtable position | -- Define the initial order to test properties in. The subtable position | ||
-- is the order the properties will be tested in, and the | -- is the order the properties will be tested in, and the keypos value in | ||
-- each subtable is the position of the value in the category key. | -- each subtable is the position of the value in the category key. | ||
--]] | --]] | ||
local properties = { | local properties = { | ||
expiry = { | expiry = {order = 1, keypos = 5, val = expiry}, | ||
namespace = { | namespace = {order = 2, keypos = 3, val = p.matchNamespace(namespace)}, | ||
reason = { | reason = {order = 3, keypos = 4, val = reason}, | ||
level = { | level = {order = 4, keypos = 2, val = level}, | ||
action = { | action = {order = 5, keypos = 1, val = action} | ||
} | } | ||
Line 214: | Line 214: | ||
-- vandalism categories if they were available. | -- vandalism categories if they were available. | ||
--]] | --]] | ||
local categoryOrder | local reasonTable = cfg.reasons[reason] | ||
if | local categoryOrder = reasonTable and reasonTable.categoryOrder | ||
categoryOrder = ' | local categoryOrderType = type(categoryOrder) | ||
local configOrder = {} | |||
if categoryOrderType == 'table' then | |||
local dupes = {} | |||
for i = 1, 5 do | |||
local propertiesKey = categoryOrder[i] | |||
if not propertiesKey then | |||
error('no properties key') | |||
end | |||
local property = properties[propertiesKey] | |||
if not property then | |||
error('invalid properties key') | |||
end | |||
if dupes[property] then | |||
error('dupe detected') | |||
else | |||
dupes[property] = true | |||
end | |||
configOrder[i] = property | |||
end | |||
else | else | ||
for propertiesKey, t in pairs(properties) do | |||
configOrder[t.order] = t | |||
end | |||
if categoryOrderType == 'string' then | |||
local property = properties[categoryOrder] | |||
if not property then | |||
error('invalid category order string') | |||
end | |||
toTableEnd(configOrder, property.order) | |||
end | |||
end | end | ||
Line 237: | Line 258: | ||
--]] | --]] | ||
local active, inactive = {}, {} | local active, inactive = {}, {} | ||
for i, t in ipairs( | for i, t in ipairs(configOrder) do | ||
if t.val then | if t.val then | ||
active[#active + 1] = t | active[#active + 1] = t | ||
Line 285: | Line 306: | ||
local key = {} | local key = {} | ||
for j, t in ipairs(attemptOrder) do | for j, t in ipairs(attemptOrder) do | ||
if j > noActive then | if j > noActive then | ||
key[ | key[t.keypos] = 'all' | ||
else | else | ||
local quotient = i / 2 ^ (j - 1) | local quotient = i / 2 ^ (j - 1) | ||
quotient = ceil(quotient) | quotient = ceil(quotient) | ||
if quotient % 2 == 1 then | if quotient % 2 == 1 then | ||
key[ | key[t.keypos] = t.val | ||
else | else | ||
key[ | key[t.keypos] = 'all' | ||
end | end | ||
end | end |