X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=plugin%2Ftheme%2Fsite.py;h=c2e1659eb6dd4b155bd1769b050244319d15fea0;hb=10d80f804d8ae7a9dde2834052a27fb722449d5a;hp=e9344851be65d92f702aa69a199296f8e569cbaf;hpb=de9df7d614654bfc9399dfd3055a03833ab51f48;p=matthijs%2Fprojects%2Fwipi.git diff --git a/plugin/theme/site.py b/plugin/theme/site.py index e934485..c2e1659 100644 --- a/plugin/theme/site.py +++ b/plugin/theme/site.py @@ -1,6 +1,9 @@ # -*- coding: iso-8859-1 -*- """ - Evolution Events, website theme + MoinMoin - Generic website theme. + + @copyright: 2009+ Matthijs Kooijman + @license: GNU GPL, see COPYING for details. This theme is meant for wiki's that are meant to function as a website, meaning nothing fancy and wiki-ish (at least when you're not logged in). @@ -10,6 +13,9 @@ """ from MoinMoin.theme import ThemeBase +from MoinMoin.Page import Page +from MoinMoin import wikiutil +from StringIO import StringIO class SiteTheme(ThemeBase): @@ -24,6 +30,12 @@ class SiteTheme(ThemeBase): return ThemeBase.searchform(self, d) else: return '' + + def navibar(self, d): + if self.request.user.valid: + return ThemeBase.navibar(self, d) + else: + return '' def header(self, d, **kw): """ Assemble wiki header @@ -38,26 +50,27 @@ class SiteTheme(ThemeBase): # Header u'', # Post header custom html (not recommended) self.emit_custom_html(self.cfg.page_header2), + self.msg(d), + self.editbar(d), + # Start of page - self.startPage(), + self.startPage(d), ] return u'\n'.join(html) @@ -74,15 +87,16 @@ class SiteTheme(ThemeBase): # Header u'', # Post header custom html (not recommended) self.emit_custom_html(self.cfg.page_header2), # Start of page - self.startPage(), + self.startPage(d), + self.msg(d), ] return u'\n'.join(html) @@ -97,8 +111,7 @@ class SiteTheme(ThemeBase): page = d['page'] html = [ # End of page - self.pageinfo(page), - self.endPage(), + self.endPage(d), # Pre footer custom html (not recommended!) self.emit_custom_html(self.cfg.page_footer1), @@ -106,9 +119,12 @@ class SiteTheme(ThemeBase): # Footer u'', # Post footer custom html @@ -116,14 +132,80 @@ class SiteTheme(ThemeBase): ] return u'\n'.join(html) - -def execute(request): - """ - Generate and return a theme object - - @param request: the request object - @rtype: MoinTheme - @return: Theme object + def menu(self, d): + """ Assemble a "main" menu + + @param d: parameter dictionary + @rtype: unicode + @return: menu html + """ + menu = Page(self.request, 'Site/Menu') + return u'' % parse_wiki_page(self.request, menu) + + def theme_script(self, name): + """ Format script html from this theme's static dir """ + src = '%s/%s/js/%s.js' % (self.request.cfg.url_prefix_static, self.name, name) + return '' % src + + def pageinfo(self, page): + """ Output page name and "last modified". This overwrites the pageinfo + from ThemeBase to hide the username, which is useless and always + produces a link to the non-existing homepage of the last editor. """ + _ = self.request.getText + html = '' + if self.shouldShowPageinfo(page): + info = page.lastEditInfo() + if info: + info = _("last modified %(time)s") % info + pagename = page.page_name + info = "%s (%s)" % (wikiutil.escape(pagename), info) + html = '

%(info)s

\n' % { + 'lang': self.ui_lang_attr(), + 'info': info + } + return html + + def startPage(self, d): + # This opens up #page + html = ThemeBase.startPage(self) + html += u'
\n' + html += u'
\n' + return html + + def endPage(self, d): + html = u'
\n' + html += ThemeBase.endPage(self) + # This adds #pagebottom and closes #page + return html + +def parse_wiki_page(request, page): """ - return Theme(request) + This is an ugly hack to render a page into a string. By default, + formatters render using request.write automatically, which prevents us + from capturing the output. By disguising a StringIO buffer as a request + object, we manage to get at the rendered contents. + However, when {{{#!wiki or similar blocks are used, stuff breaks (since + that creates a second parser that doesn't get our StringIO buffer). + """ + Parser = wikiutil.searchAndImportPlugin(request.cfg, "parser", 'wiki') + # Create a stringIO buffer, to capture the output + buffer = StringIO() + # Make the buffer look like the request, since the parser writes + # directly to the request + buffer.form = request.form + buffer.getText = request.getText + buffer.cfg = request.cfg + # Create a new formatter. Since we need to set its page, we can't use + # request.formatter. + from MoinMoin.formatter.text_html import Formatter + formatter = Formatter(request) + formatter.setPage(page) + + # Create the parser and parse the page + parser = Parser(page.data, buffer) + parser.format(formatter) + # Return the captured buffer + return buffer.getvalue() + +# vim: set sw=4 sts=4 expandtab: