Module:Protection banner: Difference between revisions
add a Documentation class for autogenerating the reason documentation
(produce wikitext errors rather than script errors for errors caused by invalid user input) |
(add a Documentation class for autogenerating the reason documentation) |
||
Line 789: | Line 789: | ||
:wikitext(self:renderImage()) | :wikitext(self:renderImage()) | ||
return tostring(root) | return tostring(root) | ||
end | |||
-------------------------------------------------------------------------------- | |||
-- Documentation class | |||
-------------------------------------------------------------------------------- | |||
local Documentation = class('Documentation') | |||
function Documentation:initialize(cfg) | |||
self._cfg = cfg | |||
end | |||
function Documentation:makeReasonsTable() | |||
-- Get the data from the cfg.banners table. | |||
local rowData = {} | |||
for action, reasonTables in pairs(self._cfg.banners) do | |||
for reason, t in pairs(reasonTables) do | |||
rowData[#rowData + 1] = { | |||
reason = reason, | |||
action = action, | |||
description = t.description | |||
} | |||
end | |||
end | |||
-- Sort the table into alphabetical order, first by action and then by | |||
-- reason. | |||
table.sort(rowData, function (t1, t2) | |||
if t1.action == t2.action then | |||
return t1.reason < t2.reason | |||
else | |||
return t1.action < t2.action | |||
end | |||
end) | |||
-- Assemble a wikitable of the data. | |||
local msg = self._cfg.msg | |||
local ret = {} | |||
ret[#ret + 1] = '{| class="wikitable"' | |||
if #rowData < 1 then | |||
ret[#ret + 1] = '|-' | |||
ret[#ret + 1] = string.format( | |||
'| colspan="3" | %s', | |||
msg['documentation-blurb-noreasons'] | |||
) | |||
else | |||
-- Header | |||
ret[#ret + 1] = '|-' | |||
ret[#ret + 1] = string.format( | |||
'! %s\n! %s\n! %s', | |||
msg['documentation-heading-reason'], | |||
msg['documentation-heading-action'], | |||
msg['documentation-heading-description'] | |||
) | |||
-- Rows | |||
for _, t in ipairs(rowData) do | |||
ret[#ret + 1] = '|-' | |||
ret[#ret + 1] = string.format( | |||
'| %s\n| %s\n| %s', | |||
t.reason, | |||
t.action, | |||
t.description | |||
) | |||
end | |||
end | |||
ret[#ret + 1] = '|}' | |||
return table.concat(ret, '\n') | |||
end | end | ||
Line 806: | Line 874: | ||
Padlock = Padlock, | Padlock = Padlock, | ||
} | } | ||
end | |||
function p.reasonTable() | |||
local cfg = mw.loadData('Module:Protection banner/config') | |||
local documentationObj = Documentation:new(cfg) | |||
return documentationObj:makeReasonsTable() | |||
end | end | ||