Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
The main server is currently down. We are running on a backup server, so editing and search functionality are temporarily disabled. Please check back in a few hours.

Module:Infobox: Difference between revisions

From GameBrew
No edit summary
Tag: Manual revert
No edit summary
Tag: Reverted
Line 1: Line 1:
--- Simple infobox module
-- Simple infobox module with enhanced flexibility and cleaner structure
local p = {}
local p = {}


--- Main function
--- Main function: generates an infobox table
function p.infobox( frame )
function p.infobox(frame)
local args
    -- Retrieve arguments (from template or direct call)
if frame == mw.getCurrentFrame() then
    local args = (frame.args and frame.args) or (frame:getParent() and frame:getParent().args) or {}
args = frame:getParent().args
else
args = frame
end
local infobox = mw.html.create('table'):addClass('infobox')
--top infobox ads
local div = mw.html.create('div')
div:attr('id', 'Ads-InfoboxTop')
infobox:node(div)


-- Title
    -- Create the container table
local title = args.title
    local infobox = mw.html.create('table'):addClass('infobox')
if not title or title == '' then title = mw.title.getCurrentTitle().text end
infobox:tag('tr'):tag('th'):addClass('infobox-title'):attr('scope','col'):attr('colspan',2):wikitext(title)
-- Image
local image = args.image
if image and image ~= '' then
if image:sub(1,2) ~= '[[' then
if not image:find(':') then
image = 'File:' .. image
end
image = '[[' .. image .. '|' .. ('300px') .. ']]'
end
local imgcell = infobox:tag('tr'):tag('td'):addClass('infobox-image')
:attr('colspan',2):wikitext(image)
local caption = args.imagecaption
if caption and caption ~= '' then
imgcell:wikitext("<br />''" .. caption .. "''")
end
end
-- Description
          local description = args.description
          if not description or description == '' then description = mw.title.getCurrentTitle().text end


-- Rows
    -- Top ad slot
for i = 1, 30 do
    infobox:node(
local header = args['header' .. i]; if header == '' then header = nil end
        mw.html.create('div')
local label = args['label' .. i]; if label == '' then label = nil end
            :attr('id', 'Ads-InfoboxTop')
local data = args['data' .. i]; if data == '' then data = nil end
    )
 
if header then
    -- Title row (defaults to page title)
infobox:tag('tr')
    local title = args.title or mw.title.getCurrentTitle().text
:tag('th'):addClass('infobox-header'):attr('scope','col'):attr('colspan',2):wikitext(header)
    infobox:tag('tr')
end
        :tag('th')
if data then
            :addClass('infobox-title')
if label then
            :attr{scope = 'col', colspan = '2'}
infobox:tag('tr')
            :wikitext(title)
:tag('th'):attr('scope','row'):addClass('infobox-label'):wikitext(label):done()
 
:tag('td'):addClass('infobox-data'):wikitext(data)
    -- Optional description row
else
    if args.description and args.description ~= '' then
infobox:tag('tr')
        infobox:tag('tr')
:tag('td'):addClass('infobox-data'):attr('colspan',2)
            :tag('td')
:css('text-align','center'):wikitext(data)
                :addClass('infobox-description')
end
                :attr('colspan', 2)
end
                :wikitext(args.description)
end
    end
 
-- Below
    -- Image block (with optional width and caption)
local below = args.below
    if args.image and args.image ~= '' then
if below and below ~= '' then
        local img = args.image
infobox:tag('tr'):tag('td'):addClass('infobox-below'):attr('colspan',2):wikitext(below)
        -- Wrap in File: namespace if needed
end
        if not img:match('%[%[') then
            if not img:find(':') then img = 'File:' .. img end
return infobox
            local width = args.imagewidth or '300px'
            img = string.format('[[%s|%s]]', img, width)
        end
        local imgCell = infobox:tag('tr')
            :tag('td')
                :addClass('infobox-image')
                :attr('colspan', 2)
                :wikitext(img)
        if args.imagecaption and args.imagecaption ~= '' then
            imgCell:tag('div')
                :addClass('infobox-caption')
                :wikitext(args.imagecaption)
        end
    end
 
    -- Data rows: uses args.rows to limit iterations or defaults to 30
    local maxRows = tonumber(args.rows or 30)
    for i = 1, maxRows do
        local header = args['header' .. i]
        if header and header ~= '' then
            infobox:tag('tr')
                :tag('th')
                    :addClass('infobox-header')
                    :attr{scope = 'col', colspan = '2'}
                    :wikitext(header)
        end
 
        local label = args['label' .. i]
        local data  = args['data'  .. i]
        if data and data ~= '' then
            if label and label ~= '' then
                local row = infobox:tag('tr')
                row:tag('th')
                    :addClass('infobox-label')
                    :attr('scope', 'row')
                    :wikitext(label)
                row:tag('td')
                    :addClass('infobox-data')
                    :wikitext(data)
            else
                infobox:tag('tr')
                    :tag('td')
                        :addClass('infobox-data')
                        :attr{colspan = '2', style = 'text-align:center;'}
                        :wikitext(data)
            end
        end
    end
 
    -- Optional footer row
    if args.below and args.below ~= '' then
        infobox:tag('tr')
            :tag('td')
                :addClass('infobox-below')
                :attr('colspan', 2)
                :wikitext(args.below)
    end
 
    -- Return HTML string
    return tostring(infobox)
end
end
 
return p
return p

Revision as of 02:21, 18 April 2025

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

-- Simple infobox module with enhanced flexibility and cleaner structure
local p = {}

--- Main function: generates an infobox table
function p.infobox(frame)
    -- Retrieve arguments (from template or direct call)
    local args = (frame.args and frame.args) or (frame:getParent() and frame:getParent().args) or {}

    -- Create the container table
    local infobox = mw.html.create('table'):addClass('infobox')

    -- Top ad slot
    infobox:node(
        mw.html.create('div')
            :attr('id', 'Ads-InfoboxTop')
    )

    -- Title row (defaults to page title)
    local title = args.title or mw.title.getCurrentTitle().text
    infobox:tag('tr')
        :tag('th')
            :addClass('infobox-title')
            :attr{scope = 'col', colspan = '2'}
            :wikitext(title)

    -- Optional description row
    if args.description and args.description ~= '' then
        infobox:tag('tr')
            :tag('td')
                :addClass('infobox-description')
                :attr('colspan', 2)
                :wikitext(args.description)
    end

    -- Image block (with optional width and caption)
    if args.image and args.image ~= '' then
        local img = args.image
        -- Wrap in File: namespace if needed
        if not img:match('%[%[') then
            if not img:find(':') then img = 'File:' .. img end
            local width = args.imagewidth or '300px'
            img = string.format('[[%s|%s]]', img, width)
        end
        local imgCell = infobox:tag('tr')
            :tag('td')
                :addClass('infobox-image')
                :attr('colspan', 2)
                :wikitext(img)
        if args.imagecaption and args.imagecaption ~= '' then
            imgCell:tag('div')
                :addClass('infobox-caption')
                :wikitext(args.imagecaption)
        end
    end

    -- Data rows: uses args.rows to limit iterations or defaults to 30
    local maxRows = tonumber(args.rows or 30)
    for i = 1, maxRows do
        local header = args['header' .. i]
        if header and header ~= '' then
            infobox:tag('tr')
                :tag('th')
                    :addClass('infobox-header')
                    :attr{scope = 'col', colspan = '2'}
                    :wikitext(header)
        end

        local label = args['label' .. i]
        local data  = args['data'  .. i]
        if data and data ~= '' then
            if label and label ~= '' then
                local row = infobox:tag('tr')
                row:tag('th')
                    :addClass('infobox-label')
                    :attr('scope', 'row')
                    :wikitext(label)
                row:tag('td')
                    :addClass('infobox-data')
                    :wikitext(data)
            else
                infobox:tag('tr')
                    :tag('td')
                        :addClass('infobox-data')
                        :attr{colspan = '2', style = 'text-align:center;'}
                        :wikitext(data)
            end
        end
    end

    -- Optional footer row
    if args.below and args.below ~= '' then
        infobox:tag('tr')
            :tag('td')
                :addClass('infobox-below')
                :attr('colspan', 2)
                :wikitext(args.below)
    end

    -- Return HTML string
    return tostring(infobox)
end

return p

Advertising: