Difference between revisions of "Module:Protection banner"
Jump to navigation
Jump to search
imported>Mr. Stradivarius (give up on the OOP approach, lay out the main module structure in more detail, and move the config to Module:Protection banner/config) |
imported>Mr. Stradivarius (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 16: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