Module:TableGenerator: Difference between revisions

From Deadlock Wiki
Jump to navigation Jump to search
Sur (talk | contribs)
m Undo revision 5127 by Sur (talk)
Tag: Undo
Sur (talk | contribs)
m Undo revision 5125 by Sur (talk)
Tag: Undo
Line 2: Line 2:


--<table class="wikitable">
--<table class="wikitable">
--{{#invoke:YourModuleName|createHtmlTable
--{{#invoke: TableGenerator | generateHtmlTable | cols=3 | onlyBody=true | Item 1 | Item 2 | Item 3 | Item 4 | Item 5 }}
--|cols=3
--|onlyBody=true
--|cell_values=[ "Cell 1", "Cell 2", "Cell 3", "Cell 4", "Cell 5", "Cell 6", "Cell 7" ]
--}}
--</table>
--</table>


--creates
--creates


--Cell 1, Cell 2, Cell 3
--Item 1, Item 2, Item 3
--Cell 4, Cell 5
--Item 4, Item 5
function p.createHtmlTable(frame)
function p.generateHtmlTable(frame)
    -- Get the arguments passed to the template
     local args = frame.args
     local args = frame.args
     local cols = tonumber(args['cols']) or 3
     local cols = tonumber(args['cols']) or 3  -- Default number of columns is 3
     local onlyBody = args['onlyBody'] == 'true'
     local onlyBody = args['onlyBody'] == 'true' -- Check if onlyBody is set to true
     local cell_values_json = args['cell_values'] or "[]"
     local cell_values = args['cell_values'] or "" -- Get the cell values argument
     local values = json.decode(cell_values_json)  -- Decode JSON string
     local values = {}  -- Table to hold the individual cell values
 
   
    -- Split the cell_values string by commas
    for value in cell_values:gmatch("[^,]+") do
        table.insert(values, value:match("^%s*(.-)%s*$"))  -- Trim whitespace
    end
   
    -- Initialize the HTML table structure
     local result = ''
     local result = ''
   
     if not onlyBody then
     if not onlyBody then
         result = result .. '<table class="wikitable">\n'
         result = result .. '<table class="wikitable">\n'
     end
     end
 
   
     local count = 0
     local count = 0
     for i, value in ipairs(values) do
     for i, value in ipairs(values) do
        -- If it's the start of a new row
         if count % cols == 0 then
         if count % cols == 0 then
             if count > 0 then
             if count > 0 then
Line 34: Line 39:
         end
         end


        -- Add the value as a table cell
         result = result .. '    <td>' .. value .. '</td>\n'
         result = result .. '    <td>' .. value .. '</td>\n'
         count = count + 1
         count = count + 1
     end
     end
 
   
    -- Close the last row if necessary
     if count % cols ~= 0 then
     if count % cols ~= 0 then
         result = result .. '  </tr>\n'
         result = result .. '  </tr>\n'

Revision as of 22:10, 14 September 2024

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

local p = {}

--<table class="wikitable">
--{{#invoke: TableGenerator | generateHtmlTable | cols=3 | onlyBody=true | Item 1 | Item 2 | Item 3 | Item 4 | Item 5 }}
--</table>

--creates

--Item 1, Item 2, Item 3
--Item 4, Item 5
function p.generateHtmlTable(frame)
    -- Get the arguments passed to the template
    local args = frame.args
    local cols = tonumber(args['cols']) or 3  -- Default number of columns is 3
    local onlyBody = args['onlyBody'] == 'true'  -- Check if onlyBody is set to true
    local cell_values = args['cell_values'] or ""  -- Get the cell values argument
    local values = {}  -- Table to hold the individual cell values
    
    -- Split the cell_values string by commas
    for value in cell_values:gmatch("[^,]+") do
        table.insert(values, value:match("^%s*(.-)%s*$"))  -- Trim whitespace
    end
    
    -- Initialize the HTML table structure
    local result = ''
    
    if not onlyBody then
        result = result .. '<table class="wikitable">\n'
    end
    
    local count = 0
    for i, value in ipairs(values) do
        -- If it's the start of a new row
        if count % cols == 0 then
            if count > 0 then
                result = result .. '  </tr>\n'
            end
            result = result .. '  <tr>\n'
        end

        -- Add the value as a table cell
        result = result .. '    <td>' .. value .. '</td>\n'
        count = count + 1
    end
    
    -- Close the last row if necessary
    if count % cols ~= 0 then
        result = result .. '  </tr>\n'
    end

    if not onlyBody then
        result = result .. '</table>'
    end

    return result
end

return p