Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Documentation for this module may be created at Module:Mbox/doc

local Mbox = {}

local function getArgs(frame)
    local args = {}
    for k, v in pairs(frame:getParent().args) do
        if v ~= "" then args[k] = v end
    end
    for k, v in pairs(frame.args) do
        if v ~= "" then args[k] = v end
    end
    return args
end

function Mbox.main(frame)
    local args = getArgs(frame)

    -- styles
    local styles = {}
    if args.bordercolor then
        styles['border-left-color'] = args.bordercolor
    elseif args.type then
        styles['border-left-color'] = 'var(--type-' .. args.type .. ')'
    end
    if args.bgcolor then
        styles['background-color'] = args.bgcolor
    end

    -- images
    local imagewidth = args.imagewidth or '80px'
    local imagelink = args.imagelink and ('|link=' .. args.imagelink) or ''
    local imagewikitext = ('[[File:%s|%s%s]]'):format(args.image or '', imagewidth, imagelink)

    -- id for collapsible toggle
    local id = args.id or 'mbox'

    local container = mw.html.create('div')
        :addClass('mbox')
        :addClass(args.class)
        :css(styles)
        :cssText(args.style)

    local content = container:tag('div')
        :addClass('mbox__content')

    if args.image then
        local img = content:tag('div')
            :addClass('mbox__content__image')
            :addClass('mw-collapsible')
            :attr('id', 'mw-customcollapsible-' .. id)
            :wikitext(imagewikitext)
        if args.collapsed then
            img:addClass('mw-collapsed')
        end
    end

    local contentwrapper = content:tag('div')
        :addClass('mbox__content__wrapper')

    if args.header then
        contentwrapper:tag('div')
            :addClass('mbox__content__header')
            :wikitext(args.header)
    end

    if args.text then
        local text = contentwrapper:tag('div')
            :addClass('mbox__content__text')
            :addClass('mw-collapsible')
            :attr('id', 'mw-customcollapsible-' .. id)
            :wikitext(args.text)
        if args.collapsed then
            text:addClass('mw-collapsed')
        end
        if args.comment then
            text:tag('div')
                :addClass('mbox__content__text__comment')
                :wikitext(args.comment)
        end
    end

    contentwrapper:tag('span')
        :addClass('mbox__close')
        :addClass('mw-customtoggle-' .. id)
        :attr('title', 'Dismiss')

    if args.aside then
        local aside = content:tag('div')
            :addClass('mbox__content__aside')
            :addClass('mw-collapsible')
            :attr('id', 'mw-customcollapsible-' .. id)
            :wikitext(args.aside)
        if args.collapsed then
            aside:addClass('mw-collapsed')
        end
    end

    return container
end

return Mbox