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