<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># -*- coding: iso-8859-1 -*-
"""
    MoinMoin - User Forms

    @copyright: 2001-2004 by Jürgen Hermann &lt;jh@web.de&gt;
    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin import wikiutil
from MoinMoin.Page import Page

#############################################################################
### Form definitions
#############################################################################

_required_attributes = ['type', 'name', 'label']

def parseDefinition(request, fielddef, fieldlist):
    """ Parse a form field definition and return the HTML markup for it
    """
    _ = request.getText

    row = '&lt;tr&gt;&lt;td nowrap="nowrap" valign="top"&gt;&amp;nbsp;%s&amp;nbsp;&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;\n'
    fields, msg = wikiutil.parseAttributes(request, fielddef)

    if not msg:
        for required in _required_attributes:
            if not fields.has_key(required):
                msg = _('Required attribute "%(attrname)s" missing')  % {
                    'attrname': required}
                break

    if msg:
        # create visible error
        result = row % (msg, fielddef)
    elif fields['type'] == '"caption"':
        # create a centered, bold italic caption
        result = '&lt;tr&gt;&lt;td colspan="2" align="center"&gt;&lt;em&gt;&lt;strong&gt;%s&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;\n' % (
            fields['label'][1:-1])
    else:
        # for submit buttons, use `label` as the value
        if fields['type'] == '"submit"':
            fields['value'] = fields['label']
            fields['label'] = ''

        # make sure user cannot use a system name
        fields['name'] = '"form_' + fields['name'][1:]
        fieldlist.append(fields['name'][1:-1])

        wrapper = ('&lt;input', '&gt;\n')
        if fields['type'] == '"textarea"':
            wrapper = ('&lt;textarea', '&gt;&lt;/textarea&gt;\n')

        result = wrapper[0]
        for key, val in fields.items():
            if key == 'label': continue
            result = '%s %s=%s' % (result, key, val)
        result = result + wrapper[1]

        #result = result + wikiutil.escape(`fields`)

        if fields['type'] == '"submit"':
            result = '&lt;tr&gt;&lt;td colspan="2" align="center"&gt;%s&lt;/td&gt;&lt;/tr&gt;\n' % result
        else:
            result = row % (fields['label'][1:-1], result)

    return result


def _get_formvalues(form):
    result = {}
    for key in form.keys():
        if key[:5] != 'form_': continue

        val = form.get(key, ["&lt;empty&gt;"])
        if type(val) is type([]):
            # Multiple username fields specified
            val = "|".join(val).replace('\r','')

        result[key] = val

    return result


def do_formtest(pagename, request):
    """ Test a user defined form.
    """
    _ = request.getText

    result = []
    for key, val in _get_formvalues(request.form).items():
        result.append('&lt;li&gt;&lt;em&gt;%s&lt;/em&gt; = %s&lt;/li&gt;' % (key.upper(), repr(wikiutil.escape(val))))
    msg = '%s&lt;ul&gt;\n%s&lt;/ul&gt;\n' % (_('Submitted form data:'), '\n'.join(result))

    Page(request, pagename).send_page(request, msg=msg)

</pre></body></html>