Module:TableGenerator: Difference between revisions

From Deadlock Wiki
Jump to navigation Jump to search
Sur (talk | contribs)
mNo edit summary
Sur (talk | contribs)
m bugfix, was using class instead of class_str in output
 
(33 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.generateTable(frame)
--<table class="wikitable">
     local args = frame:getParent().args
--{{#invoke: TableGenerator | generateHtmlTable | cols=3 | only_body=true | cell_values=Item 1, Item 20, Item 3, Item 40, Item 5 }}
     local cols = tonumber(args["cols"]) or 1 -- Default to 1 column if no value is passed
--</table>
     local output = {}
 
     local row = {}
-- Creates:
-- Item 1, Item 20, Item 3
-- Item 40, 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 only_body = args['only_body'] == 'true'  -- Check if only_body is set to true
    local class = args['class']
    local class_is_statbox = class == 'Statbox_hero'
     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
      
      
     table.insert(output, '{| class="wikitable"')  -- Start of the table
     -- Initialize the HTML table structure
    local result = ''
      
      
     for i, v in ipairs(args) do
    if not only_body then
         -- Add the value to the current row
        result = result .. '<table class="wikitable">\n'
         table.insert(row, string.format('| %s', v))
    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


         -- If we have enough columns, close the row and add it to the output
         -- If the value contains a " 0 " then it will be colored slightly darker
         if #row == cols then
        local class_str = ''
            table.insert(output, '|-\n' .. table.concat(row, ' || '))
         if (class_is_statbox) then
            row = {}  -- Reset the row
        if value:find(" 0[^%.]") then
         end
            class_str = ' class="darker"'
        end
        else
        if (class ~= nil) then
        class_str = ' class="' .. class .. '"'
        end
    end
 
        -- Add the value as a table cell with the appropriate class
        result = result .. '    <td' .. class_str .. '>' .. value .. '</td>\n'
        count = count + 1
    end
   
    -- Close the last row if necessary
    if count % cols ~= 0 then
         result = result .. '  </tr>\n'
     end
     end


    -- Add any remaining data (in case the last row is incomplete)
     if not only_body then
     if #row > 0 then
         result = result .. '</table>'
         table.insert(output, '|-\n' .. table.concat(row, ' || '))
     end
     end
   
 
    table.insert(output, '|}')  -- End of the table
     return result
   
     return table.concat(output, '\n')
end
end


return p
return p

Latest revision as of 18:33, 21 September 2024

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

local p = {}

--<table class="wikitable">
--{{#invoke: TableGenerator | generateHtmlTable | cols=3 | only_body=true | cell_values=Item 1, Item 20, Item 3, Item 40, Item 5 }}
--</table>

-- Creates:
-- Item 1, Item 20, Item 3
-- Item 40, 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 only_body = args['only_body'] == 'true'  -- Check if only_body is set to true
    local class = args['class']
    local class_is_statbox = class == 'Statbox_hero'
    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 only_body 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

        -- If the value contains a " 0 " then it will be colored slightly darker
        local class_str = ''
        if (class_is_statbox) then
	        if value:find(" 0[^%.]") then
	            class_str = ' class="darker"'
	        end
        else
        	if (class ~= nil) then
        		class_str = ' class="' .. class .. '"'
        	end
    	end

        -- Add the value as a table cell with the appropriate class
        result = result .. '    <td' .. class_str .. '>' .. 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 only_body then
        result = result .. '</table>'
    end

    return result
end

return p