Skip to content

Instantly share code, notes, and snippets.

@takluyver
Created March 6, 2013 11:57
Show Gist options
  • Select an option

  • Save takluyver/5098835 to your computer and use it in GitHub Desktop.

Select an option

Save takluyver/5098835 to your computer and use it in GitHub Desktop.

Revisions

  1. takluyver created this gist Mar 6, 2013.
    58 changes: 58 additions & 0 deletions ipytables.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    class TableCell(object):
    bg_colour = None

    def __init__(self, value, header=False, bg_colour=None, text_colour=None):
    self.value = value
    self.header = header
    self.bg_colour = bg_colour
    self.text_colour = text_colour

    def _make_css(self):
    rules = []
    if self.bg_colour:
    rules.append('background-color:%s' % self.bg_colour)
    if self.text_colour:
    rules.append('color:%s' % self.text_colour)
    return '; '.join(rules)

    def _repr_html_(self):
    tag = 'th' if self.header else 'td'
    attrs = []
    style = self._make_css()
    if style:
    attrs.append('style="%s"'%style)
    return "<%s %s>%s</%s>"% (tag, ' '.join(attrs), self.value, tag)

    class TableRow(object):
    def __init__(self, *cells):
    self.cells = []
    for c in cells:
    self.append_cell(c)

    def append_cell(self, c):
    if not isinstance(c, TableCell):
    c = TableCell(c)
    self.cells.append(c)

    def _repr_html_(self):
    return '<tr>' + ''.join(c._repr_html_() for c in self.cells) + '</tr>'

    class TableHeaderRow(TableRow):
    def append_cell(self, c):
    if not isinstance(c, TableCell):
    c = TableCell(c, header=True)
    self.cells.append(c)

    class Table(object):
    def __init__(self, *rows):
    self.rows = []
    for r in rows:
    self.append_row(r)

    def append_row(self, r):
    if not isinstance(r, TableRow):
    r = TableRow(*r)
    self.rows.append(r)

    def _repr_html_(self):
    return '<table>\n' + '\n'.join(r._repr_html_() for r in self.rows) + '\n</table>'