1.1 --- a/MoinForms.py Thu Nov 07 19:55:56 2013 +0100
1.2 +++ b/MoinForms.py Thu Nov 07 23:26:32 2013 +0100
1.3 @@ -349,7 +349,16 @@
1.4 submission 'number', returning the metadata headers and field structure.
1.5 """
1.6
1.7 - f = StringIO(store[number])
1.8 + return loadFieldsFromString(store[number])
1.9 +
1.10 +def loadFieldsFromString(s):
1.11 +
1.12 + """
1.13 + Load the fields from the given string 's', returning the metadata headers
1.14 + and field structure.
1.15 + """
1.16 +
1.17 + f = StringIO(s)
1.18
1.19 headers = []
1.20 lines = []
1.21 @@ -369,7 +378,8 @@
1.22
1.23 if text:
1.24 for line in lines:
1.25 - headers.append(line.strip().split(":", 1))
1.26 + name, value = [s.strip() for s in line.split(":", 1)]
1.27 + headers.append((name, value))
1.28
1.29 # Otherwise, rewind to obtain the entire item text for field data.
1.30
1.31 @@ -548,6 +558,10 @@
1.32 acl = self.handler.getSubpageACL()
1.33 item = acl.getString() + item
1.34
1.35 + # Add a format header to the page for parsers to use.
1.36 +
1.37 + item = "#FORMAT formdata\n" + item
1.38 +
1.39 ItemStoreBase.append(self, item)
1.40
1.41 def __getitem__(self, number):
2.1 --- a/parsers/form.py Thu Nov 07 19:55:56 2013 +0100
2.2 +++ b/parsers/form.py Thu Nov 07 23:26:32 2013 +0100
2.3 @@ -2,7 +2,7 @@
2.4 """
2.5 MoinMoin - form (MoinForms)
2.6
2.7 - @copyright: 2012 by Paul Boddie <paul@boddie.org.uk>
2.8 + @copyright: 2012, 2013 by Paul Boddie <paul@boddie.org.uk>
2.9 @license: GNU GPL (v2 or later), see COPYING.txt for details.
2.10 """
2.11
2.12 @@ -38,9 +38,9 @@
2.13 def format(self, fmt, write=None):
2.14
2.15 """
2.16 - Format an event using the given formatter 'fmt'. If the 'write'
2.17 - parameter is specified, use it to write output; otherwise, write output
2.18 - using the request.
2.19 + Format a form using the given formatter 'fmt'. If the 'write' parameter
2.20 + is specified, use it to write output; otherwise, write output using the
2.21 + request.
2.22 """
2.23
2.24 formatForm(self.raw, self.request, fmt, self.attrs, write=write)
2.25 @@ -50,7 +50,7 @@
2.26 def formatForOutputType(self, mimetype, write=None):
2.27
2.28 """
2.29 - Format an event for the given 'mimetype'. If the 'write' parameter is
2.30 + Format a form for the given 'mimetype'. If the 'write' parameter is
2.31 specified, use it to write output; otherwise, write output using the
2.32 request.
2.33 """
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/parsers/formdata.py Thu Nov 07 23:26:32 2013 +0100
3.3 @@ -0,0 +1,68 @@
3.4 +# -*- coding: iso-8859-1 -*-
3.5 +"""
3.6 + MoinMoin - formdata (MoinForms)
3.7 +
3.8 + @copyright: 2013 by Paul Boddie <paul@boddie.org.uk>
3.9 + @license: GNU GPL (v2 or later), see COPYING.txt for details.
3.10 +"""
3.11 +
3.12 +from MoinMoin.Page import Page
3.13 +from MoinForms import loadFieldsFromString
3.14 +from MoinSupport import *
3.15 +
3.16 +Dependencies = ["pages"]
3.17 +
3.18 +# Parser support.
3.19 +
3.20 +class Parser:
3.21 +
3.22 + "Manipulate and display forms."
3.23 +
3.24 + Dependencies = Dependencies
3.25 + extensions = []
3.26 +
3.27 + def __init__(self, raw, request, **kw):
3.28 +
3.29 + """
3.30 + Initialise the parser with the given 'raw' data, 'request' and any
3.31 + keyword arguments that may have been supplied.
3.32 + """
3.33 +
3.34 + self.raw = raw
3.35 + self.request = request
3.36 + self.attrs = parseAttributes(kw.get("format_args", ""), False)
3.37 +
3.38 + def format(self, fmt, write=None):
3.39 +
3.40 + """
3.41 + Format the form data using the given formatter 'fmt'. If the 'write'
3.42 + parameter is specified, use it to write output; otherwise, write output
3.43 + using the request.
3.44 +
3.45 + Currently, this just writes a link to the form.
3.46 + """
3.47 +
3.48 + request = self.request
3.49 + page = request.page
3.50 + _ = fmt._
3.51 +
3.52 + number = page.page_name.rsplit("/", 1)[1]
3.53 +
3.54 + # Obtain the details of the form data.
3.55 +
3.56 + headers, data = loadFieldsFromString(self.raw)
3.57 + headers = dict(headers)
3.58 +
3.59 + form_pagename = headers.get("Form-Page")
3.60 + fragment = headers.get("Form-Fragment")
3.61 +
3.62 + write = write or request.write
3.63 +
3.64 + if form_pagename and number.isdigit():
3.65 + form_page = Page(request, form_pagename)
3.66 + query = {"fragment" : fragment, "load" : number, "action" : "MoinFormHandler"}
3.67 + write(linkToPage(request, form_page, _("Follow this link to view the form."), query, fragment))
3.68 + else:
3.69 + write(fmt.text(_("The form data does not specify the original form.")))
3.70 +
3.71 +# vim: tabstop=4 expandtab shiftwidth=4