1 # -*- coding: iso-8859-1 -*-
3 MoinMoin - Generic website theme.
5 @copyright: 2009+ Matthijs Kooijman
6 @license: GNU GPL, see COPYING for details.
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).
11 This theme is meant to be subclassed. Subclasses should at least define a
12 name, and possibly override other stuff.
15 from MoinMoin.theme import ThemeBase
16 from MoinMoin.Page import Page
17 from MoinMoin import wikiutil
19 class SiteTheme(ThemeBase):
22 if self.request.user.valid:
23 return ThemeBase.editbar(self, d)
27 def searchform(self, d):
28 if self.request.user.valid:
29 return ThemeBase.searchform(self, d)
34 if self.request.user.valid:
35 return ThemeBase.navibar(self, d)
39 def header(self, d, **kw):
40 """ Assemble wiki header
42 @param d: parameter dictionary
44 @return: page header html
47 # Pre header custom html
48 self.emit_custom_html(self.cfg.page_header1),
55 #u'<div id="locationline">',
60 #u'<hr id="pageline">',
61 #u'<div id="pageline"><hr style="display:none;"></div>',
65 # Post header custom html (not recommended)
66 self.emit_custom_html(self.cfg.page_header2),
74 return u'\n'.join(html)
76 def editorheader(self, d, **kw):
77 """ Assemble wiki header for editor
79 @param d: parameter dictionary
81 @return: page header html
84 # Pre header custom html
85 self.emit_custom_html(self.cfg.page_header1),
93 # Post header custom html (not recommended)
94 self.emit_custom_html(self.cfg.page_header2),
100 return u'\n'.join(html)
102 def footer(self, d, **keywords):
103 """ Assemble wiki footer
105 @param d: parameter dictionary
108 @return: page footer html
115 # Pre footer custom html (not recommended!)
116 self.emit_custom_html(self.cfg.page_footer1),
119 u'<div id="footer">',
125 #self.showversion(d, **keywords),
126 u'<div id="footerbottom"></div>',
129 # Post footer custom html
130 self.emit_custom_html(self.cfg.page_footer2),
132 return u'\n'.join(html)
135 """ Assemble a "main" menu
137 @param d: parameter dictionary
141 items = Page(self.request, 'Site/Menu').data.split('\n')
143 html = '<ul id="menubar">'
146 if (not item.startswith("#")):
147 (pagename, link) = self.splitNavilink(item)
148 html = html + ("<li class=\"menulink\">%s</li>" % link)
150 html = html + '</ul>'
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
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
165 if self.shouldShowPageinfo(page):
166 info = page.lastEditInfo()
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(),
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'
184 def endPage(self, d):
185 html = u'</div><!-- #pagemiddle -->\n'
186 html += ThemeBase.endPage(self)
187 # This adds #pagebottom and closes #page
190 # vim: set sw=4 sts=4 expandtab: