Module:TableGenerator: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
m bugfix, was using class instead of class_str in output |
||
(32 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function 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 | -- Get the arguments passed to the template | ||
local args = frame.args | local args = frame.args | ||
local cols = tonumber(args['cols']) or 3 -- Default number of columns is 3 | 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 | |||
-- Initialize the table structure | local class = args['class'] | ||
local result = ' | 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 | local count = 0 | ||
for i, value in ipairs( | 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' | |||
result = result .. ' | |||
end | 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 | end | ||
-- Close | -- Close the last row if necessary | ||
if count % cols ~= 0 then | if count % cols ~= 0 then | ||
result = result .. ' | result = result .. ' </tr>\n' | ||
end | end | ||
if not only_body then | |||
result = result .. '</table>' | |||
end | |||
return result | return result |
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