web/views/editforms.py
changeset 2483 6e328fcc276c
parent 2458 4d114865098f
child 2484 7e9283731db8
equal deleted inserted replaced
2472:a459a6ab78d0 2483:6e328fcc276c
   103                                role) in '+*':
   103                                role) in '+*':
   104             return self._many_rvid
   104             return self._many_rvid
   105         return self._one_rvid
   105         return self._one_rvid
   106 
   106 
   107     def _build_landing_zone(self, lzone):
   107     def _build_landing_zone(self, lzone):
   108         return lzone or self._defaultlandingzone % {'msg' : self.req._(self._landingzonemsg)}
   108         return lzone or self._defaultlandingzone % {'msg' : xml_escape(self.req._(self._landingzonemsg))}
   109 
   109 
   110     def _build_renderer(self, entity, rtype, role):
   110     def _build_renderer(self, entity, rtype, role):
   111         return self.vreg.select_object('formrenderers', 'base', self.req,
   111         return self.vreg.select_object('formrenderers', 'base', self.req,
   112                                        entity=entity,
   112                                        entity=entity,
   113                                        display_label=False, display_help=False,
   113                                        display_label=False, display_help=False,
   127         assert role in ('subject', 'object')
   127         assert role in ('subject', 'object')
   128         if default is None:
   128         if default is None:
   129             default = xml_escape(self.req._('<no value>'))
   129             default = xml_escape(self.req._('<no value>'))
   130         entity = self.entity(row, col)
   130         entity = self.entity(row, col)
   131         rschema = entity.schema.rschema(rtype)
   131         rschema = entity.schema.rschema(rtype)
       
   132         lzone = self._build_landing_zone(landing_zone)
   132         # compute value, checking perms, build form
   133         # compute value, checking perms, build form
   133         if rschema.is_final():
   134         if rschema.is_final():
   134             value = entity.printable_value(rtype) or default
   135             value = entity.printable_value(rtype) or default
   135             if not entity.has_perm('update'):
   136             if not entity.has_perm('update'):
   136                 self.w(value)
   137                 self.w(value)
   137                 return
   138                 return
   138             self._attribute_form(entity, value, rtype, role, reload,
   139             self._attribute_form(entity, value, rtype, role, reload,
   139                                  row, col, default, landing_zone)
   140                                  row, col, default, lzone)
   140         else:
   141         else:
   141             dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema,
   142             dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema,
   142                                                                 rtype, role)
   143                                                                 rtype, role)
   143             vid = dispctrl.get('vid', 'reledit')
   144             vid = dispctrl.get('vid', 'reledit')
   144             if vid != 'reledit': # reledit explicitly disabled
   145             if vid != 'reledit': # reledit explicitly disabled
   158             elif get_schema_property(entity.e_schema, rschema,
   159             elif get_schema_property(entity.e_schema, rschema,
   159                                      role, 'composite') == role:
   160                                      role, 'composite') == role:
   160                 self.warning('reledit cannot be applied : (... %s %s [composite])'
   161                 self.warning('reledit cannot be applied : (... %s %s [composite])'
   161                              % (rtype, entity.e_schema))
   162                              % (rtype, entity.e_schema))
   162                 return self.w(value)
   163                 return self.w(value)
   163             self._relation_form(entity, value, rtype, role, reload, row, col,
   164             self._relation_form(entity, value, rtype, role, reload, rvid,
   164                                 rvid, default, landing_zone)
   165                                 default, lzone)
   165 
   166 
   166 
   167 
   167     def _relation_form(self, entity, value, rtype, role, row, col, reload, rvid, default, lzone):
   168     def _relation_form(self, entity, value, rtype, role, reload, rvid, default, lzone):
   168         lzone = self._build_landing_zone(lzone)
   169         """xxx-reledit div (class=field)
       
   170               +-xxx div (class="editableField")
       
   171               |   +-landing zone
       
   172               +-value
       
   173               +-form-xxx div
       
   174         """
   169         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   175         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   170         event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : rvid,
   176         event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : rvid,
   171                       'reload' : reload, 'default' : default, 'role' : role,
   177                       'reload' : dumps(reload), 'default' : default, 'role' : role,
   172                       'lzone' : lzone}
   178                       'lzone' : lzone}
   173         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   179         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   174                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   180                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   175                     % event_data)
   181                     % event_data)
   176         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   182         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   181                                        form_buttons=[SubmitButton(),
   187                                        form_buttons=[SubmitButton(),
   182                                                      Button(stdmsgs.BUTTON_CANCEL,
   188                                                      Button(stdmsgs.BUTTON_CANCEL,
   183                                                             onclick=cancelclick)])
   189                                                             onclick=cancelclick)])
   184         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   190         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   185         form.append_field(field)
   191         form.append_field(field)
   186         self.w(u'<div id="%s-reledit" class="field">' % divid)
   192         w = self.w
   187         self.w(tags.div(lzone, klass='editableField', id=divid,
   193         w(u'<div id="%s-reledit" class="field">' % divid)
   188                         onclick=self._onclick % event_data))
   194         w(tags.div(lzone, klass='editableField', id=divid,
   189         self.w(value)
   195                    onclick=self._onclick % event_data))
       
   196         w(value)
   190         renderer = self._build_renderer(entity, rtype, role)
   197         renderer = self._build_renderer(entity, rtype, role)
   191         self.w(form.form_render(renderer=renderer))
   198         w(form.form_render(renderer=renderer))
   192         self.w(u'</div>')
   199         w(u'</div>')
   193 
   200 
   194     def _attribute_form(self, entity, value, rtype, role, reload, row, col, default, lzone):
   201     def _attribute_form(self, entity, value, rtype, role, reload, row, col, default, lzone):
       
   202         """div (class=field)
       
   203               +-xxx div
       
   204               |  +-xxx div (class=editableField)
       
   205               |  |  +-landing zone
       
   206               |  +-value-xxx div
       
   207               |     +-value
       
   208               +-form-xxx div
       
   209         """
   195         eid = entity.eid
   210         eid = entity.eid
   196         divid = 'd%s' % make_uid('%s-%s' % (rtype, eid))
   211         divid = 'd%s' % make_uid('%s-%s' % (rtype, eid))
   197         event_data = {'divid' : divid, 'eid' : eid, 'rtype' : rtype,
   212         event_data = {'divid' : divid, 'eid' : eid, 'rtype' : rtype,
   198                       'reload' : dumps(reload), 'default' : default, 'lzone' : lzone}
   213                       'reload' : dumps(reload), 'default' : default}
   199         onsubmit = ("return inlineValidateAttributeForm('%(rtype)s', '%(eid)s', '%(divid)s', "
   214         onsubmit = ("return inlineValidateAttributeForm('%(rtype)s', '%(eid)s', '%(divid)s', "
   200                     "%(reload)s, '%(default)s', '%(lzone)s');")
   215                     "%(reload)s, '%(default)s');")
   201         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   216         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   202                    Button(stdmsgs.BUTTON_CANCEL,
   217                    Button(stdmsgs.BUTTON_CANCEL,
   203                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   218                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   204                               eid, rtype, divid))]
   219                               eid, rtype, divid))]
   205         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   220         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   206                                        row=row, col=col, form_buttons=buttons,
   221                                        row=row, col=col, form_buttons=buttons,
   207                                        domid='%s-form' % divid, action='#',
   222                                        domid='%s-form' % divid, action='#',
   208                                        cssstyle='display: none',
   223                                        cssstyle='display: none',
   209                                        onsubmit=onsubmit % event_data)
   224                                        onsubmit=onsubmit % event_data)
   210         self.w(tags.div(value, klass='editableField', id=divid,
   225         w = self.w
   211                         onclick=self._onclick % event_data))
   226         w(u'<div class="field">')
       
   227         w(u'<div id="%s" style="display: inline">' % divid)
       
   228         w(tags.div(lzone, klass='editableField',
       
   229                    onclick=self._onclick % event_data))
       
   230         w(u'<div id="value-%s" style="display: inline">%s</div>' %
       
   231                (divid, value))
       
   232         w(u'</div>')
   212         renderer = self._build_renderer(entity, rtype, role)
   233         renderer = self._build_renderer(entity, rtype, role)
   213         self.w(form.form_render(renderer=renderer))
   234         w(form.form_render(renderer=renderer))
       
   235         w(u'</div>')
   214 
   236 
   215 
   237 
   216 class EditionFormView(FormViewMixIn, EntityView):
   238 class EditionFormView(FormViewMixIn, EntityView):
   217     """display primary entity edition form"""
   239     """display primary entity edition form"""
   218     id = 'edition'
   240     id = 'edition'