Add a menu bar to the site theme.
[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 header(self, d, **kw):
30         """ Assemble wiki header
31         
32         @param d: parameter dictionary
33         @rtype: unicode
34         @return: page header html
35         """
36         html = [
37             # Pre header custom html
38             self.emit_custom_html(self.cfg.page_header1),
39
40             # Header
41             u'<div id="header">',
42             self.menu(d),
43             #self.logo(),
44             #self.username(d),
45             #u'<div id="locationline">',
46             #self.interwiki(d),
47             #self.title(d),
48             #u'</div>',
49             self.navibar(d),
50             #u'<hr id="pageline">',
51             #u'<div id="pageline"><hr style="display:none;"></div>',
52             self.msg(d),
53             self.editbar(d),
54             self.trail(d),
55             u'</div>',
56
57             # Post header custom html (not recommended)
58             self.emit_custom_html(self.cfg.page_header2),
59
60             # Start of page
61             self.startPage(),
62         ]
63         return u'\n'.join(html)
64
65     def editorheader(self, d, **kw):
66         """ Assemble wiki header for editor
67         
68         @param d: parameter dictionary
69         @rtype: unicode
70         @return: page header html
71         """
72         html = [
73             # Pre header custom html
74             self.emit_custom_html(self.cfg.page_header1),
75
76             # Header
77             u'<div id="header">',
78             self.title(d),
79             self.msg(d),
80             u'</div>',
81
82             # Post header custom html (not recommended)
83             self.emit_custom_html(self.cfg.page_header2),
84
85             # Start of page
86             self.startPage(),
87         ]
88         return u'\n'.join(html)
89
90     def footer(self, d, **keywords):
91         """ Assemble wiki footer
92         
93         @param d: parameter dictionary
94         @keyword ...:...
95         @rtype: unicode
96         @return: page footer html
97         """
98         page = d['page']
99         html = [
100             # End of page
101             self.pageinfo(page),
102             self.endPage(),
103
104             # Pre footer custom html (not recommended!)
105             self.emit_custom_html(self.cfg.page_footer1),
106
107             # Footer
108             u'<div id="footer">',
109             self.username(d),
110             self.searchform(d),
111             #self.editbar(d),
112             #self.credits(d),
113             #self.showversion(d, **keywords),
114             u'</div>',
115
116             # Post footer custom html
117             self.emit_custom_html(self.cfg.page_footer2),
118             ]
119         return u'\n'.join(html)
120
121     def menu(self, d):
122         """ Assemble a "main menu
123             
124             @param d: parameter dictionary
125             @rtype:   unicode
126             @return: menu html
127         """
128         items = Page(self.request, 'Site/Menu').data.split('\n')
129         
130         html = '<ul id="menubar">'
131
132         for item in items:
133             if (not item.startswith("#")):
134                 (pagename, link) = self.splitNavilink(item)
135                 html = html + ("<li class=\"menulink\">%s</li>" % link)
136         
137         html = html + '</ul>'
138
139         return html
140
141 def execute(request):
142     """
143     Generate and return a theme object
144         
145     @param request: the request object
146     @rtype: MoinTheme
147     @return: Theme object
148     """
149     return Theme(request)
150