Jump to content

Module:TemplateStructure: Difference between revisions

No edit summary
Tag: Reverted
No edit summary
Tag: Manual revert
Line 4: Line 4:
     p.render(args, config)
     p.render(args, config)
      
      
     Renders a table using a modular, block-based approach via the mw.html API.
     Renders a table using a modular, block-based approach.
    This version creates a complete HTML table element that is not re-wrapped by the parser.
      
      
     Parameters:
     Parameters:
       args  - Table of template parameters (passed to each block function).
       args  - Table of template parameters (passed to each block function).
       config - Table containing configuration options:
       config - Table containing configuration options:
           tableClass: (string) CSS class for the table (default: "template-table")
           tableClass: (string) CSS class for the table.
           tableAttrs: (table) Attributes for the table element (default: {cellpadding = "2"})
                      Default: "template-table"
           blocks:    (array) An ordered list of block functions that generate HTML fragments.
           tableAttrs: (string) Additional attributes for the table tag.
                       Each block function should accept (args, config) and return a string
                      Default: 'cellpadding="2"'
                      containing HTML (e.g., complete <tr>...</tr> markup).
                      Note: Using cellpadding here is a legacy technique that ensures
                      a minimum amount of spacing in table cells, which helps maintain
                      readability and consistent rendering across different skins and
                      browsers. It can be overridden via config if desired.
           blocks:    (array) An ordered list of functions (blocks) that generate table rows.
                       Each block function should accept (args, config) and return a string.
      
      
     Returns:
     Returns:
       A string containing the HTML markup for the table.
       A string containing the full wikitext markup for the table.
]]
]]
function p.render(args, config)
function p.render(args, config)
     config = config or {}
     config = config or {}
     local tableClass = config.tableClass or "template-table"
     local tableClass = config.tableClass or "template-table"
     local tableAttrs = config.tableAttrs or {cellpadding = "2"}
     local tableAttrs = config.tableAttrs or 'cellpadding="2"'
     local blocks = config.blocks or {}
     local blocks = config.blocks or {}


     -- Create the table element.
     -- Begin the table markup.
     local tableEl = mw.html.create("table", tableAttrs)
     local result = {}
     tableEl:attr("class", tableClass)
    table.insert(result, string.format('{| class="%s" %s', tableClass, tableAttrs))
 
      
     -- Process each block function and append its HTML fragment to the table.
     -- Process each block function in the supplied order.
     for i, block in ipairs(blocks) do
     for i, block in ipairs(blocks) do
         if type(block) == "function" then
         if type(block) == "function" then
             local blockOutput = block(args, config)
             local blockOutput = block(args, config)
             if blockOutput and blockOutput ~= "" then
             if blockOutput and blockOutput ~= "" then
                 tableEl:wikitext(blockOutput)
                 table.insert(result, blockOutput)
             end
             end
         else
         else
Line 40: Line 44:
         end
         end
     end
     end
 
   
     -- Return the complete HTML as a string.
     table.insert(result, "|}")
     return tostring(tableEl)
     return table.concat(result, "\n")
end
end


return p
return p

Revision as of 13:47, 16 February 2025

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

local p = {}

--[[
    p.render(args, config)
    
    Renders a table using a modular, block-based approach.
    
    Parameters:
      args   - Table of template parameters (passed to each block function).
      config - Table containing configuration options:
          tableClass: (string) CSS class for the table.
                      Default: "template-table"
          tableAttrs: (string) Additional attributes for the table tag.
                      Default: 'cellpadding="2"'
                      Note: Using cellpadding here is a legacy technique that ensures
                      a minimum amount of spacing in table cells, which helps maintain
                      readability and consistent rendering across different skins and
                      browsers. It can be overridden via config if desired.
          blocks:     (array) An ordered list of functions (blocks) that generate table rows.
                      Each block function should accept (args, config) and return a string.
    
    Returns:
      A string containing the full wikitext markup for the table.
]]
function p.render(args, config)
    config = config or {}
    local tableClass = config.tableClass or "template-table"
    local tableAttrs = config.tableAttrs or 'cellpadding="2"'
    local blocks = config.blocks or {}

    -- Begin the table markup.
    local result = {}
    table.insert(result, string.format('{| class="%s" %s', tableClass, tableAttrs))
    
    -- Process each block function in the supplied order.
    for i, block in ipairs(blocks) do
        if type(block) == "function" then
            local blockOutput = block(args, config)
            if blockOutput and blockOutput ~= "" then
                table.insert(result, blockOutput)
            end
        else
            mw.log("Warning: Block #" .. i .. " is not a function and will be skipped.")
        end
    end
    
    table.insert(result, "|}")
    return table.concat(result, "\n")
end

return p