248
edits
en>Anomie (File:Cscr-featured.svg needs a link to the description page for license and attribution. Add the ability for the configuration to specify a flag to accomplish this.) |
m (1 revision imported) |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 166: | Line 166: | ||
) | ) | ||
-- Set the below row. | |||
self.below = cfg.below and args.below | |||
-- Add attributes, classes and styles. | -- Add attributes, classes and styles. | ||
self.id = args.id | self.id = args.id | ||
| Line 174: | Line 177: | ||
if yesno(args.plainlinks) ~= false then | if yesno(args.plainlinks) ~= false then | ||
self:addClass('plainlinks') | self:addClass('plainlinks') | ||
end | |||
if self.below then | |||
self:addClass('mbox-with-below') | |||
end | end | ||
for _, class in ipairs(cfg.classes or {}) do | for _, class in ipairs(cfg.classes or {}) do | ||
| Line 188: | Line 194: | ||
-- Set text style. | -- Set text style. | ||
self.textstyle = args.textstyle | self.textstyle = args.textstyle | ||
-- Set image classes. | |||
self.imageRightClass = args.imagerightclass or args.imageclass | |||
self.imageLeftClass = args.imageleftclass or args.imageclass | |||
-- Find if we are on the template page or not. This functionality is only | -- Find if we are on the template page or not. This functionality is only | ||
| Line 264: | Line 274: | ||
local talkText | local talkText | ||
if self.isSmall then | if self.isSmall then | ||
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk) | local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk) | ||
talkText = string.format('([[%s|talk]])', talkLink) | talkText = string.format('([[%s|talk]])', talkLink) | ||
else | else | ||
| Line 277: | Line 287: | ||
else | else | ||
talkText = string.format( | talkText = string.format( | ||
'%s the [[%s#%s|talk page]].', | '%s the [[%s' .. (talk == '#' and '' or '#') .. '%s|talk page]].', | ||
talkText, | talkText, | ||
talkTitle.prefixedText, | talkTitle.prefixedText, | ||
| Line 312: | Line 322: | ||
self.text = args.text | self.text = args.text | ||
end | end | ||
-- General image settings. | -- General image settings. | ||
| Line 464: | Line 471: | ||
page = self.args.page | page = self.args.page | ||
} | } | ||
end | |||
function MessageBox:exportDiv() | |||
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. | |||
local mbox = root:tag('div') | |||
mbox:attr('id', self.id or nil) | |||
for i, class in ipairs(self.classes or {}) do | |||
mbox:addClass(class or nil) | |||
end | |||
mbox | |||
:cssText(self.style or nil) | |||
if self.attrs then | |||
mbox:attr(self.attrs) | |||
end | |||
local flex_container | |||
if self.below then | |||
-- we need to wrap the flex components (`image(right)` and `text`) in their | |||
-- own container div to support the `below` parameter | |||
flex_container = mw.html.create('div') | |||
flex_container:addClass('mbox-flex') | |||
else | |||
-- the mbox itself is the parent, so we need no HTML flex_container | |||
flex_container = mw.html.create() | |||
end | |||
-- Add the left-hand image. | |||
if self.imageLeft then | |||
local imageLeftCell = flex_container:tag('div'):addClass('mbox-image') | |||
imageLeftCell | |||
:addClass(self.imageLeftClass) | |||
:wikitext(self.imageLeft or nil) | |||
end | |||
-- Add the text. | |||
local textCell = flex_container:tag('div'):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 = flex_container:tag('div'):addClass('mbox-imageright') | |||
imageRightCell | |||
:addClass(self.imageRightClass) | |||
:wikitext(self.imageRight or nil) | |||
end | |||
mbox:node(flex_container) | |||
-- Add the below row. | |||
if self.below then | |||
mbox:tag('div') | |||
:addClass('mbox-text mbox-below') | |||
: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 | end | ||
function MessageBox:export() | function MessageBox:export() | ||
local root = mw.html.create() | local root = mw.html.create() | ||
| Line 519: | Line 657: | ||
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') | imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') | ||
end | end | ||
imageLeftCell:wikitext(self.imageLeft or nil) | imageLeftCell | ||
:addClass(self.imageLeftClass) | |||
:wikitext(self.imageLeft or nil) | |||
elseif self.imageEmptyCell then | elseif self.imageEmptyCell then | ||
-- Some message boxes define an empty cell if no image is specified, and | -- Some message boxes define an empty cell if no image is specified, and | ||
| Line 574: | Line 714: | ||
end | end | ||
imageRightCell | imageRightCell | ||
:addClass(self.imageRightClass) | |||
:wikitext(self.imageRight or nil) | :wikitext(self.imageRight or nil) | ||
end | end | ||
| Line 620: | Line 761: | ||
box:setParameters() | box:setParameters() | ||
box:setCategories() | box:setCategories() | ||
-- DIV MIGRATION CONDITIONAL | |||
if box.cfg.div_structure then | |||
return box:exportDiv() | |||
end | |||
-- END DIV MIGRATION CONDITIONAL | |||
return box:export() | return box:export() | ||
end | end | ||