You may also check out our sister site SoyPlace.


As you might already know, archive.today (also known as archive.is, archive.ph and a variety of other mirror domains) is being investigated by the FBI and might be taken down soon. Please rearchive any archive.today link you find on SNCApedia on Megalodon.jp, then add said Megalodon.jp links to the articles. Faggot (talk) 23:14, 6 November 2025 (UTC)

Module:Message box/configuration: Difference between revisions

From SNCApedia, the shit nobody cares about encyclopedia
Jump to navigationJump to search
Created page with "require('strict') local getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage() local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- Helper functions ---------------------------------------------------------------------------..."
 
No edit summary
 
Line 1: Line 1:
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Helper functions
--                         Message box configuration                        --
--                                                                            --
-- This module contains configuration data for [[Module:Message box]].        --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------


local function getTitleObject(...)
return {
-- Get the title object, passing the function through pcall
ambox = {
-- in case we are over the expensive function count limit.
types = {
local success, title = pcall(mw.title.new, ...)
speedy = {
if success then
class = 'ambox-speedy',
return title
image = 'Ambox warning pn.svg'
end
},
end
delete = {
 
class = 'ambox-delete',
local function union(t1, t2)
image = 'Ambox warning pn.svg'
-- Returns the union of two arrays.
},
local vals = {}
content = {
for i, v in ipairs(t1) do
class = 'ambox-content',
vals[v] = true
image = 'Ambox important.svg'
end
},
for i, v in ipairs(t2) do
style = {
vals[v] = true
class = 'ambox-style',
end
image = 'Edit-clear.svg'
local ret = {}
},
for k in pairs(vals) do
move = {
table.insert(ret, k)
class = 'ambox-move',
end
image = 'Merge-split-transwiki default.svg'
table.sort(ret)
},
return ret
protection = {
end
class = 'ambox-protection',
 
image = 'Semi-protection-shackle-keyhole.svg'
local function getArgNums(args, prefix)
},
local nums = {}
notice = {
for k, v in pairs(args) do
class = 'ambox-notice',
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
image = 'Information icon4.svg'
if num then
}
table.insert(nums, tonumber(num))
},
end
default                    = 'notice',
end
allowBlankParams           = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
table.sort(nums)
allowSmall                  = true,
return nums
smallParam                  = 'left',
end
smallClass                  = 'mbox-small-left',
 
substCheck                  = true,
--------------------------------------------------------------------------------
classes                    = {'metadata', 'ambox'},
-- Box class definition
imageEmptyCell              = true,
--------------------------------------------------------------------------------
imageCheckBlank            = true,
 
imageSmallSize              = '20x20px',
local MessageBox = {}
imageCellDiv                = true,
MessageBox.__index = MessageBox
useCollapsibleTextFields    = true,
 
imageRightNone              = true,
function MessageBox.new(boxType, args, cfg)
sectionDefault              = 'article',
args = args or {}
allowMainspaceCategories    = true,
local obj = {}
templateCategory            = 'Article message templates',
 
        templateCategoryRequireName = true,
-- Set the title object and the namespace.
templateErrorCategory      = 'Article message templates with missing parameters',
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
templateErrorParamsToCheck  = {'issue', 'fix', 'subst'},
 
removalNotice              = '<small>[[Help:Maintenance template removal|Learn how and when to remove this message]]</small>',
-- Set the config for our box type.
templatestyles              = 'Module:Message box/ambox.css'
obj.cfg = cfg[boxType]
},
if not obj.cfg then
local ns = obj.title.namespace
cmbox = {
-- boxType is "mbox" or invalid input
types = {
if args.demospace and args.demospace ~= '' then
speedy = {
-- implement demospace parameter of mbox
class = 'cmbox-speedy',
local demospace = string.lower(args.demospace)
image = 'Ambox warning pn.svg'
if DEMOSPACES[demospace] then
},
-- use template from DEMOSPACES
delete = {
obj.cfg = cfg[DEMOSPACES[demospace]]
class = 'cmbox-delete',
elseif string.find( demospace, 'talk' ) then
image = 'Ambox warning pn.svg'
-- demo as a talk page
},
obj.cfg = cfg.tmbox
content = {
else
class = 'cmbox-content',
-- default to ombox
image = 'Ambox important.svg'
obj.cfg = cfg.ombox
},
end
style = {
elseif ns == 0 then
class = 'cmbox-style',
obj.cfg = cfg.ambox -- main namespace
image = 'Edit-clear.svg'
elseif ns == 6 then
},
obj.cfg = cfg.imbox -- file namespace
move = {
elseif ns == 14 then
class = 'cmbox-move',
obj.cfg = cfg.cmbox -- category namespace
image = 'Merge-split-transwiki default.svg'
else
},
local nsTable = mw.site.namespaces[ns]
protection = {
if nsTable and nsTable.isTalk then
class = 'cmbox-protection',
obj.cfg = cfg.tmbox -- any talk namespace
image = 'Semi-protection-shackle-keyhole.svg'
else
},
obj.cfg = cfg.ombox -- other namespaces or invalid input
notice = {
end
class = 'cmbox-notice',
end
image = 'Information icon4.svg'
end
}
 
},
-- Set the arguments, and remove all blank arguments except for the ones
default              = 'notice',
-- listed in cfg.allowBlankParams.
showInvalidTypeError = true,
do
classes              = {'cmbox'},
local newArgs = {}
imageEmptyCell      = true,
for k, v in pairs(args) do
templatestyles      = 'Module:Message box/cmbox.css'
if v ~= '' then
},
newArgs[k] = v
end
fmbox = {
end
types = {
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
warning = {
newArgs[param] = args[param]
class = 'fmbox-warning',
end
image = 'Ambox warning pn.svg'
obj.args = newArgs
},
end
editnotice = {
 
class = 'fmbox-editnotice',
-- Define internal data structure.
image = 'Information icon4.svg'
obj.categories = {}
},
obj.classes = {}
system = {
-- For lazy loading of [[Module:Category handler]].
class = 'fmbox-system',
obj.hasCategories = false
image = 'Information icon4.svg'
 
}
return setmetatable(obj, MessageBox)
},
end
default              = 'system',
 
showInvalidTypeError = true,
function MessageBox:addCat(ns, cat, sort)
classes              = {'fmbox'},
if not cat then
imageEmptyCell      = false,
return nil
imageRightNone      = false,
end
templatestyles      = 'Module:Message box/fmbox.css'
if sort then
},
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
 
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
 
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
 
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
 
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
 
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
 
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
 
-- Set text style.
self.textstyle = args.textstyle
-- Set image classes.
imbox = {
self.imageRightClass = args.imagerightclass or args.imageclass
types = {
self.imageLeftClass = args.imageleftclass or args.imageclass
speedy = {
 
class = 'imbox-speedy',
-- Find if we are on the template page or not. This functionality is only
image = 'Ambox warning pn.svg'
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
},
-- and cfg.templateCategoryRequireName are set.
delete = {
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
class = 'imbox-delete',
if self.useCollapsibleTextFields
image = 'Ambox warning pn.svg'
or cfg.templateCategory
},
and cfg.templateCategoryRequireName
content = {
then
class = 'imbox-content',
if self.name then
image = 'Ambox important.svg'
local templateName = mw.ustring.match(
},
self.name,
style = {
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
class = 'imbox-style',
) or self.name
image = 'Edit-clear.svg'
templateName = 'Template:' .. templateName
},
self.templateTitle = getTitleObject(templateName)
move = {
end
class = 'imbox-move',
self.isTemplatePage = self.templateTitle
image = 'Merge-split-transwiki default.svg'
and mw.title.equals(self.title, self.templateTitle)
},
end
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
["license-related"] = {
class = 'imbox-license',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default              = 'notice',
showInvalidTypeError = true,
classes              = {'imbox'},
imageEmptyCell      = true,
below                = true,
templateCategory    = 'File message boxes',
templatestyles      = 'Module:Message box/imbox.css'
},
-- Process data for collapsible text fields. At the moment these are only
ombox = {
-- used in {{ambox}}.
types = {
if self.useCollapsibleTextFields then
speedy = {
-- Get the self.issue value.
class = 'ombox-speedy',
if self.isSmall and args.smalltext then
image = 'Ambox warning pn.svg'
self.issue = args.smalltext
},
else
delete = {
local sect
class = 'ombox-delete',
if args.sect == '' then
image = 'Ambox warning pn.svg'
sect = 'This ' .. (cfg.sectionDefault or 'page')
},
elseif type(args.sect) == 'string' then
content = {
sect = 'This ' .. args.sect
class = 'ombox-content',
end
image = 'Ambox important.svg'
local issue = args.issue
},
issue = type(issue) == 'string' and issue ~= '' and issue or nil
style = {
local text = args.text
class = 'ombox-style',
text = type(text) == 'string' and text or nil
image = 'Edit-clear.svg'
local issues = {}
},
table.insert(issues, sect)
move = {
table.insert(issues, issue)
class = 'ombox-move',
table.insert(issues, text)
image = 'Merge-split-transwiki default.svg'
self.issue = table.concat(issues, ' ')
},
end
protection = {
 
class = 'ombox-protection',
-- Get the self.talk value.
image = 'Semi-protection-shackle-keyhole.svg'
local talk = args.talk
},
-- Show talk links on the template page or template subpages if the talk
notice = {
-- parameter is blank.
class = 'ombox-notice',
if talk == ''
image = 'Information icon4.svg'
and self.templateTitle
}
and (
},
mw.title.equals(self.templateTitle, self.title)
default              = 'notice',
or self.title:isSubpageOf(self.templateTitle)
showInvalidTypeError = true,
)
classes              = {'ombox'},
then
allowSmall          = true,
talk = '#'
imageEmptyCell       = true,
elseif talk == '' then
imageRightNone      = true,
talk = nil
templatestyles      = 'Module:Message box/ombox.css'
end
},
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
                local talkText
                if self.isSmall then
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk)
                    talkText = string.format('([[%s|talk]])', talkLink)
                else
                    talkText = 'Relevant discussion may be found on'
                    if talkArgIsTalkPage then
                        talkText = string.format(
                            '%s [[%s|%s]].',
                            talkText,
                            talk,
                            talkTitle.prefixedText
                        )
                    else
                        talkText = string.format(
                            '%s the [[%s' .. (talk == '#' and '' or '#') .. '%s|talk page]].',
                            talkText,
                            talkTitle.prefixedText,
                            talk
                        )
                    end
                end
self.talk = talkText
end
end
 
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
 
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
 
-- Set the below row.
self.below = cfg.below and args.below
 
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
 
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
 
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
tmbox = {
self.base_templatestyles = cfg.templatestyles
types = {
self.templatestyles = args.templatestyles
speedy = {
end
class = 'tmbox-speedy',
 
image = 'Ambox warning pn.svg'
function MessageBox:setMainspaceCategories()
},
local args = self.args
delete = {
local cfg = self.cfg
class = 'tmbox-delete',
 
image = 'Ambox warning pn.svg'
if not cfg.allowMainspaceCategories then
},
return nil
content = {
end
class = 'tmbox-content',
 
image = 'Ambox important.svg'
local nums = {}
},
for _, prefix in ipairs{'cat', 'category', 'all'} do
style = {
args[prefix .. '1'] = args[prefix]
class = 'tmbox-style',
nums = union(nums, getArgNums(args, prefix))
image = 'Edit-clear.svg'
end
},
 
move = {
-- The following is roughly equivalent to the old {{Ambox/category}}.
class = 'tmbox-move',
local date = args.date
image = 'Merge-split-transwiki default.svg'
date = type(date) == 'string' and date
},
local preposition = 'from'
protection = {
for _, num in ipairs(nums) do
class = 'tmbox-protection',
local mainCat = args['cat' .. tostring(num)]
image = 'Semi-protection-shackle-keyhole.svg'
or args['category' .. tostring(num)]
},
local allCat = args['all' .. tostring(num)]
notice = {
mainCat = type(mainCat) == 'string' and mainCat
class = 'tmbox-notice',
allCat = type(allCat) == 'string' and allCat
image = 'Information icon4.svg'
if mainCat and date and date ~= '' then
}
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
},
self:addCat(0, catTitle)
default              = 'notice',
catTitle = getTitleObject('Category:' .. catTitle)
showInvalidTypeError = true,
if not catTitle or not catTitle.exists then
classes              = {'tmbox'},
self:addCat(0, 'Articles with invalid date parameter in template')
allowSmall          = true,
end
imageRightNone      = true,
elseif mainCat and (not date or date == '') then
imageEmptyCell      = true,
self:addCat(0, mainCat)
templateCategory    = 'Talk message boxes',
end
templatestyles      = 'Module:Message box/tmbox.css'
if allCat then
self:addCat(0, allCat)
end
end
end
 
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
 
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
 
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
 
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
 
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
 
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
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
}
end
}
 
function MessageBox:export()
local root = mw.html.create()
 
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
 
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
 
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
 
if self.attrs then
boxTable:attr(self.attrs)
end
 
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
 
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
 
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
 
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
 
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
 
-- Add categories.
root:wikitext(self:renderCategories() or nil)
 
return tostring(root)
end
 
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
 
local p, mt = {}, {}
 
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
 
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
 
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
 
return setmetatable(p, mt)

Latest revision as of 12:37, 12 October 2025

Documentation for this module may be created at Module:Message box/configuration/doc

--------------------------------------------------------------------------------
--                          Message box configuration                         --
--                                                                            --
-- This module contains configuration data for [[Module:Message box]].        --
--------------------------------------------------------------------------------

return {
	ambox = {
		types = {
			speedy = {
				class = 'ambox-speedy',
				image = 'Ambox warning pn.svg'
			},
			delete = {
				class = 'ambox-delete',
				image = 'Ambox warning pn.svg'
			},
			content = {
				class = 'ambox-content',
				image = 'Ambox important.svg'
			},
			style = {
				class = 'ambox-style',
				image = 'Edit-clear.svg'
			},
			move = {
				class = 'ambox-move',
				image = 'Merge-split-transwiki default.svg'
			},
			protection = {
				class = 'ambox-protection',
				image = 'Semi-protection-shackle-keyhole.svg'
			},
			notice = {
				class = 'ambox-notice',
				image = 'Information icon4.svg'
			}
		},
		default                     = 'notice',
		allowBlankParams            = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
		allowSmall                  = true,
		smallParam                  = 'left',
		smallClass                  = 'mbox-small-left',
		substCheck                  = true,
		classes                     = {'metadata', 'ambox'},
		imageEmptyCell              = true,
		imageCheckBlank             = true,
		imageSmallSize              = '20x20px',
		imageCellDiv                = true,
		useCollapsibleTextFields    = true,
		imageRightNone              = true,
		sectionDefault              = 'article',
		allowMainspaceCategories    = true,
		templateCategory            = 'Article message templates',
	        templateCategoryRequireName = true,
		templateErrorCategory       = 'Article message templates with missing parameters',
		templateErrorParamsToCheck  = {'issue', 'fix', 'subst'},
		removalNotice               = '<small>[[Help:Maintenance template removal|Learn how and when to remove this message]]</small>',
		templatestyles              = 'Module:Message box/ambox.css'
	},
	
	cmbox = {
		types = {
			speedy = {
				class = 'cmbox-speedy',
				image = 'Ambox warning pn.svg'
			},
			delete = {
				class = 'cmbox-delete',
				image = 'Ambox warning pn.svg'
			},
			content = {
				class = 'cmbox-content',
				image = 'Ambox important.svg'
			},
			style = {
				class = 'cmbox-style',
				image = 'Edit-clear.svg'
			},
			move = {
				class = 'cmbox-move',
				image = 'Merge-split-transwiki default.svg'
			},
			protection = {
				class = 'cmbox-protection',
				image = 'Semi-protection-shackle-keyhole.svg'
			},
			notice = {
				class = 'cmbox-notice',
				image = 'Information icon4.svg'
			}
		},
		default              = 'notice',
		showInvalidTypeError = true,
		classes              = {'cmbox'},
		imageEmptyCell       = true,
		templatestyles       = 'Module:Message box/cmbox.css'
	},
	
	fmbox = {
		types = {
			warning = {
				class = 'fmbox-warning',
				image = 'Ambox warning pn.svg'
			},
			editnotice = {
				class = 'fmbox-editnotice',
				image = 'Information icon4.svg'
			},
			system = {
				class = 'fmbox-system',
				image = 'Information icon4.svg'
			}
		},
		default              = 'system',
		showInvalidTypeError = true,
		classes              = {'fmbox'},
		imageEmptyCell       = false,
		imageRightNone       = false,
		templatestyles       = 'Module:Message box/fmbox.css'
	},
	
	imbox = {
		types = {
			speedy = {
				class = 'imbox-speedy',
				image = 'Ambox warning pn.svg'
			},
			delete = {
				class = 'imbox-delete',
				image = 'Ambox warning pn.svg'
			},
			content = {
				class = 'imbox-content',
				image = 'Ambox important.svg'
			},
			style = {
				class = 'imbox-style',
				image = 'Edit-clear.svg'
			},
			move = {
				class = 'imbox-move',
				image = 'Merge-split-transwiki default.svg'
			},
			protection = {
				class = 'imbox-protection',
				image = 'Semi-protection-shackle-keyhole.svg'
			},
			license = {
				class = 'imbox-license licensetpl',
				image = 'Imbox-license.svg'
			},
			["license-related"] = {
				class = 'imbox-license',
				image = 'Imbox-license.svg'
			},
			featured = {
				class = 'imbox-featured',
				image = 'Cscr-featured.svg',
				imageNeedsLink = true
			},
			notice = {
				class = 'imbox-notice',
				image = 'Information icon4.svg'
			}
		},
		default              = 'notice',
		showInvalidTypeError = true,
		classes              = {'imbox'},
		imageEmptyCell       = true,
		below                = true,
		templateCategory     = 'File message boxes',
		templatestyles       = 'Module:Message box/imbox.css'
	},
	
	ombox = {
		types = {
			speedy = {
				class = 'ombox-speedy',
				image = 'Ambox warning pn.svg'
			},
			delete = {
				class = 'ombox-delete',
				image = 'Ambox warning pn.svg'
			},
			content = {
				class = 'ombox-content',
				image = 'Ambox important.svg'
			},
			style = {
				class = 'ombox-style',
				image = 'Edit-clear.svg'
			},
			move = {
				class = 'ombox-move',
				image = 'Merge-split-transwiki default.svg'
			},
			protection = {
				class = 'ombox-protection',
				image = 'Semi-protection-shackle-keyhole.svg'
			},
			notice = {
				class = 'ombox-notice',
				image = 'Information icon4.svg'
			}
		},
		default              = 'notice',
		showInvalidTypeError = true,
		classes              = {'ombox'},
		allowSmall           = true,
		imageEmptyCell       = true,
		imageRightNone       = true,
		templatestyles       = 'Module:Message box/ombox.css'
	},
	
	tmbox = {
		types = {
			speedy = {
				class = 'tmbox-speedy',
				image = 'Ambox warning pn.svg'
			},
			delete = {
				class = 'tmbox-delete',
				image = 'Ambox warning pn.svg'
			},
			content = {
				class = 'tmbox-content',
				image = 'Ambox important.svg'
			},
			style = {
				class = 'tmbox-style',
				image = 'Edit-clear.svg'
			},
			move = {
				class = 'tmbox-move',
				image = 'Merge-split-transwiki default.svg'
			},
			protection = {
				class = 'tmbox-protection',
				image = 'Semi-protection-shackle-keyhole.svg'
			},
			notice = {
				class = 'tmbox-notice',
				image = 'Information icon4.svg'
			}
		},
		default              = 'notice',
		showInvalidTypeError = true,
		classes              = {'tmbox'},
		allowSmall           = true,
		imageRightNone       = true,
		imageEmptyCell       = true,
		templateCategory     = 'Talk message boxes',
		templatestyles       = 'Module:Message box/tmbox.css'
	}
}