91c4c262a95dceb5abe19a7bdb8e00ba2ed2807d
[matthijs/projects/wipi.git] / plugin / theme / site.py
1 # -*- coding: iso-8859-1 -*-
2 """
3     Evolution Events, website theme
4
5     This theme is meant for wiki's that are meant to function as a website,
6     meaning nothing fancy and wiki-ish (at least when you're not logged in).
7
8     This theme is meant to be subclassed. Subclasses should at least define a
9     name, and possibly override other stuff.
10 """
11
12 from MoinMoin.theme import ThemeBase
13 from MoinMoin.Page import Page
14
15 class SiteTheme(ThemeBase):
16
17     def editbar(self, d):
18         if self.request.user.valid:
19             return ThemeBase.editbar(self, d)
20         else:
21             return ''
22
23     def searchform(self, d):
24         if self.request.user.valid:
25             return ThemeBase.searchform(self, d)
26         else:
27             return ''
28     
29     def navibar(self, d):
30         if self.request.user.valid:
31             return ThemeBase.navibar(self, d)
32         else:
33             return ''
34
35     def header(self, d, **kw):
36         """ Assemble wiki header
37         
38         @param d: parameter dictionary
39         @rtype: unicode
40         @return: page header html
41         """
42         html = [
43             # Pre header custom html
44             self.emit_custom_html(self.cfg.page_header1),
45
46             # Header
47             u'<div id="header">',
48             self.menu(d),
49             #self.logo(),
50             #self.username(d),
51             #u'<div id="locationline">',
52             #self.interwiki(d),
53             #self.title(d),
54             #u'</div>',
55             self.navibar(d),
56             #u'<hr id="pageline">',
57             #u'<div id="pageline"><hr style="display:none;"></div>',
58             self.msg(d),
59             self.editbar(d),
60             self.trail(d),
61             u'</div>',
62
63             # Post header custom html (not recommended)
64             self.emit_custom_html(self.cfg.page_header2),
65
66             # Start of page
67             self.startPage(),
68         ]
69         return u'\n'.join(html)
70
71     def editorheader(self, d, **kw):
72         """ Assemble wiki header for editor
73         
74         @param d: parameter dictionary
75         @rtype: unicode
76         @return: page header html
77         """
78         html = [
79             # Pre header custom html
80             self.emit_custom_html(self.cfg.page_header1),
81
82             # Header
83             u'<div id="header">',
84             self.title(d),
85             self.msg(d),
86             u'</div>',
87
88             # Post header custom html (not recommended)
89             self.emit_custom_html(self.cfg.page_header2),
90
91             # Start of page
92             self.startPage(),
93         ]
94         return u'\n'.join(html)
95
96     def footer(self, d, **keywords):
97         """ Assemble wiki footer
98         
99         @param d: parameter dictionary
100         @keyword ...:...
101         @rtype: unicode
102         @return: page footer html
103         """
104         page = d['page']
105         html = [
106             # End of page
107             self.pageinfo(page),
108             self.endPage(),
109
110             # Pre footer custom html (not recommended!)
111             self.emit_custom_html(self.cfg.page_footer1),
112
113             # Footer
114             u'<div id="footer">',
115             self.username(d),
116             self.searchform(d),
117             #self.editbar(d),
118             #self.credits(d),
119             #self.showversion(d, **keywords),
120             u'</div>',
121
122             # Post footer custom html
123             self.emit_custom_html(self.cfg.page_footer2),
124             ]
125         return u'\n'.join(html)
126
127     def menu(self, d):
128         """ Assemble a "main menu
129             
130             @param d: parameter dictionary
131             @rtype:   unicode
132             @return: menu html
133         """
134         items = Page(self.request, 'Site/Menu').data.split('\n')
135         
136         html = '<ul id="menubar">'
137
138         for item in items:
139             if (not item.startswith("#")):
140                 (pagename, link) = self.splitNavilink(item)
141                 html = html + ("<li class=\"menulink\">%s</li>" % link)
142         
143         html = html + '</ul>'
144
145         return html
146
147 def execute(request):
148     """
149     Generate and return a theme object
150         
151     @param request: the request object
152     @rtype: MoinTheme
153     @return: Theme object
154     """
155     return Theme(request)
156