web/views/editforms.py
changeset 2058 7ef12c03447c
parent 2049 b9baedffeb8b
child 2234 1fbcf202882d
equal deleted inserted replaced
2057:0a0cbccafcb5 2058:7ef12c03447c
    57         _ = req._
    57         _ = req._
    58         w(u'<script type="text/javascript">updateMessage(\'%s\');</script>\n'
    58         w(u'<script type="text/javascript">updateMessage(\'%s\');</script>\n'
    59           % _('this action is not reversible!'))
    59           % _('this action is not reversible!'))
    60         # XXX above message should have style of a warning
    60         # XXX above message should have style of a warning
    61         w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s) ?'))
    61         w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s) ?'))
    62         form = self.vreg.select_object('forms', 'composite', req, domid='deleteconf',
    62         form = self.vreg.select('forms', 'composite', req, domid='deleteconf',
    63                                        copy_nav_params=True,
    63                                 copy_nav_params=True,
    64                                        action=self.build_url('edit'), onsubmit=onsubmit,
    64                                 action=self.build_url('edit'), onsubmit=onsubmit,
    65                                        form_buttons=[Button(stdmsgs.YES, cwaction='delete'),
    65                                 form_buttons=[Button(stdmsgs.YES, cwaction='delete'),
    66                                                      Button(stdmsgs.NO, cwaction='cancel')])
    66                                               Button(stdmsgs.NO, cwaction='cancel')])
    67         done = set()
    67         done = set()
    68         w(u'<ul>\n')
    68         w(u'<ul>\n')
    69         for entity in self.rset.entities():
    69         for entity in self.rset.entities():
    70             if entity.eid in done:
    70             if entity.eid in done:
    71                 continue
    71                 continue
    72             done.add(entity.eid)
    72             done.add(entity.eid)
    73             subform = self.vreg.select_object('forms', 'base', req, entity=entity,
    73             subform = self.vreg.select('forms', 'base', req, entity=entity,
    74                                               mainform=False)
    74                                        mainform=False)
    75             form.form_add_subform(subform)
    75             form.form_add_subform(subform)
    76             # don't use outofcontext view or any other that may contain inline edition form
    76             # don't use outofcontext view or any other that may contain inline edition form
    77             w(u'<li>%s</li>' % tags.a(entity.view('textoutofcontext'),
    77             w(u'<li>%s</li>' % tags.a(entity.view('textoutofcontext'),
    78                                       href=entity.absolute_url()))
    78                                       href=entity.absolute_url()))
    79         w(u'</ul>\n')
    79         w(u'</ul>\n')
   117             form = self._build_attribute_form(entity, value, rtype, role,
   117             form = self._build_attribute_form(entity, value, rtype, role,
   118                                               reload, row, col, default)
   118                                               reload, row, col, default)
   119         else:
   119         else:
   120             form = self._build_relation_form(entity, value, rtype, role,
   120             form = self._build_relation_form(entity, value, rtype, role,
   121                                              row, col, vid, default)
   121                                              row, col, vid, default)
   122         renderer = self.vreg.select_object('formrenderers', 'base', self.req,
   122         renderer = self.vreg.select('formrenderers', 'base', self.req,
   123                                       entity=entity,
   123                                     entity=entity,
   124                                       display_label=False, display_help=False,
   124                                     display_label=False, display_help=False,
   125                                       display_fields=[(rtype, role)],
   125                                     display_fields=[(rtype, role)],
   126                                       table_class='', button_bar_class='buttonbar',
   126                                     table_class='', button_bar_class='buttonbar',
   127                                       display_progress_div=False)
   127                                     display_progress_div=False)
   128         self.w(form.form_render(renderer=renderer))
   128         self.w(form.form_render(renderer=renderer))
   129 
   129 
   130     def _build_relation_form(self, entity, value, rtype, role, row, col, vid, default):
   130     def _build_relation_form(self, entity, value, rtype, role, row, col, vid, default):
   131         entity = self.entity(row, col)
   131         entity = self.entity(row, col)
   132         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   132         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   135         onsubmit = ("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', "
   135         onsubmit = ("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', "
   136                     "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s');"
   136                     "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s');"
   137                     % event_data)
   137                     % event_data)
   138         cancelclick = "cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   138         cancelclick = "cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   139             entity.eid, rtype, divid)
   139             entity.eid, rtype, divid)
   140         form = self.vreg.select_object('forms', 'base', self.req, entity=entity,
   140         form = self.vreg.select('forms', 'base', self.req, entity=entity,
   141                                        domid='%s-form' % divid, cssstyle='display: none',
   141                                 domid='%s-form' % divid, cssstyle='display: none',
   142                                        onsubmit=onsubmit, action='#',
   142                                 onsubmit=onsubmit, action='#',
   143                                        form_buttons=[SubmitButton(),
   143                                 form_buttons=[SubmitButton(),
   144                                                      Button(stdmsgs.BUTTON_CANCEL,
   144                                               Button(stdmsgs.BUTTON_CANCEL,
   145                                                        onclick=cancelclick)])
   145                                                      onclick=cancelclick)])
   146         form.append_field(RelationField(name=rtype, role=role, sort=True,
   146         form.append_field(RelationField(name=rtype, role=role, sort=True,
   147                                         widget=Select(),
   147                                         widget=Select(),
   148                                         label=u' '))
   148                                         label=u' '))
   149         self.w(tags.div(value, klass='editableField', id=divid,
   149         self.w(tags.div(value, klass='editableField', id=divid,
   150                         ondblclick=self.ondblclick % event_data))
   150                         ondblclick=self.ondblclick % event_data))
   157                       'reload' : dumps(reload), 'default' : default}
   157                       'reload' : dumps(reload), 'default' : default}
   158         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   158         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   159                    Button(stdmsgs.BUTTON_CANCEL,
   159                    Button(stdmsgs.BUTTON_CANCEL,
   160                           onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   160                           onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   161                               eid, rtype, divid))]
   161                               eid, rtype, divid))]
   162         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   162         form = self.vreg.select('forms', 'edition', self.req, rset=self.rset,
   163                                        row=row, col=col, form_buttons=buttons,
   163                                 row=row, col=col, form_buttons=buttons,
   164                                        domid='%s-form' % divid, action='#',
   164                                 domid='%s-form' % divid, action='#',
   165                                        cssstyle='display: none',
   165                                 cssstyle='display: none',
   166                                        onsubmit=self.onsubmit % event_data)
   166                                 onsubmit=self.onsubmit % event_data)
   167         self.w(tags.div(value, klass='editableField', id=divid,
   167         self.w(tags.div(value, klass='editableField', id=divid,
   168                         ondblclick=self.ondblclick % event_data))
   168                         ondblclick=self.ondblclick % event_data))
   169         return form
   169         return form
   170 
   170 
   171 
   171 
   183         self.render_form(entity)
   183         self.render_form(entity)
   184 
   184 
   185     def render_form(self, entity):
   185     def render_form(self, entity):
   186         """fetch and render the form"""
   186         """fetch and render the form"""
   187         self.form_title(entity)
   187         self.form_title(entity)
   188         form = self.vreg.select_object('forms', 'edition', self.req, entity.rset,
   188         form = self.vreg.select('forms', 'edition', self.req, rset=entity.rset,
   189                                        row=entity.row, col=entity.col, entity=entity,
   189                                 row=entity.row, col=entity.col, entity=entity,
   190                                        submitmsg=self.submited_message())
   190                                 submitmsg=self.submited_message())
   191         self.init_form(form, entity)
   191         self.init_form(form, entity)
   192         self.w(form.form_render(formvid=u'edition'))
   192         self.w(form.form_render(formvid=u'edition'))
   193 
   193 
   194     def init_form(self, form, entity):
   194     def init_form(self, form, entity):
   195         """customize your form before rendering here"""
   195         """customize your form before rendering here"""
   302 
   302 
   303     def __init__(self, req, rset, **kwargs):
   303     def __init__(self, req, rset, **kwargs):
   304         kwargs.setdefault('__redirectrql', rset.printable_rql())
   304         kwargs.setdefault('__redirectrql', rset.printable_rql())
   305         super(TableEditForm, self).__init__(req, rset, **kwargs)
   305         super(TableEditForm, self).__init__(req, rset, **kwargs)
   306         for row in xrange(len(self.rset)):
   306         for row in xrange(len(self.rset)):
   307             form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   307             form = self.vreg.select('forms', 'edition', self.req, rset=self.rset,
   308                                            row=row, attrcategories=('primary',),
   308                                     row=row, attrcategories=('primary',),
   309                                            mainform=False)
   309                                     mainform=False)
   310             # XXX rely on the EntityCompositeFormRenderer to put the eid input
   310             # XXX rely on the EntityCompositeFormRenderer to put the eid input
   311             form.remove_field(form.field_by_name('eid'))
   311             form.remove_field(form.field_by_name('eid'))
   312             self.form_add_subform(form)
   312             self.form_add_subform(form)
   313 
   313 
   314 
   314 
   320     def call(self, **kwargs):
   320     def call(self, **kwargs):
   321         """a view to edit multiple entities of the same type the first column
   321         """a view to edit multiple entities of the same type the first column
   322         should be the eid
   322         should be the eid
   323         """
   323         """
   324         #self.form_title(entity)
   324         #self.form_title(entity)
   325         form = self.vreg.select_object('forms', self.id, self.req, self.rset)
   325         form = self.vreg.select('forms', self.id, self.req, rset=self.rset)
   326         self.w(form.form_render())
   326         self.w(form.form_render())
   327 
   327 
   328 
   328 
   329 class InlineEntityEditionFormView(FormViewMixIn, EntityView):
   329 class InlineEntityEditionFormView(FormViewMixIn, EntityView):
   330     id = 'inline-edition'
   330     id = 'inline-edition'
   351                                                                  entity.eid)
   351                                                                  entity.eid)
   352         self.render_form(entity, peid, rtype, role, divonclick=divonclick)
   352         self.render_form(entity, peid, rtype, role, divonclick=divonclick)
   353 
   353 
   354     def render_form(self, entity, peid, rtype, role, **kwargs):
   354     def render_form(self, entity, peid, rtype, role, **kwargs):
   355         """fetch and render the form"""
   355         """fetch and render the form"""
   356         form = self.vreg.select_object('forms', 'edition', self.req, None,
   356         form = self.vreg.select('forms', 'edition', self.req, entity=entity,
   357                                        entity=entity, form_renderer_id='inline',
   357                                 form_renderer_id='inline', mainform=False,
   358                                        mainform=False, copy_nav_params=False)
   358                                 copy_nav_params=False)
   359         self.add_hiddens(form, entity, peid, rtype, role)
   359         self.add_hiddens(form, entity, peid, rtype, role)
   360         divid = '%s-%s-%s' % (peid, rtype, entity.eid)
   360         divid = '%s-%s-%s' % (peid, rtype, entity.eid)
   361         title = self.schema.rschema(rtype).display_name(self.req, role)
   361         title = self.schema.rschema(rtype).display_name(self.req, role)
   362         removejs = self.removejs % (peid, rtype,entity.eid)
   362         removejs = self.removejs % (peid, rtype,entity.eid)
   363         self.w(form.form_render(divid=divid, title=title, removejs=removejs,
   363         self.w(form.form_render(divid=divid, title=title, removejs=removejs,