]> git.llucax.com Git - software/bife/byfe.git/blob - byfe/core.py
Added an experimental implementation of BIFE in python.
[software/bife/byfe.git] / byfe / core.py
1 # vim: set expandtab tabstop=4 shiftwidth=4:
2
3 class widget:
4     """Base widget class."""
5
6     def __init__(self, attrs = None):
7         if attrs is None:
8             attrs = {}
9         self.attrs = attrs
10
11     def __repr__(self):
12         return 'widget(attrs=' + str(self.attrs) + ')'
13
14     def render(self, userdata = None):
15         return str(self)
16
17
18 class container(widget):
19     """Base container widget class."""
20
21     def __init__(self, attrs = None, content = None):
22         widget.__init__(self, attrs)
23         self.content = []
24         if content:
25             self.content.append(content)
26
27     def __repr__(self):
28         return 'container(attrs=' + str(self.attrs) + ', content=' \
29             + str(self.content) + ')'
30
31     def __len__(self):
32         return len(self.content)
33
34     def __getitem__(self, item):
35         return self.content[item]
36
37     def __setitem__(self, item, value):
38         self.content[item] = value
39
40     def __delitem__(self, item):
41         del self.content[item]
42
43     def __contains__(self, item):
44         return item in self.content
45
46     def __iter__(self):
47         for i in self.content: yield i
48
49     def append(self, content):
50         self.content.append(content)
51
52     def extend(self, content):
53         self.content.extend(content)
54
55     def renderContent(self, userdata = None):
56         out = ''
57         for content in self.content:
58             if isinstance(content, widget):
59                 out += content.render(userdata)
60             else:
61                 out += str(content);
62         return out;
63
64
65 class fallback(container):
66     """Fallback widget to use when no specific widget is implemented."""
67
68     def __init__(self, name, attrs = None, content = None):
69         container.__init__(self, attrs, content)
70         self.name = name
71
72     def __repr__(self):
73         return 'fallback(name=\'' + str(self.name) + '\', attrs=' \
74             + str(self.attrs) + ', content=' + str(self.content) + ')'
75