Jump to content

Module:InfoboxBasic: Difference between revisions

From Yusupov's House
No edit summary
No edit summary
Line 1: Line 1:
-- Module:InfoboxBasic
-- Render all remaining named params in the order they were supplied
local p = {}
local skip = {
local trim = mw.text.trim
    name=true, Name=true, title=true, Title=true,
local function isBlank(v) return v == nil or trim(tostring(v)) == '' end
    image=true, Image=true,
local function labelFromKey(k) k = k:gsub('_',' '); return trim(k) end
    color=true, Color=true, colour=true, Colour=true,
    class=true, style=true
}


function p.render(frame)
local function addRow(label, value)
     local parent = frame:getParent()
     local row = tbl:tag('tr')
     local args = parent and parent.args or frame.args
     row:tag('th'):attr('scope','row'):wikitext(labelFromKey(label))
    row:tag('td'):wikitext(value)
end


    local title = args.name or args.Name or args.title or args.Title or 'Infobox'
if parent and parent.getArgumentPairs then
    local image = args.image or args.Image
     -- This preserves the author’s order
     local color = args.color or args.Color or args.colour or args.Colour  -- title BG (light mode only)
     for key, value in parent:getArgumentPairs() do
 
         if not skip[key] and not tonumber(key) and not isBlank(value) then
     local tbl = mw.html.create('table')
            addRow(key, value)
        :addClass('infobox')
         end
        :css('float','right')
        :css('clear','right')
         :css('margin','0 0 1em 1em')
 
    -- Title (centered, 125%); only add background if |color= was set
    local th = tbl:tag('tr'):tag('th')
        :attr('colspan','2')
        :addClass('infobox-title')
        :css('text-align','center')
        :css('font-size','125%')
        :wikitext(title)
 
    if not isBlank(color) then
        th:addClass('has-title-color')     -- CSS uses this to apply background
         th:css('--ib-title-bg', color)      -- value only used in light mode
     end
     end
 
else
     -- Optional image row; give TD a class so CSS can zero the padding and make it 100% wide
     -- Fallback (older MW): order may not be preserved
    if not isBlank(image) then
        tbl:tag('tr')
            :tag('td')
            :attr('colspan','2')
            :addClass('infobox-image-cell')
            :wikitext('[[File:' .. image .. '|frameless]]')
    end
 
    -- Render all remaining named parameters in the order supplied
     local names = {}
     local names = {}
     if parent and parent.getArgumentNames then
     for k,_ in pairs(args) do table.insert(names, k) end
        names = parent:getArgumentNames()
    -- do NOT sort; keep whatever order Lua gives us
    else
        for k,_ in pairs(args) do table.insert(names,k) end
        table.sort(names, function(a,b) return tostring(a) < tostring(b) end)
    end
 
    local skip = {
        name=true, Name=true, title=true, Title=true,
        image=true, Image=true, color=true, Color=true, colour=true, Colour=true,
        class=true, style=true
    }
 
     for _, key in ipairs(names) do
     for _, key in ipairs(names) do
         if not skip[key] and not tonumber(key) then
         if not skip[key] and not tonumber(key) then
             local v = args[key]
             local v = args[key]
             if not isBlank(v) then
             if not isBlank(v) then addRow(key, v) end
                local row = tbl:tag('tr')
                row:tag('th'):attr('scope','row'):wikitext(labelFromKey(key))
                row:tag('td'):wikitext(v)
            end
         end
         end
     end
     end
    return tostring(tbl)
end
end
return p

Revision as of 22:50, 1 October 2025

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

-- Render all remaining named params in the order they were supplied
local skip = {
    name=true, Name=true, title=true, Title=true,
    image=true, Image=true,
    color=true, Color=true, colour=true, Colour=true,
    class=true, style=true
}

local function addRow(label, value)
    local row = tbl:tag('tr')
    row:tag('th'):attr('scope','row'):wikitext(labelFromKey(label))
    row:tag('td'):wikitext(value)
end

if parent and parent.getArgumentPairs then
    -- This preserves the author’s order
    for key, value in parent:getArgumentPairs() do
        if not skip[key] and not tonumber(key) and not isBlank(value) then
            addRow(key, value)
        end
    end
else
    -- Fallback (older MW): order may not be preserved
    local names = {}
    for k,_ in pairs(args) do table.insert(names, k) end
    -- do NOT sort; keep whatever order Lua gives us
    for _, key in ipairs(names) do
        if not skip[key] and not tonumber(key) then
            local v = args[key]
            if not isBlank(v) then addRow(key, v) end
        end
    end
end