Module:Protection banner: Difference between revisions
(give up on the OOP approach, lay out the main module structure in more detail, and move the config to Module:Protection banner/config) |
(Yet Another Rewrite - this time using Module:Middleclass) |
||
Line 3: | Line 3: | ||
-- Initialise necessary modules. | -- Initialise necessary modules. | ||
local class = require('Module:Middleclass').class | |||
local mArguments = require('Module:Arguments') | local mArguments = require('Module:Arguments') | ||
local mFileLink = require('Module:File link') | local mFileLink = require('Module:File link') | ||
local mProtectionLevel = require('Module:Effective protection level') | |||
local yesno = require('Module:Yesno') | local yesno = require('Module:Yesno') | ||
-- | -------------------------------------------------------------------------------- | ||
-- ProtectionStatus class | |||
-------------------------------------------------------------------------------- | |||
local | local ProtectionStatus = class('ProtectionStatus') | ||
-- | function ProtectionStatus:initialize(args, titleObj) | ||
-- Set action | |||
do | |||
local actions = { | |||
create = true, | |||
edit = true, | |||
move = true, | |||
autoreview = true | |||
} | |||
if args.action and actions[args.action] then | |||
self._action = args.action | |||
else | |||
self._action = 'edit' | |||
end | |||
end | |||
-- Set level | |||
do | |||
local level = mProtectionLevel._main(self._action, titleObj) | |||
if level == 'accountcreator' then | |||
-- Lump titleblacklisted pages in with template-protected pages, | |||
-- since templateeditors can do both. | |||
level = 'templateeditor' | |||
end | |||
self._level = level or '*' | |||
end | end | ||
-- Set reason | |||
self._reason = args.reason | |||
-- Set expiry | |||
self._expiry = args.expiry | |||
end | end | ||
function ProtectionStatus:getAction() | |||
return self._action | |||
end | |||
return | |||
function ProtectionStatus:getLevel() | |||
return self._level | |||
end | |||
function ProtectionStatus:getReason() | |||
return self._reason | |||
end | |||
function ProtectionStatus:getExpiry() | |||
return self._expiry | |||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- Config class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local Config = class('Config') | |||
function Config:initialize() | |||
self._cfg = mw.loadData('Module:Protection banner/config') | |||
end | end | ||
function | function Config:getBannerConfig(protectionStatusObj) | ||
local | local cfg = self._cfg | ||
local | local action = protectionStatusObj:getAction() | ||
local | local reason = protectionStatusObj:getReason() | ||
if cfg.banners[action][reason] then | |||
return cfg.banners[action][reason] | |||
else | |||
return cfg.defaultBanners[action] | |||
end | |||
end | |||
local | function Config:getConfigTable(key) | ||
if | local whitelisted = { | ||
images = true, | |||
categories = true, | |||
categoryNamespaces = true, | |||
pagetypeNamespaces = true, | |||
errorCategories = true | |||
} | |||
if whitelisted[key] then | |||
return self._cfg[key] | |||
else | else | ||
return nil | |||
end | end | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- Image class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local Image = class('Image') | |||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- Blurb class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function | local Blurb = class('Blurb') | ||
function Blurb:initialize(bannerConfig) | |||
self._config = bannerConfig | |||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- BannerTemplate class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local BannerTemplate = class('BannerTemplate') | |||
function | function BannerTemplate:initialize() | ||
end | end | ||
function | function BannerTemplate:render() | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- Banner | -- Banner class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local Banner = BannerTemplate:subclass('Banner') | |||
-------------------------------------------------------------------------------- | |||
-- Padlock class | |||
-------------------------------------------------------------------------------- | |||
local Padlock = BannerTemplate:subclass('Padlock') | |||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- Category class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function | local Category = class('Category') | ||
function Category:initialize() | |||
end | end | ||
function | function Category:export() | ||
if self._categoryName then | |||
return string.format( | |||
'[[%s:%s]]', | |||
mw.site.namespaces[14].name, | |||
self._categoryName | |||
) | |||
else | |||
return '' | |||
end | end | ||
end | end | ||
-------------------------------------------------------------------------------- | |||
-- ProtectionCategory class | |||
-------------------------------------------------------------------------------- | |||
local ProtectionCategory = Category:subclass('ProtectionCategory') | |||
-------------------------------------------------------------------------------- | |||
-- ErrorCategory class | |||
-------------------------------------------------------------------------------- | |||
local ErrorCategory = Category:subclass('ErrorCategory') | |||
-------------------------------------------------------------------------------- | |||
-- ExpiryCategory class | |||
-------------------------------------------------------------------------------- | |||
local ExpiryCategory = Category:subclass('ExpiryCategory') | |||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- ProtectionBanner class | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function | local ProtectionBanner = {} | ||
function ProtectionBanner._newBannerTemplate(args) | |||
-- Makes a new banner template object. This will be a new instance of | |||
-- the most suitable subclass of BannerTemplate, e.g. Banner or Padlock. | |||
if yesno(args.small) then | |||
return Padlock:new(args) | |||
else | |||
return Banner:new(args) | |||
end | |||
end | end | ||
function ProtectionBanner.exportToWiki(frame, titleObj) | |||
local args = mArguments.getArgs(frame) | |||
return ProtectionBanner.exportToLua(args, titleObj) | |||
end | |||
function ProtectionBanner.exportToLua(args, title) | |||
title = title or mw.title.getCurrentTitle() | |||
end | |||
( | |||
return | return ProtectionBanner |
Revision as of 15:26, 8 June 2014
Documentation for this module may be created at Module:Protection banner/doc
-- This module implements {{pp-meta}} and its daughter templates such as -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. -- Initialise necessary modules. local class = require('Module:Middleclass').class local mArguments = require('Module:Arguments') local mFileLink = require('Module:File link') local mProtectionLevel = require('Module:Effective protection level') local yesno = require('Module:Yesno') -------------------------------------------------------------------------------- -- ProtectionStatus class -------------------------------------------------------------------------------- local ProtectionStatus = class('ProtectionStatus') function ProtectionStatus:initialize(args, titleObj) -- Set action do local actions = { create = true, edit = true, move = true, autoreview = true } if args.action and actions[args.action] then self._action = args.action else self._action = 'edit' end end -- Set level do local level = mProtectionLevel._main(self._action, titleObj) if level == 'accountcreator' then -- Lump titleblacklisted pages in with template-protected pages, -- since templateeditors can do both. level = 'templateeditor' end self._level = level or '*' end -- Set reason self._reason = args.reason -- Set expiry self._expiry = args.expiry end function ProtectionStatus:getAction() return self._action end function ProtectionStatus:getLevel() return self._level end function ProtectionStatus:getReason() return self._reason end function ProtectionStatus:getExpiry() return self._expiry end -------------------------------------------------------------------------------- -- Config class -------------------------------------------------------------------------------- local Config = class('Config') function Config:initialize() self._cfg = mw.loadData('Module:Protection banner/config') end function Config:getBannerConfig(protectionStatusObj) local cfg = self._cfg local action = protectionStatusObj:getAction() local reason = protectionStatusObj:getReason() if cfg.banners[action][reason] then return cfg.banners[action][reason] else return cfg.defaultBanners[action] end end function Config:getConfigTable(key) local whitelisted = { images = true, categories = true, categoryNamespaces = true, pagetypeNamespaces = true, errorCategories = true } if whitelisted[key] then return self._cfg[key] else return nil end end -------------------------------------------------------------------------------- -- Image class -------------------------------------------------------------------------------- local Image = class('Image') -------------------------------------------------------------------------------- -- Blurb class -------------------------------------------------------------------------------- local Blurb = class('Blurb') function Blurb:initialize(bannerConfig) self._config = bannerConfig end -------------------------------------------------------------------------------- -- BannerTemplate class -------------------------------------------------------------------------------- local BannerTemplate = class('BannerTemplate') function BannerTemplate:initialize() end function BannerTemplate:render() end -------------------------------------------------------------------------------- -- Banner class -------------------------------------------------------------------------------- local Banner = BannerTemplate:subclass('Banner') -------------------------------------------------------------------------------- -- Padlock class -------------------------------------------------------------------------------- local Padlock = BannerTemplate:subclass('Padlock') -------------------------------------------------------------------------------- -- Category class -------------------------------------------------------------------------------- local Category = class('Category') function Category:initialize() end function Category:export() if self._categoryName then return string.format( '[[%s:%s]]', mw.site.namespaces[14].name, self._categoryName ) else return '' end end -------------------------------------------------------------------------------- -- ProtectionCategory class -------------------------------------------------------------------------------- local ProtectionCategory = Category:subclass('ProtectionCategory') -------------------------------------------------------------------------------- -- ErrorCategory class -------------------------------------------------------------------------------- local ErrorCategory = Category:subclass('ErrorCategory') -------------------------------------------------------------------------------- -- ExpiryCategory class -------------------------------------------------------------------------------- local ExpiryCategory = Category:subclass('ExpiryCategory') -------------------------------------------------------------------------------- -- ProtectionBanner class -------------------------------------------------------------------------------- local ProtectionBanner = {} function ProtectionBanner._newBannerTemplate(args) -- Makes a new banner template object. This will be a new instance of -- the most suitable subclass of BannerTemplate, e.g. Banner or Padlock. if yesno(args.small) then return Padlock:new(args) else return Banner:new(args) end end function ProtectionBanner.exportToWiki(frame, titleObj) local args = mArguments.getArgs(frame) return ProtectionBanner.exportToLua(args, titleObj) end function ProtectionBanner.exportToLua(args, title) title = title or mw.title.getCurrentTitle() end return ProtectionBanner