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> </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)))
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> </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
Comments
Maybe it makes the code more easily discoverable, if you just upload your version on ActionMarket/CreateNewPage instead of creating a new page.
Fixed and uploaded --SimonLnu