Enable the header logo 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 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.menu(d),
87             u'</div>',
88
89             # Post header custom html (not recommended)
90             self.emit_custom_html(self.cfg.page_header2),
91
92             # Start of page
93             self.startPage(d),
94             self.msg(d),
95         ]
96         return u'\n'.join(html)
97
98     def footer(self, d, **keywords):
99         """ Assemble wiki footer
100         
101         @param d: parameter dictionary
102         @keyword ...:...
103         @rtype: unicode
104         @return: page footer html
105         """
106         page = d['page']
107         html = [
108             # End of page
109             self.endPage(d),
110
111             # Pre footer custom html (not recommended!)
112             self.emit_custom_html(self.cfg.page_footer1),
113
114             # Footer
115             u'<div id="footer">',
116             self.username(d),
117             self.pageinfo(page),
118             self.searchform(d),
119             #self.editbar(d),
120             #self.credits(d),
121             #self.showversion(d, **keywords),
122             u'</div>',
123
124             # Post footer custom html
125             self.emit_custom_html(self.cfg.page_footer2),
126             ]
127         return u'\n'.join(html)
128
129     def menu(self, d):
130         """ Assemble a "main" menu
131             
132             @param d: parameter dictionary
133             @rtype:   unicode
134             @return: menu html
135         """
136         items = Page(self.request, 'Site/Menu').data.split('\n')
137         
138         html = '<ul id="menubar">'
139
140         for item in items:
141             if (not item.startswith("#")):
142                 (pagename, link) = self.splitNavilink(item)
143                 html = html + ("<li class=\"menulink\">%s</li>" % link)
144         
145         html = html + '</ul>'
146
147         return html
148
149     def theme_script(self, name):
150         """ Format script html from this theme's static dir """
151         src = '%s/%s/js/%s.js' % (self.request.cfg.url_prefix_static, self.name, name)
152         return '<script type="text/javascript" src="%s"></script>' % src
153
154     def pageinfo(self, page):
155         """ Output page name and "last modified". This overwrites the pageinfo
156         from ThemeBase to hide the username, which is useless and always
157         produces a link to the non-existing homepage of the last editor. """
158         _ = self.request.getText
159         html = ''
160         if self.shouldShowPageinfo(page):
161             info = page.lastEditInfo()
162             if info:
163                 info = _("last modified %(time)s") % info
164                 pagename = page.page_name
165                 info = "%s  (%s)" % (wikiutil.escape(pagename), info)
166                 html = '<p id="pageinfo" class="info"%(lang)s>%(info)s</p>\n' % {
167                     'lang': self.ui_lang_attr(),
168                     'info': info
169                     }
170         return html
171
172     def startPage(self, d):
173         html = ThemeBase.startPage(self)
174         if d['page'].page_name != 'Site':
175             html += u'<div id="pagetop"></div>\n'
176             html += u'<div id="pagemiddle">'
177         return html
178
179     def endPage(self, d):
180         if d['page'].page_name != 'Site':
181             html = u'</div><!-- #pagemiddle -->'
182             html += u'<div id=pagebottom></div>'
183             html += u'</div>'
184         else:
185             html = u'</div>'
186         #html += ThemeBase.endPage(self)
187         return html
188
189 def execute(request):
190     """
191     Generate and return a theme object
192         
193     @param request: the request object
194     @rtype: MoinTheme
195     @return: Theme object
196     """
197     return Theme(request)
198
199 # vim: set sw=4 sts=4 expandtab: