Module:Protection banner: Difference between revisions

get rid of the config class while still allowing replacing it for testing
(don't keep the whole export table around when we only need one thing from it)
(get rid of the config class while still allowing replacing it for testing)
Line 10:
 
-- Lazily initialise modules and objects we don't always need.
local mArguments, mMessageBox, lang, config
 
--------------------------------------------------------------------------------
-- Config class
--------------------------------------------------------------------------------
 
local Config = class('Config')
 
function Config:initialize(data)
data = data or mw.loadData('Module:Protection banner/config')
self._cfg = data.cfg
self._msg = data.msg
self._bannerConfigTables = {}
end
 
function Config:getBannerConfig(protectionObj)
if self._bannerConfigTables[protectionObj] then
return self._bannerConfigTables[protectionObj]
else
local ret = {}
local cfg = self._cfg
local action = protectionObj:getAction()
local level = protectionObj:getLevel()
local reason = protectionObj:getReason()
local fields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
local configTables = {}
if cfg.banners[action] then
configTables[#configTables + 1] = cfg.banners[action][reason]
end
if cfg.defaultBanners[action] then
configTables[#configTables + 1] = cfg.defaultBanners[action][level]
configTables[#configTables + 1] = cfg.defaultBanners[action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(fields) do
for j, t in ipairs(configTables) do
if t[field] then
ret[field] = t[field]
break
end
end
end
self._bannerConfigTables[protectionObj] = ret
return ret
end
end
 
function Config:getConfigTable(key)
local blacklist = {
banners = true,
defaultBanners = true,
masterBanner = true
}
if not blacklist[key] then
return self._cfg[key]
else
return nil
end
end
 
function Config:getMessage(key)
return self._msg[key]
end
 
--------------------------------------------------------------------------------
Line 137 ⟶ 68:
-- Set expiry
if args.expiry then
local indefStrings = configObj:getConfigTable('.cfg.indefStrings')
if indefStrings[args.expiry] then
self._expiry = 'indef'
Line 157 ⟶ 88:
-- Set protection date
self._protectionDate = validateDate(args.date, 'protection date')
-- Set banner config
do
self.bannerConfig = {}
local cfg = configObj.cfg
local fields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
local configTables = {}
if cfg.banners[self._action] then
configTables[#configTables + 1] = cfg.banners[self._action][self._reason]
end
if cfg.defaultBanners[self._action] then
configTables[#configTables + 1] = cfg.defaultBanners[self._action][self._level]
configTables[#configTables + 1] = cfg.defaultBanners[self._action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(fields) do
for j, t in ipairs(configTables) do
if t[field] then
self.bannerConfig[field] = t[field]
break
end
end
end
end
end
 
Line 192 ⟶ 154:
self._configObj = configObj
self._protectionObj = protectionObj
self._bannerConfig = configObj:getBannerConfig(protectionObj).bannerConfig
self._titleObj = titleObj
end
Line 221 ⟶ 183:
 
function Blurb:_getExpandedMessage(msg)
local msg = self._configObj:getMessage(.msg)[msg]
return self:_substituteParameters(msg)
end
Line 396 ⟶ 358:
 
function Blurb:_makeImageLinkParameter()
local imageLinks = self._configObj:getConfigTable('.cfg.imageLinks')
local action = self._protectionObj:getAction()
local level = self._protectionObj:getLevel()
Line 429 ⟶ 391:
 
function Blurb:_makePagetypeParameter()
local pagetypes = self._configObj:getConfigTable('.cfg.pagetypes')
local namespace = self._titleObj.namespace
return pagetypes[namespace] or pagetypes.default or error('no default pagetype defined')
Line 435 ⟶ 397:
 
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._configObj:getConfigTable('.cfg.protectionBlurbs')
local action = self._protectionObj:getAction()
local level = self._protectionObj:getLevel()
Line 461 ⟶ 423:
 
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._configObj:getConfigTable('.cfg.protectionLevels')
local action = self._protectionObj:getAction()
local level = self._protectionObj:getLevel()
Line 604 ⟶ 566:
-- Fully protected modules and templates get the special red "indef"
-- padlock.
self._imageFilename = self._configObj:getMessage(.msg['image-filename-indef')]
return nil
end
 
-- Deal with regular protection types.
local images = self._configObj:getConfigTable('.cfg.images')
if images[action] then
if images[action][level] then
Line 633 ⟶ 595:
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._configObj:getMessage(.msg['image-filename-default')]
or 'Transparent.gif'
return newFileLink(filename)
Line 778 ⟶ 740:
do
local namespace = titleObj.namespace
local categoryNamespaces = configObj:getConfigTable('.cfg.categoryNamespaceKeys')
nskey = categoryNamespaces[namespace]
if not nskey and namespace % 2 == 1 then
Line 813 ⟶ 775:
local configOrder = {}
do
local reasonsWithNamespacePriority = configObj:getConfigTable('.cfg.reasonsWithNamespacePriority')
local namespaceFirst = reason and reasonsWithNamespacePriority[reason] or false
for propertiesKey, t in pairs(properties) do
Line 882 ⟶ 844:
-- pos field in the property table.
--]]
local cats = configObj:getConfigTable('.cfg.protectionCategories')
local cat
for i = 1, 2^noActive do
Line 922 ⟶ 884:
local protectionObj = self._protectionObj
local reasonsWithoutExpiryCheck = configObj:getConfigTable('.cfg.reasonsWithoutExpiryCheck')
local expiryCheckActions = configObj:getConfigTable('.cfg.expiryCheckActions')
local expiry = protectionObj:getExpiry()
local action = protectionObj:getAction()
Line 933 ⟶ 895:
and not reasonsWithoutExpiryCheck[reason]
then
self:setName(configObj:getMessage(.msg['tracking-category-expiry')])
end
return Category.render(self)
Line 955 ⟶ 917:
or type(expiry) == 'number' and expiry < os.time()
then
self:setName(configObj:getMessage(.msg['tracking-category-incorrect')])
end
return Category.render(self)
Line 986 ⟶ 948:
)
then
self:setName(configObj:getMessage(.msg['tracking-category-template')])
end
return Category.render(self)
Line 1,007 ⟶ 969:
 
-- Get data objects
if not config then
local configObj = Config:new()
config = mw.loadData('Module:Protection banner/config')
end
local configObj = config
local protectionObj = Protection:new(args, configObj, titleObj)
 
Line 1,030 ⟶ 995:
 
-- Set the image fields
local bannerConfig = configObj:getBannerConfig(protectionObj).bannerConfig
bannerObj:setImageFilename(bannerConfig.image, protectionObj, titleObj)
if isPadlock then
Line 1,070 ⟶ 1,035:
return {
Protection = Protection,
Config = Config,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Anonymous user