Attachment 'simple_cms.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 """
   3     MoinMoin - simple_cms theme
   4 
   5     @copyright: 2003-2009 Nir Soffer, Thomas Waldmann, Gareth Lee
   6     @license: GNU GPL, see COPYING for details.
   7 """
   8 
   9 from MoinMoin import wikiutil
  10 from MoinMoin.theme import ThemeBase
  11 
  12 class Theme(ThemeBase):
  13 
  14     name = "simple_cms"
  15 
  16     # This method produces a simplified search form which only allows full text search
  17     def simple_searchform(self, d):
  18         """
  19         assemble HTML code for the search forms
  20 
  21         @param d: parameter dictionary
  22         @rtype: unicode
  23         @return: search form html
  24         """
  25         _ = self.request.getText
  26         form = self.request.form
  27         updates = {
  28             'search_label': _('Search:'),
  29             'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
  30             'search_full_label': _('Search'),
  31             'baseurl': self.request.getScriptname(),
  32             'pagename_quoted': wikiutil.quoteWikinameURL(d['page'].page_name),
  33             }
  34         d.update(updates)
  35 
  36         html = u'''
  37 <form id="searchform" method="get" action="%(baseurl)s/%(pagename_quoted)s">
  38 <div>
  39 <input type="hidden" name="action" value="fullsearch">
  40 <input type="hidden" name="context" value="180">
  41 <label for="searchinput">%(search_label)s</label>
  42 <input id="searchinput" type="text" name="value" value="%(search_value)s" size="20"
  43     onfocus="searchFocus(this)" onblur="searchBlur(this)"
  44     onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
  45 <input id="fullsearch" name="fullsearch" type="submit"
  46     value="%(search_full_label)s" alt="Search Full Text">
  47 </div>
  48 </form>
  49 <script type="text/javascript">
  50 <!--// Initialize search form
  51 var f = document.getElementById('searchform');
  52 f.getElementsByTagName('label')[0].style.display = 'none';
  53 var e = document.getElementById('searchinput');
  54 searchChange(e);
  55 searchBlur(e);
  56 //-->
  57 </script>
  58 ''' % d
  59         return html
  60 
  61     def navibar(self, d):
  62         """ Assemble the navibar
  63 
  64         @param d: parameter dictionary
  65         @rtype: unicode
  66         @return: navibar html
  67         """
  68 
  69         request = self.request
  70         found = {} # pages we found. prevent duplicates
  71         items = [] # navibar items
  72         item = u'<li class="%s">%s</li>'
  73         current = d['page_name']
  74 
  75         # Process config navi_bar
  76         if request.cfg.navi_bar:
  77             for text in request.cfg.navi_bar:
  78                 pagename, link = self.splitNavilink(text)
  79                 if pagename == current:
  80                     cls = 'wikilink current'
  81                 else:
  82                     cls = 'wikilink'
  83                 items.append(item % (cls, link))
  84                 found[pagename] = 1
  85 
  86         # Assemble html
  87         items = u''.join(items)
  88         html = u'''
  89 <ul id="navibar">
  90 %s
  91 </ul>
  92 ''' % items
  93         return html
  94 
  95     def header(self, d, **kw):
  96         """ Assemble wiki header
  97 
  98         @param d: parameter dictionary
  99         @rtype: unicode
 100         @return: page header html
 101         """
 102         if self.request.user.valid and self.request.user.name:
 103             html = [
 104                 # Pre header custom html
 105                 self.emit_custom_html(self.cfg.page_header1),
 106 
 107                 # Header
 108                 u'<div id="header">',
 109                 self.logo(),
 110                 self.searchform(d),
 111                 self.username(d),
 112                 u'<div id="locationline">',
 113                 self.interwiki(d),
 114                 self.title(d),
 115                 u'</div>',
 116                 self.trail(d),
 117                 self.navibar(d),
 118                 #u'<hr id="pageline">',
 119                 u'<div id="pageline"><hr style="display:none;"></div>',
 120                 self.msg(d),
 121                 self.editbar(d),
 122                 u'</div>',
 123 
 124                 # Post header custom html (not recommended)
 125                 self.emit_custom_html(self.cfg.page_header2),
 126 
 127                 # Start of page
 128                 self.startPage(),
 129             ]
 130         else:
 131             html = [
 132                 # Pre header custom html
 133                 self.emit_custom_html(self.cfg.page_header1),
 134 
 135                 # Header
 136                 u'<div id="header">',
 137                 self.logo(),
 138                 self.simple_searchform(d),
 139                 #self.username(d),
 140                 u'<div id="locationline">',
 141                 self.interwiki(d),
 142                 self.title(d),
 143                 u'</div>',
 144                 #self.trail(d),
 145                 self.navibar(d),
 146                 #u'<hr id="pageline">',
 147                 u'<div id="pageline"><hr style="display:none;"></div>',
 148                 self.msg(d),
 149                 #self.editbar(d),
 150                 u'</div>',
 151 
 152                 # Post header custom html (not recommended)
 153                 self.emit_custom_html(self.cfg.page_header2),
 154 
 155                 # Start of page
 156                 self.startPage(),
 157             ]
 158 
 159         return u'\n'.join(html)
 160 
 161     def editorheader(self, d, **kw):
 162         """ Assemble wiki header for editor
 163 
 164         @param d: parameter dictionary
 165         @rtype: unicode
 166         @return: page header html
 167         """
 168         html = [
 169             # Pre header custom html
 170             self.emit_custom_html(self.cfg.page_header1),
 171 
 172             # Header
 173             u'<div id="header">',
 174             self.title(d),
 175             self.msg(d),
 176             u'</div>',
 177 
 178             # Post header custom html (not recommended)
 179             self.emit_custom_html(self.cfg.page_header2),
 180 
 181             # Start of page
 182             self.startPage(),
 183         ]
 184         return u'\n'.join(html)
 185 
 186     def footer(self, d, **keywords):
 187         """ Assemble wiki footer
 188 
 189         @param d: parameter dictionary
 190         @keyword ...:...
 191         @rtype: unicode
 192         @return: page footer html
 193         """
 194         page = d['page']
 195         if self.request.user.valid and self.request.user.name:
 196             html = [
 197                 # End of page
 198                 self.pageinfo(page),
 199                 self.endPage(),
 200 
 201                 # Pre footer custom html (not recommended!)
 202                 self.emit_custom_html(self.cfg.page_footer1),
 203 
 204                 # Footer
 205                 u'<div id="footer">',
 206                 self.editbar(d),
 207                 u'<div id="pageline"><hr style="display:none;"></div>',
 208                 self.credits(d),
 209                 self.showversion(d, **keywords),
 210                 u'</div>',
 211 
 212                 # Post footer custom html
 213                 self.emit_custom_html(self.cfg.page_footer2),
 214                 ]
 215         else:
 216             html = [
 217                 # End of page
 218                 self.pageinfo(page),
 219                 self.endPage(),
 220 
 221                 # Pre footer custom html (not recommended!)
 222                 self.emit_custom_html(self.cfg.page_footer1),
 223 
 224                 # Footer
 225                 u'<div id="footer">',
 226                 #self.editbar(d),
 227                 u'<div id="pageline"><hr style="display:none;"></div>',
 228                 self.credits(d),
 229                 self.showversion(d, **keywords),
 230                 u'</div>',
 231 
 232                 # Post footer custom html
 233                 self.emit_custom_html(self.cfg.page_footer2),
 234                 ]
 235 
 236         return u'\n'.join(html)
 237 
 238 
 239 def execute(request):
 240     """
 241     Generate and return a theme object
 242 
 243     @param request: the request object
 244     @rtype: MoinTheme
 245     @return: Theme object
 246     """
 247     return Theme(request)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2009-11-20 05:39:21, 7.2 KB) [[attachment:simple_cms.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.