Módulo:Caixa lateral/Testes

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Descrição[editar código-fonte]

Este Módulo implementa a predefinição {{Caixa lateral}}. Por favor consulte a predefinição para mais instruções.

Uso[editar código-fonte]

Outra documentação:

-- This module implements {{caixa lateral}}.

local yesno = require('Module:Yesno')

local p = {}

function p.main(frame)
    local origArgs = frame:getParent().args
    local args = {}
    for k, v in pairs(origArgs) do
        v = v:match('%s*(.-)%s*$')
        if v ~= '' then
            args[k] = v
        end
    end
    return p._main(args)
end

function p._main(args)
    local data = p.makeData(args)
    return p.renderSidebox(data)
end

function p.makeData(args)
    local data = {}
      
    -- Main table classes
    data.classes = {}
    data.css = {}
    if yesno(args.metadata) ~= false then
        table.insert(data.classes, 'metadata')
    end
    if args.position and args.position:lower() == 'left' then
        table.insert(data.classes, 'noprint') --mbox-small-left
        table.insert(data.css, {clear = 'right',
            ['bordersizing'] = 'border-box', overflow = 'hidden',
            width = '238px', ['border-collapse'] = 'collapse',
            ['font-size'] = '88%', ['line-height'] = '1.25em'})
    else
        table.insert(data.classes, 'mbox-small')
        table.insert(data.css, {clear = 'right', float = 'right',
            margin = '4px 0 4px 1em', ['box-sizing'] = 'border-box',
            width = '238px', ['font-size'] = '88%',
            ['line-height'] = '1.25em'})
    end
    table.insert(data.classes, args.class)
  
    -- Image
    if args.image and args.image ~= 'none' then
        data.image = args.image
    end

    -- Copy over data that doesn't need adjusting
    local argsToCopy = {
        -- Styles
        'style',
        'textstyle',

        -- Above row
        'above',
        'abovestyle',

        -- Body row
        'text',
        'imageright',

        -- Below row
        'below',
    }
    for i, key in ipairs(argsToCopy) do
        data[key] = args[key]
    end

    return data
end

function p.renderSidebox(data)
    -- Renders the sidebox HTML.

    -- Table root
    local root = mw.html.create('table')
    root:attr('role', 'presentation')
    root:css{clear = 'right', border = 'solid #aaa 1px',
        margin = '0 0 1em 1em', ['font-size'] = '90%',
        ['background-color'] = '#f9f9f9', width = '238px',
        padding = '5px', spacing = '2px',
        ['text-align'] = 'center', float = 'right'
    }
    for i, class in ipairs(data.classes or {}) do
        root:addClass(class)
    end
    if data.style then
        root:cssText(data.style)
    end

    -- The "above" row
    if data.above then
        local aboveCell = root:newline():tag('tr'):tag('td')
        aboveCell
            :attr('colspan', data.imageright and 3 or 2)
            :attr({border = 'none'})
            :attr({padding = '0.25em 0.9em'})
            :attr({width = '100%'})
            :addClass('mbox-text')
          
        if data.textstyle then
            aboveCell:cssText(data.textstyle)
        end
        if data.abovestyle then
            aboveCell:cssText(data.abovestyle)
        end
        aboveCell
            :newline()
            :wikitext(data.above)
    end

    -- The body row
    local bodyRow = root:newline():tag('tr'):newline()
    if data.image then
        bodyRow:tag('td')
            :attr({float ='left', ['vertical-align'] = 'middle'})
            :wikitext(data.image)
    else
        bodyRow:tag('td'):css('width', '1px')
    end
    local textCell = bodyRow:newline():tag('td')
    textCell:addClass('plainlist')
    textCell:attr({['margin-left'] = '30px', ['line-height'] = 'normal', ['vertical-align'] = 'middle'})
    if data.textstyle then
        textCell:cssText(data.textstyle)
    end
    textCell:wikitext(data.text)
    if data.imageright then
        bodyRow:newline():tag('td')
            :attr({border = 'none'})
            :attr({padding = '2px 0.9em 2px 0'})
            :attr({['text-align'] = 'center'})
            :addClass('mbox-imageright')
            :wikitext(data.imageright)
    end

    -- The below row
    if data.below then
        local belowCell = root:newline():tag('tr'):tag('td')
        belowCell
            :attr('colspan', data.imageright and 3 or 2)
            :attr({border = 'none'})
            :attr({padding = '0.25em 0.9em'})
            :attr({width = '100%'})
            :addClass('mbox-text')
        if data.textstyle then
            belowCell:cssText(data.textstyle)
        else
            belowCell:cssText(data.textstyle, {float = 'left',
            ['vertical-align'] = 'middle'})

        end
        belowCell:wikitext(data.below)
    end

    return tostring(root)
end

return p