Skip to content

Latest commit

 

History

History
195 lines (168 loc) · 3.35 KB

README.md

File metadata and controls

195 lines (168 loc) · 3.35 KB

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