Cleanup
[kiosk.git] / page_builder.py
1 import sys
2
3
4 class page_builder(object):
5     LAYOUT_AUTO = 0
6     LAYOUT_ONE_ITEM = 1
7     LAYOUT_FOUR_ITEMS = 2
8     LAYOUT_MANY_ITEMS = 3
9     LAYOUT_TEXT_ONE_COLUMN = 4
10     LAYOUT_TEXT_TWO_COLUMNS = 5
11
12     def __init__(self):
13         self.title = None
14         self.style = ""
15         self.layout = page_builder.LAYOUT_AUTO
16         self.items = []
17         self.debug_info = None
18         self.custom_html = None
19
20     def set_layout(self, layout):
21         self.layout = layout
22         return self
23
24     def set_title(self, title):
25         self.title = title
26         return self
27
28     def set_style(self, style):
29         self.style = style
30         return self
31
32     def add_item(self, item):
33         self.items.append(item)
34         return self
35
36     def set_debug_info(self, debug_info):
37         self.debug_info = debug_info
38         return self
39
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
45         else:
46             self.layout = page_builder.LAYOUT_MANY_ITEMS
47
48     def __render_custom_html(self, f):
49         if self.custom_html is not None:
50             f.write(self.custom_html)
51
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:
57             f.write(self.style)
58
59     def __render_footer(self, f):
60         f.write("</TR>\n</TABLE>\n")
61
62     def render_html(self, f):
63         if self.layout == page_builder.LAYOUT_AUTO or self.layout is None:
64             self.__pick_layout()
65         self.__render_custom_html(f)
66         self.__render_header(f)
67
68         items_per_row = None
69
70         if self.layout == page_builder.LAYOUT_ONE_ITEM:
71             items_per_row = 1
72
73         elif self.layout == page_builder.LAYOUT_FOUR_ITEMS:
74             items_per_row = 2
75
76         elif self.layout == page_builder.LAYOUT_MANY_ITEMS:
77             items_per_row = 3
78
79         elif self.layout == page_builder.LAYOUT_TEXT_TWO_COLUMNS:
80             items_per_row = 1
81
82         elif self.layout == page_builder.LAYOUT_TEXT_ONE_COLUMN:
83             items_per_row = 1
84
85         else:
86             print("Error, unknown layout type: %d" % self.layout)
87
88         count = 0
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)
92             count += 1
93             if count % items_per_row == 0:
94                 f.write("</TR>\n<TR>\n")
95         self.__render_footer(f)
96
97     def set_custom_html(self, html):
98         self.custom_html = html
99
100
101 # x = page_builder()
102 # x.set_title("title").add_item("item1").add_item("item2").add_item("item3").render_html(sys.stdout)