Difference between revisions of "Module:Message box"
Jump to navigation
Jump to search
what>Mr. Stradivarius (start work on a module for displaying Template:Mbox-family message boxes) |
what>Mr. Stradivarius (more abstraction for box structure and better small=yes support) |
||
Line 4: | Line 4: | ||
local p = {} | local p = {} | ||
+ | |||
+ | local function generateBoxStructure() | ||
+ | local root = htmlBuilder.create() -- Includes error messages and categories added after the box. | ||
+ | local box = root.tag('table') | ||
+ | local row = box.tag('tr') | ||
+ | return root, box, row | ||
+ | end | ||
function p.build(data, args) | function p.build(data, args) | ||
− | -- Process config data | + | -- Process config data. |
local isSmall = args.small == 'yes' or args.small == true | local isSmall = args.small == 'yes' or args.small == true | ||
local typeData = data.types[args.type] | local typeData = data.types[args.type] | ||
local invalidType = args.type and not typeData and true or false | local invalidType = args.type and not typeData and true or false | ||
typeData = typeData or data.types[data.default] | typeData = typeData or data.types[data.default] | ||
+ | |||
+ | local image, imageRight, text, imageSize | ||
+ | if isSmall then | ||
+ | image = args.smallimage or args.image | ||
+ | imageRight = args.smallimageright or args.imageright | ||
+ | text = args.smalltext or args.text | ||
+ | imageSize = data.imageSizeSmall or data.imageSize | ||
+ | else | ||
+ | image = args.image | ||
+ | imageRight = args.imageright | ||
+ | text = args.text | ||
+ | imageSize = data.imageSizeLarge or data.imageSize | ||
+ | end | ||
+ | |||
+ | -- Get the box structure. | ||
+ | local root, box, row = generateBoxStructure() | ||
-- Build the box. | -- Build the box. | ||
− | |||
− | |||
box | box | ||
.attr('id', args.id) | .attr('id', args.id) | ||
Line 28: | Line 49: | ||
-- Add the left-hand image. | -- Add the left-hand image. | ||
− | + | if image ~= 'none' then | |
− | if | ||
row.tag('td') | row.tag('td') | ||
.addClass('mbox-image') | .addClass('mbox-image') | ||
− | .wikitext( | + | .wikitext(image or mw.ustring.format('[[File:%s|%s|link=|alt=]]', typeData.image, imageSize)) |
− | |||
− | |||
− | |||
− | |||
elseif data.imageEmptyCell then | elseif data.imageEmptyCell then | ||
row.tag('td') | row.tag('td') | ||
Line 46: | Line 62: | ||
.addClass('mbox-text') | .addClass('mbox-text') | ||
.cssText(args.textstyle) | .cssText(args.textstyle) | ||
− | .wikitext( | + | .wikitext(text) |
-- Add the right-hand image. | -- Add the right-hand image. | ||
− | if | + | if imageRight then |
row.tag('td') | row.tag('td') | ||
.addClass('mbox-imageright') | .addClass('mbox-imageright') | ||
− | .wikitext( | + | .wikitext(imageRight) |
end | end | ||
Revision as of 14:27, 19 September 2013
-- This is a meta-module for producing message box templates, including Lua error in package.lua at line 80: module 'Module:HtmlBuilder' not found., Template:Ambox, Template:Imbox, Template:Tmbox, Lua error in package.lua at line 80: module 'Module:HtmlBuilder' not found., Template:Cmbox and Template:Fmbox.
local htmlBuilder = require('Module:HtmlBuilder')
local p = {}
local function generateBoxStructure()
local root = htmlBuilder.create() -- Includes error messages and categories added after the box. local box = root.tag('table') local row = box.tag('tr') return root, box, row
end
function p.build(data, args)
-- Process config data. local isSmall = args.small == 'yes' or args.small == true local typeData = data.types[args.type] local invalidType = args.type and not typeData and true or false typeData = typeData or data.types[data.default]
local image, imageRight, text, imageSize if isSmall then image = args.smallimage or args.image imageRight = args.smallimageright or args.imageright text = args.smalltext or args.text imageSize = data.imageSizeSmall or data.imageSize else image = args.image imageRight = args.imageright text = args.text imageSize = data.imageSizeLarge or data.imageSize end
-- Get the box structure. local root, box, row = generateBoxStructure()
-- Build the box. box .attr('id', args.id) for i, class in ipairs(data.classes) do box .addClass(class) end box .addClass(typeData.class) .addClass(args.class) .cssText(args.style) .attr('role', 'presentation')
-- Add the left-hand image. if image ~= 'none' then row.tag('td') .addClass('mbox-image') .wikitext(image or mw.ustring.format('%s', typeData.image, imageSize)) elseif data.imageEmptyCell then row.tag('td') .addClass('mbox-empty-cell') end
-- Add the text. row.tag('td') .addClass('mbox-text') .cssText(args.textstyle) .wikitext(text)
-- Add the right-hand image. if imageRight then row.tag('td') .addClass('mbox-imageright') .wikitext(imageRight) end
-- Add error messages and categories. if invalidType then local title = mw.title.getCurrentTitle() local catsort = (title.namespace == 0 and 'Main:' or ) .. title.prefixedText root.tag('div') .css('text-align', 'center') .wikitext(mw.ustring.format('This message box is using an invalid "type=%s" parameter and needs fixing.', args.type or )) .done() .wikitext(mw.ustring.format(, catsort)) end return tostring(root)
end
function p._fmbox(args)
local data = {} data.types = { warning = { class = 'fmbox-warning', image = 'Cmbox deletion.png' }, editnotice = { class = 'fmbox-editnotice', image = 'Imbox notice.png' }, system = { class = 'fmbox-system', image = 'Imbox notice.png' } } data.default = 'system' data.classes = { 'plainlinks', 'fmbox' } data.imageSize = '40x40px' data.imageEmptyCell = false return p.build(data, args)
end
function p._ombox(args)
local data = {} data.types = { speedy = { class = 'ombox-speedy', image = 'Imbox speedy deletion.png' }, delete = { class = 'ombox-delete', image = 'Imbox deletion.png' }, content = { class = 'ombox-content', image = 'Imbox content.png' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Imbox move.png' }, protection = { class = 'ombox-protection', image = 'Imbox protection.png' }, notice = { class = 'ombox-notice', image = 'Imbox notice.png' } } data.default = 'notice' data.classes = {'plainlinks', 'ombox'} data.imageSizeLarge = '40x40px' data.imageSizeSmall = '30x30px' data.imageEmptyCell = true return p.build(data, args)
end
local function makeWrapper(func)
return function (frame) -- If called via #invoke, use the args passed into the invoking -- template, or the args passed to #invoke if any exist. Otherwise -- assume args are being passed directly in from the debug console -- or from another Lua module. local origArgs if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args for k, v in pairs(frame.args) do origArgs = frame.args break end else origArgs = frame end -- Trim whitespace and remove blank arguments. local args = {} for k, v in pairs(origArgs) do if type(v) == 'string' then v = mw.text.trim(v) end if v ~= then args[k] = v end end return func(args) end
end
p.fmbox = makeWrapper(p._fmbox) p.ombox = makeWrapper(p._ombox)
return p