# -*- coding: iso-8859-1 -*- """ MoinMoin - c3hl theme @copyright: 2010 C3-HL @license: GNU GPL, see COPYING for details. """ from MoinMoin.theme import ThemeBase from MoinMoin import wikiutil from MoinMoin.Page import Page class Theme(ThemeBase): name = "c3hl" _ = lambda x: x # We don't have gettext at this moment, so we fake it icons = { # key alt icon filename w h # FileAttach 'attach': ("%(attach_count)s", "moin-attach.png", 16, 16), 'info': ("[INFO]", "moin-info.png", 16, 16), 'attachimg': (_("[ATTACH]"), "attach.png", 32, 32), # RecentChanges 'rss': (_("[RSS]"), "moin-rss.png", 16, 16), 'deleted': (_("[DELETED]"), "moin-deleted.png", 16, 16), 'updated': (_("[UPDATED]"), "moin-updated.png", 16, 16), 'renamed': (_("[RENAMED]"), "moin-renamed.png", 16, 16), 'conflict': (_("[CONFLICT]"), "moin-conflict.png", 16, 16), 'new': (_("[NEW]"), "moin-new.png", 16, 16), 'diffrc': (_("[DIFF]"), "moin-diff.png", 16, 16), # General 'bottom': (_("[BOTTOM]"), "moin-bottom.png", 16, 16), 'top': (_("[TOP]"), "moin-top.png", 16, 16), 'www': ("[WWW]", "moin-www.png", 16, 16), 'mailto': ("[MAILTO]", "moin-email.png", 16, 16), 'news': ("[NEWS]", "moin-news.png", 16, 16), 'telnet': ("[TELNET]", "moin-telnet.png", 16, 16), 'ftp': ("[FTP]", "moin-ftp.png", 16, 16), 'file': ("[FILE]", "moin-ftp.png", 16, 16), # search forms 'searchbutton': ("[?]", "moin-search.png", 16, 16), 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16), # smileys (this is CONTENT, but good looking smileys depend on looking # adapted to the theme background color and theme style in general) #vvv == vvv this must be the same for GUI editor converter 'X-(': ("X-(", 'angry.png', 16, 16), ':D': (":D", 'biggrin.png', 16, 16), '<:(': ("<:(", 'frown.png', 16, 16), ':o': (":o", 'redface.png', 16, 16), ':(': (":(", 'sad.png', 16, 16), ':)': (":)", 'smile.png', 16, 16), 'B)': ("B)", 'smile2.png', 16, 16), ':))': (":))", 'smile3.png', 16, 16), ';)': (";)", 'smile4.png', 16, 16), '/!\\': ("/!\\", 'alert.png', 16, 16), '': ("", 'attention.png', 16, 16), '(!)': ("(!)", 'idea.png', 16, 16), ':-?': (":-?", 'tongue.png', 16, 16), ':\\': (":\\", 'ohwell.png', 16, 16), '>:>': (">:>", 'devil.png', 16, 16), '|)': ("|)", 'tired.png', 16, 16), ':-(': (":-(", 'sad.png', 16, 16), ':-)': (":-)", 'smile.png', 16, 16), 'B-)': ("B-)", 'smile2.png', 16, 16), ':-))': (":-))", 'smile3.png', 16, 16), ';-)': (";-)", 'smile4.png', 16, 16), '|-)': ("|-)", 'tired.png', 16, 16), '(./)': ("(./)", 'checkmark.png', 16, 16), '{OK}': ("{OK}", 'thumbs-up.png', 16, 16), '{X}': ("{X}", 'icon-error.png', 16, 16), '{i}': ("{i}", 'icon-info.png', 16, 16), '{1}': ("{1}", 'prio1.png', 15, 13), '{2}': ("{2}", 'prio2.png', 15, 13), '{3}': ("{3}", 'prio3.png', 15, 13), '{*}': ("{*}", 'star_on.png', 16, 16), '{o}': ("{o}", 'star_off.png', 16, 16), } del _ def shouldShowEditbar(self, page): if not (page.isWritable() and self.request.user.may.write(page.page_name)): return False return ThemeBase.shouldShowEditbar(self, page) def topnav(self, d): request = self.request links = [] for pagename in request.cfg.topnav: page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) links.append(link) return '
%s
' % ' | '.join(links) def parentlinks(self, d): _ = self.request.getText segments = d['page_name'].split('/') if len(segments) <= 1: return '' content = [] curpage = '' for s in segments[:-1]: curpage += s content.append(Page(self.request, curpage).link_to(self.request, s)) curpage += '/' path_html = u' | '.join(content) return u'' % path_html def remoteip(self): nologging = u'Dieser Server loggt keine IP-Adressen.' addr = self.request.environ['REMOTE_ADDR'] return u'
Deine IP-Adresse ist %s
%s
' % (addr, nologging) return '' def header(self, d, **kw): """ Assemble wiki header @param d: parameter dictionary @rtype: unicode @return: page header html """ html = [ # Pre header custom html self.emit_custom_html(self.cfg.page_header1), # Header u'', u'
', u'
', u'
', self.logo(), u'
', u'
', u'', u'
', self.parentlinks(d), #u'

', #self.title_with_separators(d), #u'

', # Post header custom html (not recommended) self.emit_custom_html(self.cfg.page_header2), # Start of page self.startPage(), ] return u'\n'.join(html) def editorheader(self, d, **kw): """ Assemble wiki header for editor @param d: parameter dictionary @rtype: unicode @return: page header html """ html = [ # Pre header custom html self.emit_custom_html(self.cfg.page_header1), # Header u'
', u'', u'
', u'

', self.title_with_separators(d), u'

', # Post header custom html (not recommended) self.emit_custom_html(self.cfg.page_header2), # Start of page self.startPage(), ] return u'\n'.join(html) def footer(self, d, **keywords): """ Assemble wiki footer @param d: parameter dictionary @keyword ...:... @rtype: unicode @return: page footer html """ page = d['page'] html = [ # End of page self.pageinfo(page), self.endPage(), # Pre footer custom html (not recommended!) self.emit_custom_html(self.cfg.page_footer1), u'
', # Footer u'', u'
', # Post footer custom html self.emit_custom_html(self.cfg.page_footer2), ] return u'\n'.join(html) def username(self, d): """ Assemble the username / userprefs link @param d: parameter dictionary @rtype: unicode @return: username html """ request = self.request _ = request.getText userlinks = [] # Add username/homepage link for registered users. We don't care # if it exists, the user can create it. if request.user.valid and request.user.name: interwiki = wikiutil.getInterwikiHomePage(request) name = request.user.name aliasname = request.user.aliasname if not aliasname: aliasname = name title = "%s @ %s" % (aliasname, interwiki[0]) # link to (interwiki) user homepage homelink = (request.formatter.interwikilink(1, title=title, id="userhome", generated=True, *interwiki) + request.formatter.text(name) + request.formatter.interwikilink(0, title=title, id="userhome", *interwiki)) userlinks.append(homelink) # link to userprefs action if 'userprefs' not in self.request.cfg.actions_excluded: userlinks.append(d['page'].link_to(request, text=_('Settings'), querystr={'action': 'userprefs'}, id='userprefs', rel='nofollow')) if request.user.valid: if request.user.auth_method in request.cfg.auth_can_logout: userlinks.append(d['page'].link_to(request, text=_('Logout'), querystr={'action': 'logout', 'logout': 'logout'}, id='logout', rel='nofollow')) else: query = {'action': 'login'} # special direct-login link if the auth methods want no input if request.cfg.auth_login_inputs == ['special_no_input']: query['login'] = '1' if request.cfg.auth_have_login: userlinks.append(d['page'].link_to(request, text=_("Login"), querystr=query, id='login', rel='nofollow')) userlinks.append('Anmelden mit Client-Zertifikat' % (request.cfg.clientcerthost, d['page'].url(request))) userlinks_html = u' | '.join(userlinks) html = u'
%s
' % userlinks_html return html def trail(self, d): """ Assemble page trail @param d: parameter dictionary @rtype: unicode @return: trail html """ request = self.request user = request.user html = '' if not user.valid or user.show_page_trail: trail = user.getTrail() if trail: items = [] for pagename in trail: try: interwiki, page = wikiutil.split_interwiki(pagename) if interwiki != request.cfg.interwikiname and interwiki != 'Self': link = (self.request.formatter.interwikilink(True, interwiki, page) + self.shortenPagename(page) + self.request.formatter.interwikilink(False, interwiki, page)) items.append(link) continue else: pagename = page except ValueError: pass page = Page(request, pagename) title = page.split_title() title = self.shortenPagename(title) link = page.link_to(request, title) items.append(link) html = u'
%s
' % u' » '.join(items) return html def interwiki(self, d): """ Assemble the interwiki name display, linking to page_front_page @param d: parameter dictionary @rtype: string @return: interwiki html """ if self.request.cfg.show_interwiki: page = wikiutil.getFrontPage(self.request) text = self.request.cfg.interwikiname or 'Self' link = page.link_to(self.request, text=text, rel='nofollow') html = u'%s: ' % link else: html = u'' return html def execute(request): """ Generate and return a theme object @param request: the request object @rtype: MoinTheme @return: Theme object """ return Theme(request)