Changes

1,270 bytes removed ,  11:19, 16 July 2019
m
Changed protection level for "Module:Message box": downgraded protection level per consensus ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
Line 5: Line 5:  
require('Module:No globals')
 
require('Module:No globals')
 
local getArgs
 
local getArgs
 +
local categoryHandler = require('Module:Category handler')._main
 
local yesno = require('Module:Yesno')
 
local yesno = require('Module:Yesno')
    
-- Get a language object for formatDate and ucfirst.
 
-- Get a language object for formatDate and ucfirst.
 
local lang = mw.language.getContentLanguage()
 
local lang = mw.language.getContentLanguage()
  −
-- Define constants
  −
local CONFIG_MODULE = 'Module:Message box/configuration'
  −
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
      
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
Line 75: Line 72:  
local ns = obj.title.namespace
 
local ns = obj.title.namespace
 
-- boxType is "mbox" or invalid input
 
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
+
if ns == 0 then
-- implement demospace parameter of mbox
  −
local demospace = string.lower(args.demospace)
  −
if DEMOSPACES[demospace] then
  −
-- use template from DEMOSPACES
  −
obj.cfg = cfg[DEMOSPACES[demospace]]
  −
elseif string.find( demospace, 'talk' ) then
  −
-- demo as a talk page
  −
obj.cfg = cfg.tmbox
  −
else
  −
-- default to ombox
  −
obj.cfg = cfg.ombox
  −
end
  −
elseif ns == 0 then
   
obj.cfg = cfg.ambox -- main namespace
 
obj.cfg = cfg.ambox -- main namespace
 
elseif ns == 6 then
 
elseif ns == 6 then
Line 122: Line 106:  
obj.categories = {}
 
obj.categories = {}
 
obj.classes = {}
 
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
  −
obj.hasCategories = false
      
return setmetatable(obj, MessageBox)
 
return setmetatable(obj, MessageBox)
Line 137: Line 119:  
cat = string.format('[[Category:%s]]', cat)
 
cat = string.format('[[Category:%s]]', cat)
 
end
 
end
self.hasCategories = true
   
self.categories[ns] = self.categories[ns] or {}
 
self.categories[ns] = self.categories[ns] or {}
 
table.insert(self.categories[ns], cat)
 
table.insert(self.categories[ns], cat)
Line 173: Line 154:     
-- Add attributes, classes and styles.
 
-- Add attributes, classes and styles.
self.id = args.id
+
if cfg.allowId then
self.name = args.name
+
self.id = args.id
if self.name then
  −
self:addClass('box-' .. string.gsub(self.name,' ','_'))
  −
end
  −
if yesno(args.plainlinks) ~= false then
  −
self:addClass('plainlinks')
   
end
 
end
 +
self:addClass(
 +
cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'
 +
)
 
for _, class in ipairs(cfg.classes or {}) do
 
for _, class in ipairs(cfg.classes or {}) do
 
self:addClass(class)
 
self:addClass(class)
Line 203: Line 182:  
and cfg.templateCategoryRequireName
 
and cfg.templateCategoryRequireName
 
then
 
then
 +
self.name = args.name
 
if self.name then
 
if self.name then
 
local templateName = mw.ustring.match(
 
local templateName = mw.ustring.match(
Line 214: Line 194:  
and mw.title.equals(self.title, self.templateTitle)
 
and mw.title.equals(self.title, self.templateTitle)
 
end
 
end
+
 
 
-- Process data for collapsible text fields. At the moment these are only
 
-- Process data for collapsible text fields. At the moment these are only
 
-- used in {{ambox}}.
 
-- used in {{ambox}}.
Line 297: Line 277:  
end
 
end
 
if date then
 
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
+
self.date = string.format(" <small>''(%s)''</small>", date)
 
end
 
end
 
self.info = args.info
 
self.info = args.info
if yesno(args.removalnotice) then
  −
self.removalNotice = cfg.removalNotice
  −
end
   
end
 
end
   Line 448: Line 425:     
function MessageBox:renderCategories()
 
function MessageBox:renderCategories()
if not self.hasCategories then
  −
-- No categories added, no need to pass them to Category handler so,
  −
-- if it was invoked, it would return the empty string.
  −
-- So we shortcut and return the empty string.
  −
return ""
  −
end
   
-- Convert category tables to strings and pass them through
 
-- Convert category tables to strings and pass them through
 
-- [[Module:Category handler]].
 
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
+
return categoryHandler{
 
main = table.concat(self.categories[0] or {}),
 
main = table.concat(self.categories[0] or {}),
 
template = table.concat(self.categories[10] or {}),
 
template = table.concat(self.categories[10] or {}),
Line 520: Line 491:  
-- collapsible. At the moment, only ambox uses this.
 
-- collapsible. At the moment, only ambox uses this.
 
textCell:cssText(self.textstyle or nil)
 
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
+
local textCellSpan = textCell:tag('span')
textCellDiv
+
textCellSpan
 
:addClass('mbox-text-span')
 
:addClass('mbox-text-span')
 
:wikitext(self.issue or nil)
 
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
+
if not self.isSmall then
textCellDiv:tag('span')
+
textCellSpan:tag('span')
 
:addClass('hide-when-compact')
 
:addClass('hide-when-compact')
 
:wikitext(self.talk and (' ' .. self.talk) or nil)
 
:wikitext(self.talk and (' ' .. self.talk) or nil)
 
:wikitext(self.fix and (' ' .. self.fix) or nil)
 
:wikitext(self.fix and (' ' .. self.fix) or nil)
 
end
 
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
+
textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
+
if not self.isSmall then
textCellDiv
+
textCellSpan
 
:tag('span')
 
:tag('span')
 
:addClass('hide-when-compact')
 
:addClass('hide-when-compact')
 
:wikitext(self.info and (' ' .. self.info) or nil)
 
:wikitext(self.info and (' ' .. self.info) or nil)
end
  −
if self.removalNotice then
  −
textCellDiv:tag('small')
  −
:addClass('hide-when-compact')
  −
:tag('i')
  −
:wikitext(string.format(" (%s)", self.removalNotice))
   
end
 
end
 
else
 
else
Line 602: Line 567:     
function p.main(boxType, args, cfgTables)
 
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
+
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData('Module:Message box/configuration'))
 
box:setParameters()
 
box:setParameters()
 
box:setCategories()
 
box:setCategories()