site: Also show the logo when editing.
[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 from MoinMoin import wikiutil
15
16 class SiteTheme(ThemeBase):
17
18     def editbar(self, d):
19         if self.request.user.valid:
20             return ThemeBase.editbar(self, d)
21         else:
22             return ''
23
24     def searchform(self, d):
25         if self.request.user.valid:
26             return ThemeBase.searchform(self, d)
27         else:
28             return ''
29     
30     def navibar(self, d):
31         if self.request.user.valid:
32             return ThemeBase.navibar(self, d)
33         else:
34             return ''
35
36     def header(self, d, **kw):
37         """ Assemble wiki header
38         
39         @param d: parameter dictionary
40         @rtype: unicode
41         @return: page header html
42         """
43         html = [
44             # Pre header custom html
45             self.emit_custom_html(self.cfg.page_header1),
46
47             # Header
48             u'<div id="header">',
49             self.logo(),
50             self.menu(d),
51             #self.username(d),
52             #u'<div id="locationline">',
53             #self.interwiki(d),
54             #self.title(d),
55             #u'</div>',
56             #self.navibar(d),
57             #u'<hr id="pageline">',
58             #u'<div id="pageline"><hr style="display:none;"></div>',
59             ##self.trail(d),
60             u'</div>',
61
62             # Post header custom html (not recommended)
63             self.emit_custom_html(self.cfg.page_header2),
64
65             self.msg(d),
66             self.editbar(d),
67
68             # Start of page
69             self.startPage(d),
70         ]
71         return u'\n'.join(html)
72
73     def editorheader(self, d, **kw):
74         """ Assemble wiki header for editor
75         
76         @param d: parameter dictionary
77         @rtype: unicode
78         @return: page header html
79         """
80         html = [
81             # Pre header custom html
82             self.emit_custom_html(self.cfg.page_header1),
83
84             # Header
85             u'<div id="header">',
86             self.logo(),
87             self.menu(d),
88             u'</div>',
89
90             # Post header custom html (not recommended)
91             self.emit_custom_html(self.cfg.page_header2),
92
93             # Start of page
94             self.startPage(d),
95             self.msg(d),
96         ]
97         return u'\n'.join(html)
98
99     def footer(self, d, **keywords):
100         """ Assemble wiki footer
101         
102         @param d: parameter dictionary
103         @keyword ...:...
104         @rtype: unicode
105         @return: page footer html
106         """
107         page = d['page']
108         html = [
109             # End of page
110             self.endPage(d),
111
112             # Pre footer custom html (not recommended!)
113             self.emit_custom_html(self.cfg.page_footer1),
114
115             # Footer
116             u'<div id="footer">',
117             self.username(d),
118             self.pageinfo(page),
119             self.searchform(d),
120             #self.editbar(d),
121             #self.credits(d),
122             #self.showversion(d, **keywords),
123             u'</div>',
124
125             # Post footer custom html
126             self.emit_custom_html(self.cfg.page_footer2),
127             ]
128         return u'\n'.join(html)
129
130     def menu(self, d):
131         """ Assemble a "main" menu
132             
133             @param d: parameter dictionary
134             @rtype:   unicode
135             @return: menu html
136         """
137         items = Page(self.request, 'Site/Menu').data.split('\n')
138         
139         html = '<ul id="menubar">'
140
141         for item in items:
142             if (not item.startswith("#")):
143                 (pagename, link) = self.splitNavilink(item)
144                 html = html + ("<li class=\"menulink\">%s</li>" % link)
145         
146         html = html + '</ul>'
147
148         return html
149
150     def theme_script(self, name):
151         """ Format script html from this theme's static dir """
152         src = '%s/%s/js/%s.js' % (self.request.cfg.url_prefix_static, self.name, name)
153         return '<script type="text/javascript" src="%s"></script>' % src
154
155     def pageinfo(self, page):
156         """ Output page name and "last modified". This overwrites the pageinfo
157         from ThemeBase to hide the username, which is useless and always
158         produces a link to the non-existing homepage of the last editor. """
159         _ = self.request.getText
160         html = ''
161         if self.shouldShowPageinfo(page):
162             info = page.lastEditInfo()
163             if info:
164                 info = _("last modified %(time)s") % info
165                 pagename = page.page_name
166                 info = "%s  (%s)" % (wikiutil.escape(pagename), info)
167                 html = '<p id="pageinfo" class="info"%(lang)s>%(info)s</p>\n' % {
168                     'lang': self.ui_lang_attr(),
169                     'info': info
170                     }
171         return html
172
173     def startPage(self, d):
174         # This opens up #page
175         html = ThemeBase.startPage(self)
176         html += u'<div id="pagetop"></div>\n'
177         html += u'<div id="pagemiddle">\n'
178         return html
179
180     def endPage(self, d):
181         html = u'</div><!-- #pagemiddle -->\n'
182         html += ThemeBase.endPage(self)
183         # This adds #pagebottom and closes #page
184         return html
185
186 def execute(request):
187     """
188     Generate and return a theme object
189         
190     @param request: the request object
191     @rtype: MoinTheme
192     @return: Theme object
193     """
194     return Theme(request)
195
196 # vim: set sw=4 sts=4 expandtab: