Skip to content

Create nested HTML tables without manually keeping track of colspan/rowspan.

License

Notifications You must be signed in to change notification settings

ll14m4n/tablemaker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tablemaker

HTML table generator that allows arbitrary nested cell subdivisions and applies colspan/rowspan as needed.

Build Status

Including the gem in your Rails project will give you a new view helper make_table

Usage

- items = ['E', 'F']

= make_table(class: 'foo') do |t|
  - t.row do
    - t.th("A", tr_opts: {class: 'th'})
    - t.th("B")
    - t.th("C")
  - t.row do
    - t.column do
      - items.each_with_index do |item, idx|
        - t.td(item, tr_opts: {'data-id': idx})
  - t.td(style: 'background: green', tr_opts: {class: 't-footer'}) do
    p cell content
    
  
    

this will generate this output:

A B C
E
F

cell content

source:

<table class="foo">
    <tr class="th">
        <th>A</th>
        <th>B</th>
        <th>C</th>
    </tr>
    <tr data-id="0">
        <td colspan="3">E</td>
    </tr>
    <tr data-id="1">
        <td colspan="3">F</td>
    </tr>
    <tr>
        <td style="background: green" colspan="3">
            <p>cell content</p>
        </td>
    </tr>
</table>

You can use make_table_without_tag to render part of a table. You can pass attributes to <tr> tag from first cell in row/column using tr_opts

table
  thead
    tr
      th A
      th B
      th C
  tbody
    = make_table_without_tag(id: 'first-row') do |t|
      - t.row do
        - t.column do
          - items.each_with_index do |item, idx|
            - t.td(item, tr_opts: { 'data-id': idx })    

source:

<tr id="first-row" data-id="0">
    <td>E</td>
</tr>
<tr data-id="1">
    <td>F</td><
/tr>

Examples outside Rails

A very basic table:

# +---+---+
# | A | B |
# +---+---+
# | C | D |
# +---+---+
#
@table2 = Tablemaker.column do |c|
  c.row do |r|
    r.cell("A")
    r.cell("B")
  end
  c.row do |r|
    @c2 = r.cell("C")
    @d2 = r.cell("D")
  end
end

# but you can also start with columns and construct the table left-to-right. this produces the exact same result:
#
Tablemaker.row do |r|
  r.column do |c|
    c.cell("A")
    c.cell("C")
  end
  r.column do |c|
    c.cell("B")
    c.cell("D")
  end
end

A more advanced example:

# +---+---+---+
# |   | B |   |
# |   +---+ C |
# |   | D |   |
# | A +---+---+
# |   |   | F |
# |   | E +---+
# |   |   | G |
# +---+---+---+
#
@table = Tablemaker.row do |t|
  t.cell("A")
  t.column do |r|
    r.row do |c|
      c.column do |rr|
        rr.cell("B")
        rr.cell("D")
      end
      c.cell("C")
    end
    r.row do |c|
      c.cell("E")
      c.column do |rr|
        rr.cell("F")
        rr.cell("G")
      end
    end
  end
end

this will generate the following output:

A B D
E
C F
G

Tablemaker keeps track of all the rowspan/colspan attributes required to generate a valid HTML table

About

Create nested HTML tables without manually keeping track of colspan/rowspan.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%