Content added Content deleted
NotAracham (talk | contribs) m (1 revision imported) |
NotAracham (talk | contribs) (Revising message-box module) |
||
Line 1: | Line 1: | ||
-- This is a meta-module for producing message box templates, including |
|||
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. |
|||
-- Load necessary modules. |
|||
require('Module:No globals') |
require('Module:No globals') |
||
local getArgs |
local getArgs |
||
local yesno = require('Module:Yesno') |
local yesno = require('Module:Yesno') |
||
-- 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 CONFIG_MODULE = 'Module:Message box/configuration' |
||
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} |
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} |
||
local TEMPLATE_STYLES = 'Module:Message box/%s.css' |
|||
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
||
Line 67: | Line 59: | ||
args = args or {} |
args = args or {} |
||
local obj = {} |
local obj = {} |
||
obj.boxType = boxType |
|||
-- Set the title object and the namespace. |
-- Set the title object and the namespace. |
||
Line 84: | Line 74: | ||
-- use template from DEMOSPACES |
-- use template from DEMOSPACES |
||
obj.cfg = cfg[DEMOSPACES[demospace]] |
obj.cfg = cfg[DEMOSPACES[demospace]] |
||
obj.boxType = DEMOSPACES[demospace] |
|||
elseif string.find( demospace, 'talk' ) then |
elseif string.find( demospace, 'talk' ) then |
||
-- demo as a talk page |
-- demo as a talk page |
||
obj.cfg = cfg.tmbox |
obj.cfg = cfg.tmbox |
||
obj.boxType = 'tmbox' |
|||
else |
else |
||
-- default to ombox |
-- default to ombox |
||
obj.cfg = cfg.ombox |
obj.cfg = cfg.ombox |
||
obj.boxType = 'ombox' |
|||
end |
end |
||
elseif ns == 0 then |
elseif ns == 0 then |
||
obj.cfg = cfg.ambox -- main namespace |
obj.cfg = cfg.ambox -- main namespace |
||
obj.boxType = 'ambox' |
|||
elseif ns == 6 then |
elseif ns == 6 then |
||
obj.cfg = cfg.imbox -- file namespace |
obj.cfg = cfg.imbox -- file namespace |
||
obj.boxType = 'imbox' |
|||
elseif ns == 14 then |
elseif ns == 14 then |
||
obj.cfg = cfg.cmbox -- category namespace |
obj.cfg = cfg.cmbox -- category namespace |
||
obj.boxType = 'cmbox' |
|||
else |
else |
||
local nsTable = mw.site.namespaces[ns] |
local nsTable = mw.site.namespaces[ns] |
||
if nsTable and nsTable.isTalk then |
if nsTable and nsTable.isTalk then |
||
obj.cfg = cfg.tmbox -- any talk namespace |
obj.cfg = cfg.tmbox -- any talk namespace |
||
obj.boxType = 'tmbox' |
|||
else |
else |
||
obj.cfg = cfg.ombox -- other namespaces or invalid input |
obj.cfg = cfg.ombox -- other namespaces or invalid input |
||
obj.boxType = 'ombox' |
|||
end |
end |
||
end |
end |
||
Line 279: | Line 261: | ||
end |
end |
||
if talkTitle and talkTitle.exists then |
if talkTitle and talkTitle.exists then |
||
local talkText |
|||
⚫ | |||
if self.isSmall then |
|||
⚫ | |||
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk) |
|||
⚫ | |||
talkText = string.format('([[%s|talk]])', talkLink) |
|||
'%s [[%s|%s]].', |
|||
else |
|||
talkText, |
|||
⚫ | |||
talk, |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
'%s [[%s|%s]].', |
|||
else |
|||
talkText, |
|||
⚫ | |||
talk, |
|||
⚫ | |||
⚫ | |||
talkText, |
|||
) |
|||
⚫ | |||
else |
|||
talk |
|||
⚫ | |||
) |
|||
⚫ | |||
⚫ | |||
talkText, |
|||
⚫ | |||
talk |
|||
) |
|||
end |
|||
end |
|||
self.talk = talkText |
self.talk = talkText |
||
end |
end |
||
Line 308: | Line 296: | ||
end |
end |
||
if date then |
if date then |
||
self.date = string.format(" < |
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date) |
||
end |
end |
||
self.info = args.info |
self.info = args.info |
||
Line 330: | Line 318: | ||
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv |
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv |
||
self.imageEmptyCell = cfg.imageEmptyCell |
self.imageEmptyCell = cfg.imageEmptyCell |
||
if cfg.imageEmptyCellStyle then |
|||
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px' |
|||
end |
|||
-- Left image settings. |
-- Left image settings. |
||
Line 354: | Line 339: | ||
self.imageRight = imageRight |
self.imageRight = imageRight |
||
end |
end |
||
-- set templatestyles |
|||
self.base_templatestyles = cfg.templatestyles |
|||
self.templatestyles = args.templatestyles |
|||
end |
end |
||
Line 489: | Line 478: | ||
end |
end |
||
local frame = mw.getCurrentFrame() |
|||
-- Add TemplateStyles |
|||
root:wikitext( |
root:wikitext(frame:extensionTag{ |
||
name = 'templatestyles', |
name = 'templatestyles', |
||
args = { src = |
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 |
|||
⚫ | |||
root:wikitext(frame:extensionTag{ |
|||
name = 'templatestyles', |
|||
args = { src = self.templatestyles }, |
|||
⚫ | |||
⚫ | |||
-- Create the box table. |
-- Create the box table. |
||
local boxTable |
local boxTable = root:tag('table') |
||
-- Check for fmbox because not all interface messages have mw-parser-output |
|||
-- which is necessary for TemplateStyles. Add the wrapper class if it is and |
|||
-- then start the actual mbox, else start the mbox. |
|||
⚫ | |||
boxTable = root:tag('div') |
|||
:addClass('mw-parser-output') |
|||
:tag('table') |
|||
else |
|||
boxTable = root:tag('table') |
|||
end |
|||
boxTable:attr('id', self.id or nil) |
boxTable:attr('id', self.id or nil) |
||
for i, class in ipairs(self.classes or {}) do |
for i, class in ipairs(self.classes or {}) do |
||
Line 529: | Line 516: | ||
-- image width to 52px. If any images in a div are wider than that, |
-- 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. |
-- they may overlap with the text or cause other display problems. |
||
imageLeftCell = imageLeftCell:tag('div'): |
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') |
||
end |
end |
||
imageLeftCell:wikitext(self.imageLeft or nil) |
imageLeftCell:wikitext(self.imageLeft or nil) |
||
Line 539: | Line 526: | ||
row:tag('td') |
row:tag('td') |
||
:addClass('mbox-empty-cell') |
:addClass('mbox-empty-cell') |
||
:cssText(self.imageEmptyCellStyle or nil) |
|||
end |
end |
||
Line 552: | Line 538: | ||
:addClass('mbox-text-span') |
:addClass('mbox-text-span') |
||
:wikitext(self.issue or nil) |
:wikitext(self.issue or nil) |
||
if (self.talk or self.fix) |
if (self.talk or self.fix) then |
||
textCellDiv:tag('span') |
textCellDiv:tag('span') |
||
:addClass('hide-when-compact') |
:addClass('hide-when-compact') |
||
Line 566: | Line 552: | ||
end |
end |
||
if self.removalNotice then |
if self.removalNotice then |
||
textCellDiv:tag(' |
textCellDiv:tag('span') |
||
:addClass('hide-when-compact') |
:addClass('hide-when-compact') |
||
:tag('i') |
:tag('i') |
||
Line 584: | Line 570: | ||
-- If we are using a div, redefine imageRightCell so that the image |
-- If we are using a div, redefine imageRightCell so that the image |
||
-- is inside it. |
-- is inside it. |
||
imageRightCell = imageRightCell:tag('div'): |
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') |
||
end |
end |
||
imageRightCell |
imageRightCell |
||
Line 603: | Line 589: | ||
if self.invalidTypeError then |
if self.invalidTypeError then |
||
root:tag('div') |
root:tag('div') |
||
: |
:addClass('mbox-invalid-type') |
||
:wikitext(string.format( |
:wikitext(string.format( |
||
'This message box is using an invalid "type=%s" parameter and needs fixing.', |
'This message box is using an invalid "type=%s" parameter and needs fixing.', |