1 | -- resty-gitweb@utils/tabulate.lua |
2 | -- Formats input data with HTML table elements |
3 |
|
4 | -- Copyright (c) 2020 Joshua 'joshuas3' Stockin |
5 | -- <https://git.joshstock.in/resty-gitweb> |
6 | -- This software is licensed under the MIT License. |
7 |
|
8 | local html_format = function(str, element, class) |
9 | str = str or "" |
10 | element = element or "td" |
11 | local open = class == nil and "<"..element..">" or "<"..element.." class=\""..class.."\">" |
12 | local close = "</"..element..">" |
13 | return open..str..close |
14 | end |
15 |
|
16 | local _M = function(table_data) -- table to HTML |
17 | local table_string |
18 | local classes = {} |
19 |
|
20 | -- table HTML class? |
21 | if table_data.class then |
22 | table_string = "<table class=\""..table_data.class.."\">\n" |
23 | else |
24 | table_string = "<table>\n" |
25 | end |
26 |
|
27 | -- format th row |
28 | if #table_data.headers > 0 then |
29 | local header_row = "<tr>" |
30 | for _, header in pairs(table_data.headers) do |
31 | table.insert(classes, header[1]) -- populate classes data |
32 | local th = html_format(header[2], "th", header[1]) |
33 | header_row = header_row..th |
34 | end |
35 | header_row = header_row.."</tr>\n" |
36 | table_string = table_string..header_row |
37 | end |
38 |
|
39 | -- rows with td |
40 | if #table_data.rows > 0 then |
41 | for _, row in pairs(table_data.rows) do |
42 | local row_html = "<tr>" |
43 | for i, data in pairs(row) do |
44 | local class = classes[i] |
45 | local td = html_format(data, "td", class) |
46 | row_html = row_html..td |
47 | end |
48 | local row_html = row_html.."</tr>\n" |
49 | table_string = table_string..row_html |
50 | end |
51 | end |
52 |
|
53 | table_string = table_string.."</table>\n" |
54 |
|
55 | return table_string |
56 | end |
57 |
|
58 | return _M |
59 |
|