web/views/forms.py
branchstable
changeset 4668 9f82f81bf13d
parent 4662 79c0788ba7f6
child 4697 b8263d717e74
equal deleted inserted replaced
4667:6c8eccb1b695 4668:9f82f81bf13d
    56 
    56 
    57     * `fieldsets_in_order`: fieldset name sequence, to control order
    57     * `fieldsets_in_order`: fieldset name sequence, to control order
    58     """
    58     """
    59     __regid__ = 'base'
    59     __regid__ = 'base'
    60 
    60 
    61     internal_fields = ('__errorurl',) + NAV_FORM_PARAMETERS
       
    62 
    61 
    63     # attributes overrideable by subclasses or through __init__
    62     # attributes overrideable by subclasses or through __init__
    64     needs_js = ('cubicweb.ajax.js', 'cubicweb.edition.js',)
    63     needs_js = ('cubicweb.ajax.js', 'cubicweb.edition.js',)
    65     needs_css = ('cubicweb.form.css',)
    64     needs_css = ('cubicweb.form.css',)
    66     domid = 'form'
       
    67     action = None
    65     action = None
    68     onsubmit = "return freezeFormButtons('%(domid)s');"
    66     onsubmit = "return freezeFormButtons('%(domid)s');"
    69     cssclass = None
    67     cssclass = None
    70     cssstyle = None
    68     cssstyle = None
    71     cwtarget = None
    69     cwtarget = None
    72     redirect_path = None
    70     redirect_path = None
    73     copy_nav_params = False
       
    74     form_buttons = None
    71     form_buttons = None
    75     form_renderer_id = 'default'
    72     form_renderer_id = 'default'
    76     fieldsets_in_order = None
    73     fieldsets_in_order = None
    77 
       
    78     def __init__(self, req, rset=None, row=None, col=None,
       
    79                  submitmsg=None, mainform=True,
       
    80                  **kwargs):
       
    81         super(FieldsForm, self).__init__(req, rset=rset, row=row, col=col)
       
    82         self.fields = list(self.__class__._fields_)
       
    83         for key, val in kwargs.items():
       
    84             if key in NAV_FORM_PARAMETERS:
       
    85                 self.add_hidden(key, val)
       
    86             elif hasattr(self.__class__, key) and not key[0] == '_':
       
    87                 setattr(self, key, val)
       
    88             else:
       
    89                 self.cw_extra_kwargs[key] = val
       
    90             # skip other parameters, usually given for selection
       
    91             # (else write a custom class to handle them)
       
    92         if mainform:
       
    93             self.add_hidden('__errorurl', self.session_key())
       
    94             self.add_hidden('__domid', self.domid)
       
    95             self.restore_previous_post(self.session_key())
       
    96 
       
    97         # XXX why do we need two different variables (mainform and copy_nav_params ?)
       
    98         if self.copy_nav_params:
       
    99             for param in NAV_FORM_PARAMETERS:
       
   100                 if not param in kwargs:
       
   101                     value = req.form.get(param)
       
   102                     if value:
       
   103                         self.add_hidden(param, value)
       
   104         if submitmsg is not None:
       
   105             self.add_hidden('__message', submitmsg)
       
   106         if 'domid' in kwargs:# session key changed
       
   107             self.restore_previous_post(self.session_key())
       
   108 
    74 
   109     @property
    75     @property
   110     def needs_multipart(self):
    76     def needs_multipart(self):
   111         """true if the form needs enctype=multipart/form-data"""
    77         """true if the form needs enctype=multipart/form-data"""
   112         return any(field.needs_multipart for field in self.fields)
    78         return any(field.needs_multipart for field in self.fields)