Module:Message box: Difference between revisions

Jump to navigation Jump to search
m>Mr. Stradivarius
start work on a module for displaying Template:Mbox-family message boxes
 
m>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 using the args passed to the template.
     -- 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.
    local root = htmlBuilder.create() -- The template root. Includes error messages and categories added after the box.
    local box = root.tag('table') -- 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.
    local row = box.tag('tr')
     if image ~= 'none' then
     if args.image ~= 'none' then
         row.tag('td')
         row.tag('td')
             .addClass('mbox-image')
             .addClass('mbox-image')
             .wikitext(args.image or mw.ustring.format(
             .wikitext(image or mw.ustring.format('[[File:%s|%s|link=|alt=]]', typeData.image, imageSize))
                '[[File:%s|%s|link=|alt=]]',
                typeData.image,
                (args.small == 'yes' or args.small == true) and data.imageSizeSmall or data.imageSizeLarge or data.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(args.text)
         .wikitext(text)


     -- Add the right-hand image.
     -- Add the right-hand image.
     if args.imageright then
     if imageRight then
         row.tag('td')
         row.tag('td')
             .addClass('mbox-imageright')
             .addClass('mbox-imageright')
             .wikitext(args.imageright)
             .wikitext(imageRight)
     end
     end