4 class page_builder(object):
9 LAYOUT_TEXT_ONE_COLUMN = 4
10 LAYOUT_TEXT_TWO_COLUMNS = 5
15 self.layout = page_builder.LAYOUT_AUTO
17 self.debug_info = None
18 self.custom_html = None
20 def set_layout(self, layout):
24 def set_title(self, title):
28 def set_style(self, style):
32 def add_item(self, item):
33 self.items.append(item)
36 def set_debug_info(self, debug_info):
37 self.debug_info = debug_info
40 def __pick_layout(self):
41 if len(self.items) == 1:
42 self.layout = page_builder.LAYOUT_ONE_ITEM
43 elif len(self.items) <= 4:
44 self.layout = page_builder.LAYOUT_FOUR_ITEMS
46 self.layout = page_builder.LAYOUT_MANY_ITEMS
48 def __render_custom_html(self, f):
49 if self.custom_html is not None:
50 f.write(self.custom_html)
52 def __render_header(self, f):
53 if self.title is not None:
54 f.write("<H1>%s</H1>\n" % self.title)
55 f.write("<HR>\n<TABLE WIDTH=99% BORDER=0>\n<TR>\n")
56 if self.style is not None:
59 def __render_footer(self, f):
60 f.write("</TR>\n</TABLE>\n")
62 def render_html(self, f):
63 if self.layout == page_builder.LAYOUT_AUTO or self.layout is None:
65 self.__render_custom_html(f)
66 self.__render_header(f)
70 if self.layout == page_builder.LAYOUT_ONE_ITEM:
73 elif self.layout == page_builder.LAYOUT_FOUR_ITEMS:
76 elif self.layout == page_builder.LAYOUT_MANY_ITEMS:
79 elif self.layout == page_builder.LAYOUT_TEXT_TWO_COLUMNS:
82 elif self.layout == page_builder.LAYOUT_TEXT_ONE_COLUMN:
86 print("Error, unknown layout type: %d" % self.layout)
89 self.items.sort(key=len, reverse=True)
90 for item in self.items:
91 f.write('<TD WIDTH=50%% STYLE="padding: 10px;">\n%s\n</TD>\n' % item)
93 if count % items_per_row == 0:
94 f.write("</TR>\n<TR>\n")
95 self.__render_footer(f)
97 def set_custom_html(self, html):
98 self.custom_html = html
102 # x.set_title("title").add_item("item1").add_item("item2").add_item("item3").render_html(sys.stdout)