1 # -*- coding: iso-8859-1 -*- 2 3 """ 4 MoinMoin - MercurialWiki theme 5 @copyright: 2009, 2010 Paul Boddie <paul@boddie.org.uk> 6 @copyright: (portions) 2003-2008 MoinMoin:ThomasWaldmann, 2003-2005 Nir Soffer 7 @license: GNU GPL (v2 or later), see COPYING.txt for details. 8 """ 9 10 from MoinMoin.theme import ThemeBase 11 from MoinMoin import i18n 12 from MoinMoin import wikiutil 13 from MoinMoin import version 14 from MoinMoin.Page import Page 15 import re 16 17 class Theme(ThemeBase): 18 19 name = "mercurialwiki" 20 21 # Icon definitions from the modernized theme... 22 23 _ = lambda x: x # We don't have gettext at this moment, so we fake it 24 icons = { 25 # key alt icon filename w h 26 # FileAttach 27 'attach': ("%(attach_count)s", "moin-attach.png", 16, 16), 28 'info': ("[INFO]", "moin-info.png", 16, 16), 29 'attachimg': (_("[ATTACH]"), "attach.png", 32, 32), 30 # RecentChanges 31 'rss': (_("[RSS]"), "moin-rss.png", 16, 16), 32 'deleted': (_("[DELETED]"), "moin-deleted.png", 16, 16), 33 'updated': (_("[UPDATED]"), "moin-updated.png", 16, 16), 34 'renamed': (_("[RENAMED]"), "moin-renamed.png", 16, 16), 35 'conflict': (_("[CONFLICT]"), "moin-conflict.png", 16, 16), 36 'new': (_("[NEW]"), "moin-new.png", 16, 16), 37 'diffrc': (_("[DIFF]"), "moin-diff.png", 16, 16), 38 # General 39 'bottom': (_("[BOTTOM]"), "moin-bottom.png", 16, 16), 40 'top': (_("[TOP]"), "moin-top.png", 16, 16), 41 'www': ("[WWW]", "moin-www.png", 16, 16), 42 'mailto': ("[MAILTO]", "moin-email.png", 16, 16), 43 'news': ("[NEWS]", "moin-news.png", 16, 16), 44 'telnet': ("[TELNET]", "moin-telnet.png", 16, 16), 45 'ftp': ("[FTP]", "moin-ftp.png", 16, 16), 46 'file': ("[FILE]", "moin-ftp.png", 16, 16), 47 # search forms 48 'searchbutton': ("[?]", "moin-search.png", 16, 16), 49 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16), 50 51 # smileys (this is CONTENT, but good looking smileys depend on looking 52 # adapted to the theme background color and theme style in general) 53 #vvv == vvv this must be the same for GUI editor converter 54 'X-(': ("X-(", 'angry.png', 16, 16), 55 ':D': (":D", 'biggrin.png', 16, 16), 56 '<:(': ("<:(", 'frown.png', 16, 16), 57 ':o': (":o", 'redface.png', 16, 16), 58 ':(': (":(", 'sad.png', 16, 16), 59 ':)': (":)", 'smile.png', 16, 16), 60 'B)': ("B)", 'smile2.png', 16, 16), 61 ':))': (":))", 'smile3.png', 16, 16), 62 ';)': (";)", 'smile4.png', 16, 16), 63 '/!\\': ("/!\\", 'alert.png', 16, 16), 64 '<!>': ("<!>", 'attention.png', 16, 16), 65 '(!)': ("(!)", 'idea.png', 16, 16), 66 ':-?': (":-?", 'tongue.png', 16, 16), 67 ':\\': (":\\", 'ohwell.png', 16, 16), 68 '>:>': (">:>", 'devil.png', 16, 16), 69 '|)': ("|)", 'tired.png', 16, 16), 70 ':-(': (":-(", 'sad.png', 16, 16), 71 ':-)': (":-)", 'smile.png', 16, 16), 72 'B-)': ("B-)", 'smile2.png', 16, 16), 73 ':-))': (":-))", 'smile3.png', 16, 16), 74 ';-)': (";-)", 'smile4.png', 16, 16), 75 '|-)': ("|-)", 'tired.png', 16, 16), 76 '(./)': ("(./)", 'checkmark.png', 16, 16), 77 '{OK}': ("{OK}", 'thumbs-up.png', 16, 16), 78 '{X}': ("{X}", 'icon-error.png', 16, 16), 79 '{i}': ("{i}", 'icon-info.png', 16, 16), 80 '{1}': ("{1}", 'prio1.png', 15, 13), 81 '{2}': ("{2}", 'prio2.png', 15, 13), 82 '{3}': ("{3}", 'prio3.png', 15, 13), 83 '{*}': ("{*}", 'star_on.png', 16, 16), 84 '{o}': ("{o}", 'star_off.png', 16, 16), 85 } 86 del _ 87 88 def header(self, d, **kw): 89 """ Assemble page header 90 91 @param d: parameter dictionary 92 @rtype: unicode 93 @return: page header html 94 """ 95 96 request = self.request 97 fmt = request.formatter 98 html = [] 99 100 # NOTE: Some pages cause section numbers to be enabled, affecting the 101 # NOTE: theme. 102 103 show_section_numbers = fmt._show_section_numbers 104 fmt._show_section_numbers = 0 105 106 # The header section. 107 108 html.append(fmt.div(on=1, attr={"id" : "header"})) 109 110 html.append(self.logo()) 111 html.append(self.searchform(d)) 112 html.append(self.navibar(d)) 113 114 html.append(fmt.div(on=0)) 115 116 # A separator. 117 118 html.append(fmt.div(on=1, attr={"class" : "pageline"})) 119 html.append(fmt.div(on=0)) 120 121 # Show any pertinent message. 122 123 html.append(self.msg(d)) 124 125 # Complete the header. 126 127 html.append(self.startPage()) 128 129 # NOTE: Some pages cause section numbers to be enabled, affecting the 130 # NOTE: theme. 131 132 fmt._show_section_numbers = show_section_numbers 133 134 return u''.join(html) 135 136 editorheader = header 137 138 def footer(self, d, **kw): 139 """ Assemble page footer 140 141 @param d: parameter dictionary 142 @rtype: unicode 143 @return: page footer html 144 """ 145 146 request = self.request 147 fmt = request.formatter 148 _ = request.getText 149 page = d["page"] 150 html = [] 151 152 # NOTE: Some pages cause section numbers to be enabled, affecting the 153 # NOTE: theme. 154 155 show_section_numbers = fmt._show_section_numbers 156 fmt._show_section_numbers = 0 157 158 # End the page. 159 160 html.append(self.endPage()) 161 162 # The footer section. 163 164 html.append(fmt.div(on=1, attr={"id" : "footer"})) 165 166 if self.shouldShowEditbar(page): 167 html.append(self.editbar(d)) 168 169 # A separator. 170 171 html.append(fmt.div(on=1, attr={"class" : "pageline"})) 172 html.append(fmt.div(on=0)) 173 174 html.append(self.credits(d)) 175 176 #html.append(self.trail(d)) 177 178 html.append(fmt.div(on=0)) 179 180 # NOTE: Some pages cause section numbers to be enabled, affecting the 181 # NOTE: theme. 182 183 fmt._show_section_numbers = show_section_numbers 184 185 return u''.join(html) 186 187 # Theme instantiation. 188 189 def execute(request): 190 """ 191 Generate and return a theme object 192 193 @param request: the request object 194 @rtype: MoinTheme 195 @return: Theme object 196 """ 197 return Theme(request) 198 199 # vim: tabstop=4 expandtab shiftwidth=4