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 112 html.append(fmt.div(on=1, attr={"class" : "controls"})) 113 html.append(self.navibar(d).strip()) 114 html.append(self.searchform(d).strip()) 115 html.append(fmt.div(on=0)) 116 117 # A separator. 118 119 html.append(fmt.div(on=1, attr={"class" : "pageline"})) 120 html.append(fmt.div(on=0)) 121 122 html.append(self.trail(d)) 123 html.append(self.footerLink(d)) 124 html.append(self.username(d)) 125 126 html.append(fmt.div(on=0)) 127 128 # Show any pertinent message. 129 130 html.append(self.msg(d)) 131 132 # Complete the header. 133 134 html.append(self.startPage()) 135 136 # NOTE: Some pages cause section numbers to be enabled, affecting the 137 # NOTE: theme. 138 139 fmt._show_section_numbers = show_section_numbers 140 141 return u''.join(html) 142 143 editorheader = header 144 145 def footer(self, d, **kw): 146 """ Assemble page footer 147 148 @param d: parameter dictionary 149 @rtype: unicode 150 @return: page footer html 151 """ 152 153 request = self.request 154 fmt = request.formatter 155 _ = request.getText 156 page = d["page"] 157 html = [] 158 159 # NOTE: Some pages cause section numbers to be enabled, affecting the 160 # NOTE: theme. 161 162 show_section_numbers = fmt._show_section_numbers 163 fmt._show_section_numbers = 0 164 165 # End the page. 166 167 html.append(self.endPage()) 168 169 # The footer section. 170 171 html.append(fmt.div(on=1, attr={"id" : "footer"})) 172 173 if self.shouldShowEditbar(page): 174 html.append(fmt.div(on=1, attr={"class" : "controls"})) 175 html.append(self.editbar(d)) 176 html.append(fmt.div(on=0)) 177 178 # A separator. 179 180 html.append(fmt.div(on=1, attr={"class" : "pageline"})) 181 html.append(fmt.div(on=0)) 182 183 html.append(self.credits(d)) 184 185 #html.append(self.trail(d)) 186 187 html.append(fmt.div(on=0)) 188 189 # NOTE: Some pages cause section numbers to be enabled, affecting the 190 # NOTE: theme. 191 192 fmt._show_section_numbers = show_section_numbers 193 194 return u''.join(html) 195 196 def actionsMenu(self, page): 197 """ An overridden version of the actions menu 198 199 This method strips the adjacent white-space from the generated menu. 200 201 @param page: current page, Page object 202 @rtype: unicode 203 @return: actions menu html fragment 204 """ 205 206 return ThemeBase.actionsMenu(self, page).strip() 207 208 def footerLink(self, d): 209 """ Make link to the page footer 210 211 @param d: parameter dictionary 212 @rtype: unicode 213 @return: page footer link html 214 """ 215 216 request = self.request 217 fmt = request.formatter 218 html = [] 219 220 html.append(fmt.div(on=1, attr={"class" : "footer-link"})) 221 html.append(fmt.anchorlink(on=1, name="footer")) 222 html.append("↓") 223 html.append(fmt.anchorlink(on=0)) 224 html.append(fmt.div(on=0)) 225 226 return u''.join(html) 227 228 # Theme instantiation. 229 230 def execute(request): 231 """ 232 Generate and return a theme object 233 234 @param request: the request object 235 @rtype: MoinTheme 236 @return: Theme object 237 """ 238 return Theme(request) 239 240 # vim: tabstop=4 expandtab shiftwidth=4