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