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