Jump to content

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


Cookies help us deliver our services. By using our services, you agree to our use of cookies.