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