Module:DevMbox
From CG Studios Wiki
Documentation for this module may be created at Module:DevMbox/doc
-- <nowiki>
-- Standalone Mbox module for normal Scribunto (non-Fandom)
local Mbox = {}
local getArgs = require('Module:Arguments').getArgs
-- Helper: args key lookup with optional default value
local function param(args, key, default)
if args[key] and args[key] ~= '' then
return args[key]
end
return default
end
function Mbox.main(frame)
local args = getArgs(frame)
----------------------------------------
-- styles
----------------------------------------
local styles = {}
styles['border-left-color'] = param(args, 'bordercolor')
styles['background-color'] = param(args, 'bgcolor')
----------------------------------------
-- images
----------------------------------------
local image = param(args, 'image', '')
local imagewidth = param(args, 'imagewidth', '80px')
local imageadjust = args.imageadjust and ('|' .. args.imageadjust) or ''
local imagelink = '|link=' .. (args.imagelink or '')
local imagewikitext = ''
if image ~= '' then
imagewikitext = string.format('[[File:%s|%s%s%s]]',
image, imagewidth, imageadjust, imagelink
)
end
----------------------------------------
-- container setup
----------------------------------------
local id = param(args, 'id', 'mbox')
local typeclass = param(args, 'type')
local collapsed = param(args, 'collapsed')
local header = param(args, 'header')
local asidearg = param(args, 'aside')
local textarg = param(args, 'text')
local comment = param(args, 'comment')
local container = mw.html.create('div')
:addClass('mbox')
:addClass(typeclass and ('mbox-type-' .. typeclass))
:addClass(param(args, 'class'))
:css(styles)
:cssText(param(args, 'style'))
local content = container:tag('div')
:addClass('mbox__content')
----------------------------------------
-- image block
----------------------------------------
if image ~= '' then
local img = content:tag('div')
:addClass('mbox__content__image')
:addClass('mw-collapsible')
:attr('id', 'mw-customcollapsible-' .. id)
:wikitext(imagewikitext)
if collapsed then
img:addClass('mw-collapsed')
end
end
----------------------------------------
-- main content wrapper
----------------------------------------
local contentwrapper = content:tag('div')
:addClass('mbox__content__wrapper')
if header then
contentwrapper:tag('div')
:addClass('mbox__content__header')
:wikitext(header)
end
----------------------------------------
-- text area
----------------------------------------
if textarg then
local text = contentwrapper:tag('div')
:addClass('mbox__content__text')
:addClass('mw-collapsible')
:attr('id', 'mw-customcollapsible-' .. id)
:wikitext(textarg)
if collapsed then
text:addClass('mw-collapsed')
end
if comment then
text:tag('div')
:addClass('mbox__content__text__comment')
:wikitext(comment)
end
end
----------------------------------------
-- close button (note: message removed)
----------------------------------------
contentwrapper:tag('span')
:addClass('mbox__close')
:addClass('mw-customtoggle-' .. id)
:attr('title', 'Dismiss')
----------------------------------------
-- aside
----------------------------------------
if asidearg then
local aside = content:tag('div')
:addClass('mbox__content__aside')
:addClass('mw-collapsible')
:attr('id', 'mw-customcollapsible-' .. id)
:wikitext(asidearg)
if collapsed then
aside:addClass('mw-collapsed')
end
end
return container
end
return Mbox