Fully rework display with CSS style inclusion
This commit is contained in:
126
display.py
126
display.py
@@ -1,47 +1,109 @@
|
||||
import os
|
||||
|
||||
class DisplayHTMLBlock(object):
|
||||
class DisplayHTMLRaw(object):
|
||||
|
||||
def __init__(self, title=''):
|
||||
self.title = title
|
||||
|
||||
def build(self, f):
|
||||
pass
|
||||
|
||||
class DisplayHTMLRawBlock(DisplayHTMLBlock):
|
||||
|
||||
def __init__(self, title=''):
|
||||
super(DisplayHTMLRawBlock, self).__init__(title)
|
||||
self.html = ''
|
||||
def __init__(self, html=''):
|
||||
self.html = html
|
||||
|
||||
def setRawHTML(self, html):
|
||||
self.html = html
|
||||
|
||||
def _build(self, f, html):
|
||||
if html: f.write(html)
|
||||
|
||||
def build(self, f):
|
||||
f.write(self.html)
|
||||
self._build(self.html)
|
||||
|
||||
class DisplayHTMLBlock(DisplayHTMLRaw):
|
||||
|
||||
def __init__(self, title=''):
|
||||
super(DisplayHTMLBlock, self).__init__(html='')
|
||||
self.title = title
|
||||
self.cssclass = 'iwla_block'
|
||||
self.title_cssclass = 'iwla_block_title'
|
||||
self.value_cssclass = 'iwla_block_value'
|
||||
|
||||
def getTitle(self):
|
||||
return self.title
|
||||
|
||||
def setTitle(self, value):
|
||||
self.title = value
|
||||
|
||||
def setCSSClass(self, cssclass):
|
||||
self.cssclass = cssclass
|
||||
|
||||
def setTitleCSSClass(self, cssclass):
|
||||
self.title_cssclass = cssclass
|
||||
|
||||
def setValueCSSClass(self, cssclass):
|
||||
self.value_cssclass = cssclass
|
||||
|
||||
def build(self, f):
|
||||
html = '<div class="%s">' % (self.cssclass)
|
||||
if self.title:
|
||||
html += '<div class="%s">%s</div>' % (self.title_cssclass, self.title)
|
||||
html += '<div class="%s">%s</div>' % (self.value_cssclass, self.html)
|
||||
html += '</div>'
|
||||
|
||||
self._build(f, html)
|
||||
|
||||
class DisplayHTMLBlockTable(DisplayHTMLBlock):
|
||||
|
||||
def __init__(self, title, cols):
|
||||
super(DisplayHTMLBlockTable, self).__init__(title)
|
||||
super(DisplayHTMLBlockTable, self).__init__(title=title)
|
||||
self.cols = cols
|
||||
self.rows = []
|
||||
self.cols_cssclasses = ['' for e in cols]
|
||||
self.rows_cssclasses = []
|
||||
|
||||
def appendRow(self, row):
|
||||
self.rows.append(listToStr(row))
|
||||
self.rows_cssclasses.append(['' for e in row])
|
||||
|
||||
def getCellValue(row, col):
|
||||
if row < 0 or col < 0 or\
|
||||
row >= len(self.rows) or col >= len(self.cols):
|
||||
raise ValueError('Invalid indices')
|
||||
|
||||
return self.rows[row][col]
|
||||
|
||||
def setCellValue(row, col, value):
|
||||
if row < 0 or col < 0 or\
|
||||
row >= len(self.rows) or col >= len(self.cols):
|
||||
raise ValueError('Invalid indices')
|
||||
|
||||
return self.rows[row][col]
|
||||
|
||||
def setCellCSSClass(row, col, value):
|
||||
if row < 0 or col < 0 or\
|
||||
row >= len(self.rows) or col >= len(self.cols):
|
||||
raise ValueError('Invalid indices')
|
||||
|
||||
self.rows_cssclasses[row][col] = value
|
||||
|
||||
def setRowCSSClass(row, value):
|
||||
if row < 0 or row >= len(self.rows):
|
||||
raise ValueError('Invalid indice')
|
||||
|
||||
for i in range(0, self.rows_cssclasses[row]):
|
||||
self.rows_cssclasses[row][i] = value
|
||||
|
||||
def build(self, f):
|
||||
f.write('<table>')
|
||||
f.write('<tr>')
|
||||
for title in self.cols:
|
||||
f.write('<th>%s</th>' % (title))
|
||||
f.write('</tr>')
|
||||
for row in self.rows:
|
||||
f.write('<tr>')
|
||||
for v in row:
|
||||
f.write('<td>%s</td>' % (v))
|
||||
f.write('</tr>')
|
||||
f.write('</table>')
|
||||
if not self.html:
|
||||
html = '<table>'
|
||||
html += '<tr>'
|
||||
for title in self.cols:
|
||||
html += '<th>%s</th>' % (title)
|
||||
html += '</tr>'
|
||||
for row in self.rows:
|
||||
html += '<tr>'
|
||||
for v in row:
|
||||
html += '<td>%s</td>' % (v)
|
||||
html += '</tr>'
|
||||
html += '</table>'
|
||||
self.html = html
|
||||
|
||||
super(DisplayHTMLBlockTable, self).build(f)
|
||||
|
||||
class DisplayHTMLPage(object):
|
||||
|
||||
@@ -53,6 +115,12 @@ class DisplayHTMLPage(object):
|
||||
def getFilename(self):
|
||||
return self.filename;
|
||||
|
||||
def getBlock(self, title):
|
||||
for b in self.blocks:
|
||||
if title == b.getTitle():
|
||||
return b
|
||||
return None
|
||||
|
||||
def appendBlock(self, block):
|
||||
self.blocks.append(block)
|
||||
|
||||
@@ -64,7 +132,13 @@ class DisplayHTMLPage(object):
|
||||
os.makedirs(base)
|
||||
|
||||
f = open(filename, 'w')
|
||||
f.write('<html><title>%s</title><body>' % (self.title))
|
||||
f.write('<!DOCTYPE html>')
|
||||
f.write('<html>')
|
||||
f.write('<head>')
|
||||
f.write('<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />')
|
||||
if self.title:
|
||||
f.write('<title>%s</title>' % (self.title))
|
||||
f.write('</head>')
|
||||
for block in self.blocks:
|
||||
block.build(f)
|
||||
f.write('</body></html>')
|
||||
|
||||
Reference in New Issue
Block a user