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