Reorder some stuff in 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 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.trail(d),
59             u'</div>',
60
61             # Post header custom html (not recommended)
62             self.emit_custom_html(self.cfg.page_header2),
63
64             # Start of page
65             self.startPage(),
66             self.msg(d),
67         ]
68         return u'\n'.join(html)
69
70     def editorheader(self, d, **kw):
71         """ Assemble wiki header for editor
72         
73         @param d: parameter dictionary
74         @rtype: unicode
75         @return: page header html
76         """
77         html = [
78             # Pre header custom html
79             self.emit_custom_html(self.cfg.page_header1),
80
81             # Header
82             u'<div id="header">',
83             self.menu(d),
84             u'</div>',
85
86             # Post header custom html (not recommended)
87             self.emit_custom_html(self.cfg.page_header2),
88
89             # Start of page
90             self.startPage(),
91             self.msg(d),
92         ]
93         return u'\n'.join(html)
94
95     def footer(self, d, **keywords):
96         """ Assemble wiki footer
97         
98         @param d: parameter dictionary
99         @keyword ...:...
100         @rtype: unicode
101         @return: page footer html
102         """
103         page = d['page']
104         html = [
105             # End of page
106             self.pageinfo(page),
107             self.endPage(),
108
109             # Pre footer custom html (not recommended!)
110             self.emit_custom_html(self.cfg.page_footer1),
111
112             # Footer
113             u'<div id="footer">',
114             self.searchform(d),
115             self.username(d),
116             self.editbar(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 theme_script(self, name):
148         """ Format script html from this theme's static dir """
149         src = '%s/%s/js/%s.js' % (self.request.cfg.url_prefix_static, self.name, name)
150         return '<script type="text/javascript" src="%s"></script>' % src
151
152 def execute(request):
153     """
154     Generate and return a theme object
155         
156     @param request: the request object
157     @rtype: MoinTheme
158     @return: Theme object
159     """
160     return Theme(request)
161