web/views/formrenderers.py
branchstable
changeset 7408 9ad9ce340c5f
parent 6609 d73733479a3a
child 7411 238da9684f99
equal deleted inserted replaced
7407:a78cc15227ef 7408:9ad9ce340c5f
    38 from warnings import warn
    38 from warnings import warn
    39 
    39 
    40 from logilab.common import dictattr
    40 from logilab.common import dictattr
    41 from logilab.mtconverter import xml_escape
    41 from logilab.mtconverter import xml_escape
    42 
    42 
    43 from cubicweb import tags
    43 from cubicweb import tags, uilib
    44 from cubicweb.appobject import AppObject
    44 from cubicweb.appobject import AppObject
    45 from cubicweb.selectors import is_instance, yes
    45 from cubicweb.selectors import is_instance, yes
    46 from cubicweb.utils import json_dumps, support_args
    46 from cubicweb.utils import json_dumps, support_args
    47 from cubicweb.web import eid_param, formwidgets as fwdgs
    47 from cubicweb.web import eid_param, formwidgets as fwdgs
    48 
    48 
   110         self._set_options(values)
   110         self._set_options(values)
   111         form.add_media()
   111         form.add_media()
   112         data = []
   112         data = []
   113         _w = data.append
   113         _w = data.append
   114         _w(self.open_form(form, values))
   114         _w(self.open_form(form, values))
   115         if self.display_progress_div:
   115         self.render_content(_w, form, values)
   116             _w(u'<div id="progress">%s</div>' % self._cw._('validating...'))
       
   117         _w(u'\n<fieldset>\n')
       
   118         self.render_fields(_w, form, values)
       
   119         self.render_buttons(_w, form)
       
   120         _w(u'\n</fieldset>\n')
       
   121         _w(self.close_form(form, values))
   116         _w(self.close_form(form, values))
   122         errormsg = self.error_message(form)
   117         errormsg = self.error_message(form)
   123         if errormsg:
   118         if errormsg:
   124             data.insert(0, errormsg)
   119             data.insert(0, errormsg)
   125         w(''.join(data))
   120         w(''.join(data))
       
   121 
       
   122     def render_content(self, w, form, values):
       
   123         if self.display_progress_div:
       
   124             w(u'<div id="progress">%s</div>' % self._cw._('validating...'))
       
   125         w(u'\n<fieldset>\n')
       
   126         self.render_fields(w, form, values)
       
   127         self.render_buttons(w, form)
       
   128         w(u'\n</fieldset>\n')
   126 
   129 
   127     def render_label(self, form, field):
   130     def render_label(self, form, field):
   128         if field.label is None:
   131         if field.label is None:
   129             return u''
   132             return u''
   130         label = field_label(form, field)
   133         label = field_label(form, field)
   177                 if len(errors) > 1:
   180                 if len(errors) > 1:
   178                     errormsg = '<ul>%s</ul>' % errormsg
   181                     errormsg = '<ul>%s</ul>' % errormsg
   179             return u'<div class="errorMessage">%s</div>' % errormsg
   182             return u'<div class="errorMessage">%s</div>' % errormsg
   180         return u''
   183         return u''
   181 
   184 
   182     def open_form(self, form, values):
   185     def open_form(self, form, values, **attrs):
   183         if form.needs_multipart:
   186         if form.needs_multipart:
   184             enctype = u'multipart/form-data'
   187             enctype = u'multipart/form-data'
   185         else:
   188         else:
   186             enctype = u'application/x-www-form-urlencoded'
   189             enctype = u'application/x-www-form-urlencoded'
   187         tag = (u'<form action="%s" method="post" enctype="%s"' % (
   190         attrs.setdefault('enctype', enctype)
   188             xml_escape(form.form_action() or '#'), enctype))
   191         attrs.setdefault('method', 'post')
       
   192         attrs.setdefault('action', form.form_action() or '#')
   189         if form.domid:
   193         if form.domid:
   190             tag += u' id="%s"' % form.domid
   194             attrs.setdefault('id', form.domid)
   191         if form.onsubmit:
   195         if form.onsubmit:
   192             tag += u' onsubmit="%s"' % xml_escape(form.onsubmit % dictattr(form))
   196             attrs.setdefault('onsubmit',  form.onsubmit % dictattr(form))
   193         if form.cssstyle:
   197         if form.cssstyle:
   194             tag += u' style="%s"' % xml_escape(form.cssstyle)
   198             attrs.setdefault('style', form.cssstyle)
   195         if form.cssclass:
   199         if form.cssclass:
   196             tag += u' class="%s"' % xml_escape(form.cssclass)
   200             attrs.setdefault('class', form.cssclass)
   197         if form.cwtarget:
   201         if form.cwtarget:
   198             tag += u' cubicweb:target="%s"' % xml_escape(form.cwtarget)
   202             attrs.setdefault('cubicweb:target', form.cwtarget)
   199         return tag + u'>'
   203         return '<form %s>' % uilib.sgml_attributes(attrs)
   200 
   204 
   201     def close_form(self, form, values):
   205     def close_form(self, form, values):
   202         """seems dumb but important for consistency w/ close form, and necessary
   206         """seems dumb but important for consistency w/ close form, and necessary
   203         for form renderers overriding open_form to use something else or more than
   207         for form renderers overriding open_form to use something else or more than
   204         and <form>
   208         and <form>