web/views/editforms.py
changeset 2650 18aec79ec3a3
parent 2576 4ed80b85a22a
child 2661 f8df42c9da6b
equal deleted inserted replaced
2649:5d4a943695d1 2650:18aec79ec3a3
    60         done = set()
    60         done = set()
    61         for entity in self.rset.entities():
    61         for entity in self.rset.entities():
    62             if entity.eid in done:
    62             if entity.eid in done:
    63                 continue
    63                 continue
    64             done.add(entity.eid)
    64             done.add(entity.eid)
    65             subform = self.vreg.select('forms', 'base', self.req, entity=entity,
    65             subform = self.vreg['forms'].select('base', self.req, entity=entity,
    66                                        mainform=False)
    66                                                 mainform=False)
    67             self.form_add_subform(subform)
    67             self.form_add_subform(subform)
    68 
    68 
    69 
    69 
    70 class DeleteConfFormView(FormViewMixIn, EntityView):
    70 class DeleteConfFormView(FormViewMixIn, EntityView):
    71     """form used to confirm deletion of some entities"""
    71     """form used to confirm deletion of some entities"""
    81         _ = req._
    81         _ = req._
    82         w(u'<script type="text/javascript">updateMessage(\'%s\');</script>\n'
    82         w(u'<script type="text/javascript">updateMessage(\'%s\');</script>\n'
    83           % _('this action is not reversible!'))
    83           % _('this action is not reversible!'))
    84         # XXX above message should have style of a warning
    84         # XXX above message should have style of a warning
    85         w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s) ?'))
    85         w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s) ?'))
    86         form = self.vreg.select('forms', self.id, req, rset=self.rset,
    86         form = self.vreg['forms'].select(self.id, req, rset=self.rset,
    87                                 onsubmit=onsubmit)
    87                                          onsubmit=onsubmit)
    88         w(u'<ul>\n')
    88         w(u'<ul>\n')
    89         for entity in self.rset.entities():
    89         for entity in self.rset.entities():
    90             # don't use outofcontext view or any other that may contain inline edition form
    90             # don't use outofcontext view or any other that may contain inline edition form
    91             w(u'<li>%s</li>' % tags.a(entity.view('textoutofcontext'),
    91             w(u'<li>%s</li>' % tags.a(entity.view('textoutofcontext'),
    92                                       href=entity.absolute_url()))
    92                                       href=entity.absolute_url()))
   125 
   125 
   126     def _build_landing_zone(self, lzone):
   126     def _build_landing_zone(self, lzone):
   127         return lzone or self._defaultlandingzone % {'msg' : xml_escape(self.req._(self._landingzonemsg))}
   127         return lzone or self._defaultlandingzone % {'msg' : xml_escape(self.req._(self._landingzonemsg))}
   128 
   128 
   129     def _build_renderer(self, entity, rtype, role):
   129     def _build_renderer(self, entity, rtype, role):
   130         return self.vreg.select_object('formrenderers', 'base', self.req,
   130         return self.vreg['formrenderers'].select(
   131                                        entity=entity,
   131             'base', self.req, entity=entity, display_label=False,
   132                                        display_label=False, display_help=False,
   132             display_help=False, display_fields=[(rtype, role)], table_class='',
   133                                        display_fields=[(rtype, role)],
   133             button_bar_class='buttonbar', display_progress_div=False)
   134                                        table_class='', button_bar_class='buttonbar',
       
   135                                        display_progress_div=False)
       
   136 
   134 
   137     def cell_call(self, row, col, rtype=None, role='subject',
   135     def cell_call(self, row, col, rtype=None, role='subject',
   138                   reload=False,      # controls reloading the whole page after change
   136                   reload=False,      # controls reloading the whole page after change
   139                   rvid=None,         # vid to be applied to other side of rtype
   137                   rvid=None,         # vid to be applied to other side of rtype
   140                   default=None,      # default value
   138                   default=None,      # default value
   205         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   203         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   206                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   204                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   207                     % event_data)
   205                     % event_data)
   208         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   206         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   209             entity.eid, rtype, divid)
   207             entity.eid, rtype, divid)
   210         form = self.vreg.select('forms', 'base', self.req, entity=entity,
   208         form = self.vreg['forms'].select('base', self.req, entity=entity,
   211                                 domid='%s-form' % divid, cssstyle='display: none',
   209                                          domid='%s-form' % divid, cssstyle='display: none',
   212                                 onsubmit=onsubmit, action='#',
   210                                          onsubmit=onsubmit, action='#',
   213                                 form_buttons=[SubmitButton(),
   211                                          form_buttons=[SubmitButton(),
   214                                               Button(stdmsgs.BUTTON_CANCEL,
   212                                                        Button(stdmsgs.BUTTON_CANCEL,
   215                                                      onclick=cancelclick)])
   213                                                               onclick=cancelclick)])
   216         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   214         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   217         form.append_field(field)
   215         form.append_field(field)
   218         w = self.w
   216         w = self.w
   219         w(u'<div id="%s-reledit" class="field">' % divid)
   217         w(u'<div id="%s-reledit" class="field">' % divid)
   220         w(tags.div(lzone, klass='editableField', id=divid,
   218         w(tags.div(lzone, klass='editableField', id=divid,
   241                     "%(reload)s, '%(default)s');")
   239                     "%(reload)s, '%(default)s');")
   242         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   240         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   243                    Button(stdmsgs.BUTTON_CANCEL,
   241                    Button(stdmsgs.BUTTON_CANCEL,
   244                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   242                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   245                               eid, rtype, divid))]
   243                               eid, rtype, divid))]
   246         form = self.vreg.select('forms', 'edition', self.req, rset=self.rset,
   244         form = self.vreg['forms'].select('edition', self.req, rset=self.rset,
   247                                 row=row, col=col, form_buttons=buttons,
   245                                          row=row, col=col, form_buttons=buttons,
   248                                 attrcategories=self.attrcategories,
   246                                          attrcategories=self.attrcategories,
   249                                 domid='%s-form' % divid, action='#',
   247                                          domid='%s-form' % divid, action='#',
   250                                 cssstyle='display: none',
   248                                          cssstyle='display: none',
   251                                 onsubmit=onsubmit % event_data)
   249                                          onsubmit=onsubmit % event_data)
   252         w = self.w
   250         w = self.w
   253         w(u'<div class="field">')
   251         w(u'<div class="field">')
   254         w(u'<div id="%s" style="display: inline">' % divid)
   252         w(u'<div id="%s" style="display: inline">' % divid)
   255         w(tags.div(lzone, klass='editableField',
   253         w(tags.div(lzone, klass='editableField',
   256                    onclick=self._onclick % event_data))
   254                    onclick=self._onclick % event_data))
   276         self.render_form(entity)
   274         self.render_form(entity)
   277 
   275 
   278     def render_form(self, entity):
   276     def render_form(self, entity):
   279         """fetch and render the form"""
   277         """fetch and render the form"""
   280         self.form_title(entity)
   278         self.form_title(entity)
   281         form = self.vreg.select('forms', 'edition', self.req, rset=entity.rset,
   279         form = self.vreg['forms'].select('edition', self.req, rset=entity.rset,
   282                                 row=entity.row, col=entity.col, entity=entity,
   280                                          row=entity.row, col=entity.col, entity=entity,
   283                                 submitmsg=self.submited_message())
   281                                          submitmsg=self.submited_message())
   284         self.init_form(form, entity)
   282         self.init_form(form, entity)
   285         self.w(form.form_render(formvid=u'edition'))
   283         self.w(form.form_render(formvid=u'edition'))
   286 
   284 
   287     def init_form(self, form, entity):
   285     def init_form(self, form, entity):
   288         """customize your form before rendering here"""
   286         """customize your form before rendering here"""
   395 
   393 
   396     def __init__(self, req, rset, **kwargs):
   394     def __init__(self, req, rset, **kwargs):
   397         kwargs.setdefault('__redirectrql', rset.printable_rql())
   395         kwargs.setdefault('__redirectrql', rset.printable_rql())
   398         super(TableEditForm, self).__init__(req, rset, **kwargs)
   396         super(TableEditForm, self).__init__(req, rset, **kwargs)
   399         for row in xrange(len(self.rset)):
   397         for row in xrange(len(self.rset)):
   400             form = self.vreg.select('forms', 'edition', self.req, rset=self.rset,
   398             form = self.vreg['forms'].select('edition', self.req,
   401                                     row=row, attrcategories=('primary',),
   399                                              rset=self.rset, row=row,
   402                                     mainform=False)
   400                                              attrcategories=('primary',),
       
   401                                              mainform=False)
   403             # XXX rely on the EntityCompositeFormRenderer to put the eid input
   402             # XXX rely on the EntityCompositeFormRenderer to put the eid input
   404             form.remove_field(form.field_by_name('eid'))
   403             form.remove_field(form.field_by_name('eid'))
   405             self.form_add_subform(form)
   404             self.form_add_subform(form)
   406 
   405 
   407 
   406 
   413     def call(self, **kwargs):
   412     def call(self, **kwargs):
   414         """a view to edit multiple entities of the same type the first column
   413         """a view to edit multiple entities of the same type the first column
   415         should be the eid
   414         should be the eid
   416         """
   415         """
   417         #self.form_title(entity)
   416         #self.form_title(entity)
   418         form = self.vreg.select('forms', self.id, self.req, rset=self.rset)
   417         form = self.vreg['forms'].select(self.id, self.req, rset=self.rset)
   419         self.w(form.form_render())
   418         self.w(form.form_render())
   420 
   419 
   421 
   420 
   422 class InlineEntityEditionFormView(FormViewMixIn, EntityView):
   421 class InlineEntityEditionFormView(FormViewMixIn, EntityView):
   423     id = 'inline-edition'
   422     id = 'inline-edition'
   444                                                                  entity.eid)
   443                                                                  entity.eid)
   445         self.render_form(entity, peid, rtype, role, divonclick=divonclick)
   444         self.render_form(entity, peid, rtype, role, divonclick=divonclick)
   446 
   445 
   447     def render_form(self, entity, peid, rtype, role, **kwargs):
   446     def render_form(self, entity, peid, rtype, role, **kwargs):
   448         """fetch and render the form"""
   447         """fetch and render the form"""
   449         form = self.vreg.select('forms', 'edition', self.req, entity=entity,
   448         form = self.vreg['forms'].select('edition', self.req, entity=entity,
   450                                 form_renderer_id='inline', mainform=False,
   449                                          form_renderer_id='inline',
   451                                 copy_nav_params=False)
   450                                          mainform=False, copy_nav_params=False)
   452         self.add_hiddens(form, entity, peid, rtype, role)
   451         self.add_hiddens(form, entity, peid, rtype, role)
   453         divid = '%s-%s-%s' % (peid, rtype, entity.eid)
   452         divid = '%s-%s-%s' % (peid, rtype, entity.eid)
   454         title = self.schema.rschema(rtype).display_name(self.req, role)
   453         title = self.schema.rschema(rtype).display_name(self.req, role)
   455         removejs = self.removejs % (peid, rtype,entity.eid)
   454         removejs = self.removejs % (peid, rtype,entity.eid)
   456         countkey = '%s_count' % rtype
   455         countkey = '%s_count' % rtype