CreateNewPage for Moin 1.9

Purpose

Update the old 1.6 version for 1.9. The HTML was also updated slightly. If you don't want to use a class for the <strong> elements (currently <span class="bold"> ).

Usage

Same as the old plugin. Everything else please see that page .

Notes

I've recoded it to UTF-8 using recode ISO-8859-1..UTF-8 CreateNewPage.py .

Source and Patch

You can either patch your old plugin or use the full file.

   1 --- CreateNewPage1.6.py	2011-04-13 00:18:09.695830813 -0400
   2 +++ CreateNewPage.py	2011-04-12 23:59:31.750618438 -0400
   3 @@ -1,4 +1,4 @@
   4 -# -*- coding: iso-8859-1 -*-
   5 +# -*- coding: utf-8 -*-
   6  """
   7      MoinMoin - CreateNewPage Action
   8  
   9 @@ -48,48 +48,55 @@
  10          filter = request.cfg.cache.page_template_regex.search 
  11          results = request.rootpage.getPageList(filter=filter)
  12          results.sort()
  13 -        templates.append("<option selected>%s</option>" % '') # _('<None>')
  14 +        templates.append("<option selected=\"selected\">%s</option>" % '') # _('<None>')
  15          for result in results:
  16              templates.append("<option>%s</option>" % result)
  17  
  18          # Assemble form
  19 -        sn = request.getScriptname()
  20 -        pi = request.getPathinfo()
  21 +        sn = request.script_root
  22 +        pi = request.path
  23          action = u"%s%s" % (sn, pi)
  24          lang_attr = request.theme.ui_lang_attr()
  25  
  26          form = '''
  27 -<form action="%(action)s" method="POST">
  28 -<div class="userpref" %(lang_attr)s>
  29 -<input type="hidden" name="action" value="CreateNewPage">
  30 -<table border="0">
  31 -<tr>
  32 -<td><strong>%(template)s</strong></td>
  33 -<td> 
  34 -<select name="template" size="1">
  35 -%(templates)s
  36 -</select>
  37 -</td>
  38 -</tr>
  39 -<tr>
  40 -<td><strong>%(input)s</strong></td>
  41 -<td><input type="text" name="newpage" value="" size="36"></td>
  42 -</tr>
  43 -<tr>
  44 -<td><strong></strong></td>
  45 -<td><input type="submit" name="create" value="%(button)s"></td>
  46 -</tr>
  47 -</table>
  48 -</div>
  49 -</form>''' % { 'action': action,
  50 -               'lang_attr': lang_attr,
  51 -               'template': _('Page Template'),
  52 -               'templates': ''.join(templates),
  53 -               'input': _('Page Name'),
  54 -               'button': _('Create') }
  55 +            <form action="%(action)s" method="POST">
  56 +            <div class="userpref" lang="%(lang_attr)s">
  57 +            <input type="hidden" name="action" value="CreateNewPage" />
  58 +            <table style="border:0;">
  59 +            <tr>
  60 +            <td><span class="bold">%(template)s</span></td>
  61 +            <td> 
  62 +            <select name="template" size="1">
  63 +            %(templates)s
  64 +            </select>
  65 +            </td>
  66 +            </tr>
  67 +            <tr>
  68 +            <td><span class="bold">%(input)s</span></td>
  69 +            <td><input type="text" name="newpage" value="" size="36" /></td>
  70 +            </tr>
  71 +            <tr>
  72 +            <td>&#160;</td>
  73 +            <td><input type="submit" name="create" value="%(button)s" /></td>
  74 +            </tr>
  75 +            </table>
  76 +            </div>
  77 +            </form>''' % { 'action': action,
  78 +           'lang_attr': lang_attr,
  79 +           'template': _('Page Template'),
  80 +           'templates': ''.join(templates),
  81 +           'input': _('Page Name'),
  82 +           'button': _('Create') }
  83          
  84          # Output form
  85 -        request.emit_http_headers()
  86 +        # fixed for 1.9
  87 +        try:
  88 +            request.emit_http_headers()
  89 +        except AttributeError:
  90 +            try:
  91 +                request.http_headers()
  92 +            except AttributeError:
  93 +                pass
  94          request.theme.send_title(_('Create New Page'), pagename=self.pagename, msg=msg)
  95          request.write(request.formatter.startContent("content"))
  96          request.write(request.formatter.rawHTML(unicode(form)))
CreateNewPage1.6_to_1.9.patch
   1 # -*- coding: utf-8 -*-
   2 """
   3     MoinMoin - CreateNewPage Action
   4 
   5     XXX ToDo
   6     Provide translations for:
   7     _('Page Template')
   8     _('Page Name')
   9     _('Create')
  10 
  11     CreateNewPage partly based on NewPage action
  12     NewPage Action
  13     @copyright: 2004 Vito Miliano (vito_moinnewpagewithtemplate@perilith.com)
  14     @copyright: 2004 by Nir Soffer <nirs@freeshell.org>
  15     @copyright: 2004 Alexander Schremmer <alex AT alexanderweb DOT de>
  16 
  17     CreateNewPage Action
  18     @copyright: 2007 by Oliver Siemoneit
  19     @license: GNU GPL, see COPYING for details.
  20 """
  21 
  22 from MoinMoin import wikiutil
  23 from MoinMoin.Page import Page
  24 
  25 def execute(pagename, request):
  26     return NewPageHandler(pagename, request).handle()
  27 
  28 class NewPageHandler:
  29 
  30     def __init__(self, pagename, request):
  31         self.request = request
  32         self._ = request.getText
  33         self.pagename = pagename
  34         self.newpage = ''
  35         self.template = ''
  36 
  37     def showForm(self, msg=None):
  38         """ Assemble form and output it
  39 
  40         @rtype: -
  41         @return: - 
  42         """
  43         _ = self._
  44         request = self.request
  45 
  46         # Get available templates
  47         templates = []
  48         filter = request.cfg.cache.page_template_regex.search 
  49         results = request.rootpage.getPageList(filter=filter)
  50         results.sort()
  51         templates.append("<option selected=\"selected\">%s</option>" % '') # _('<None>')
  52         for result in results:
  53             templates.append("<option>%s</option>" % result)
  54 
  55         # Assemble form
  56         sn = request.script_root
  57         pi = request.path
  58         action = u"%s%s" % (sn, pi)
  59         lang_attr = request.theme.ui_lang_attr()
  60 
  61         form = '''
  62             <form action="%(action)s" method="POST">
  63             <div class="userpref" lang="%(lang_attr)s">
  64             <input type="hidden" name="action" value="CreateNewPage" />
  65             <table style="border:0;">
  66             <tr>
  67             <td><span class="bold">%(template)s</span></td>
  68             <td> 
  69             <select name="template" size="1">
  70             %(templates)s
  71             </select>
  72             </td>
  73             </tr>
  74             <tr>
  75             <td><span class="bold">%(input)s</span></td>
  76             <td><input type="text" name="newpage" value="" size="36" /></td>
  77             </tr>
  78             <tr>
  79             <td>&#160;</td>
  80             <td><input type="submit" name="create" value="%(button)s" /></td>
  81             </tr>
  82             </table>
  83             </div>
  84             </form>''' % { 'action': action,
  85            'lang_attr': lang_attr,
  86            'template': _('Page Template'),
  87            'templates': ''.join(templates),
  88            'input': _('Page Name'),
  89            'button': _('Create') }
  90         
  91         # Output form
  92         # fixed for 1.9
  93         try:
  94             request.emit_http_headers()
  95         except AttributeError:
  96             try:
  97                 request.http_headers()
  98             except AttributeError:
  99                 pass
 100         request.theme.send_title(_('Create New Page'), pagename=self.pagename, msg=msg)
 101         request.write(request.formatter.startContent("content"))
 102         request.write(request.formatter.rawHTML(unicode(form)))
 103         request.write(request.formatter.endContent())
 104         request.theme.send_footer(self.pagename)
 105         request.theme.send_closing_html()
 106 
 107     def checkInput(self):
 108         """ Check if input is valid 
 109 
 110         @rtype: unicode
 111         @return: error message
 112         """
 113         _ = self._
 114         self.newpage = wikiutil.escape(self.newpage.strip())
 115         self.template = wikiutil.escape(self.template.strip())
 116         if not self.newpage:
 117             return _("Cannot create a new page without a page name."
 118                      "  Please specify a page name.")
 119         page = Page(self.request, self.newpage)
 120         if not (page.isWritable() and self.request.user.may.read(self.newpage)):
 121             return _('You are not allowed to edit this page.')
 122         return ''
 123 
 124     def handle(self):
 125         request = self.request
 126         form = self.request.form
 127         # If user has pressed "create" button, process it. Otherwise show form only.
 128         if form.has_key('create'):
 129             self.newpage = form.get('newpage', [''])[0]
 130             self.template = form.get('template', [''])[0]
 131             error = self.checkInput()
 132             if error:
 133                 self.showForm(error)
 134             else:
 135                 query = {'action': 'edit', 'backto': self.pagename}
 136                 if self.template:
 137                     query['template'] = wikiutil.quoteWikinameURL(self.template)
 138                 url = Page(request, self.newpage).url(request, query, escape=0, relative=False)
 139                 self.request.http_redirect(url)
 140         else:
 141             self.showForm()            
 142         return ''
 143 
 144             
CreateNewPage_1.9.py

Comments

Maybe it makes the code more easily discoverable, if you just upload your version on ActionMarket/CreateNewPage instead of creating a new page.

MoinMoin: ActionMarket/CreateNewPage1.9 (last edited 2011-04-14 07:49:50 by SimonLnu)