web/views/editforms.py
branchtls-sprint
changeset 1798 cc86fe8efaaa
parent 1781 7a934055dd45
child 1847 c5714f07f869
equal deleted inserted replaced
1797:c2a80130b06d 1798:cc86fe8efaaa
    88     __select__ = non_final_entity() & match_kwargs('rtype')
    88     __select__ = non_final_entity() & match_kwargs('rtype')
    89 
    89 
    90     # FIXME editableField class could be toggleable from userprefs
    90     # FIXME editableField class could be toggleable from userprefs
    91 
    91 
    92     onsubmit = ("return inlineValidateAttributeForm('%(divid)s-form', '%(rtype)s', "
    92     onsubmit = ("return inlineValidateAttributeForm('%(divid)s-form', '%(rtype)s', "
    93                 "'%(eid)s', '%(divid)s', %(reload)s);")
    93                 "'%(eid)s', '%(divid)s', %(reload)s, '%(default)s');")
    94     ondblclick = "showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')"
    94     ondblclick = "showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')"
    95 
    95 
    96     def cell_call(self, row, col, rtype=None, role='subject', reload=False,
    96     def cell_call(self, row, col, rtype=None, role='subject', reload=False,
    97                   vid='textoutofcontext', default=u''):
    97                   vid='textoutofcontext', default=None):
    98         """display field to edit entity's `rtype` relation on double-click"""
    98         """display field to edit entity's `rtype` relation on double-click"""
    99         rschema = self.schema.rschema(rtype)
    99         rschema = self.schema.rschema(rtype)
   100         entity = self.entity(row, col)
   100         entity = self.entity(row, col)
       
   101         if not default:
       
   102             default = self.req._('not specified')
   101         if rschema.is_final():
   103         if rschema.is_final():
   102             if getattr(entity, rtype) is None:
   104             if getattr(entity, rtype) is None:
   103                 value = default or self.req._('not specified')
   105                 value = default
   104             else:
   106             else:
   105                 value = entity.printable_value(rtype)
   107                 value = entity.printable_value(rtype)
   106         else:
   108         else:
   107             rset = entity.related(rtype, role)
   109             rset = entity.related(rtype, role)
   108             # XXX html_escape but that depends of the actual vid
   110             # XXX html_escape but that depends of the actual vid
   109             value = html_escape(self.view(vid, rset, 'null') or default)
   111             value = html_escape(self.view(vid, rset, 'null') or default)
   110         if not entity.has_perm('update'):
   112         if not entity.has_perm('update'):
   111             self.w(value)
   113             self.w(value)
   112             return
   114             return
   113         if rschema.is_final():
   115         if rschema.is_final():
   114             form = self._build_attribute_form(entity, value, rtype, role, reload, row, col)
   116             form = self._build_attribute_form(entity, value, rtype, role, reload, row, col, default)
   115         else:
   117         else:
   116             form = self._build_relation_form(entity, value, rtype, role, row, col, vid)
   118             form = self._build_relation_form(entity, value, rtype, role, row, col, vid, default)
   117         form.form_add_hidden(u'__maineid', entity.eid)
   119         form.form_add_hidden(u'__maineid', entity.eid)
   118         renderer = FormRenderer(display_label=False, display_help=False,
   120         renderer = FormRenderer(display_label=False, display_help=False,
   119                                 display_fields=[(rtype, role)],
   121                                 display_fields=[(rtype, role)],
   120                                 table_class='', button_bar_class='buttonbar',
   122                                 table_class='', button_bar_class='buttonbar',
   121                                 display_progress_div=False)
   123                                 display_progress_div=False)
   122         self.w(form.form_render(renderer=renderer))
   124         self.w(form.form_render(renderer=renderer))
   123 
   125 
   124     def _build_relation_form(self, entity, value, rtype, role, row, col, vid):
   126     def _build_relation_form(self, entity, value, rtype, role, row, col, vid, default):
   125         entity = self.entity(row, col)
   127         entity = self.entity(row, col)
   126         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   128         divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid))
   127         event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : vid}
   129         event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : vid,
       
   130                       'default' : default, 'role' : role}
   128         form = EntityFieldsForm(self.req, None, entity=entity, action='#',
   131         form = EntityFieldsForm(self.req, None, entity=entity, action='#',
   129                                 domid='%s-form' % divid,
   132                                 domid='%s-form' % divid,
   130                                 cssstyle='display: none',
   133                                 cssstyle='display: none',
   131                                 onsubmit=("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', "
   134                                 onsubmit=("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', "
   132                                           "'%(eid)s', '%(divid)s', '%(vid)s');" % event_data),
   135                                           "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s');" %
       
   136                                           event_data),
   133                                 form_buttons=[SubmitButton(),
   137                                 form_buttons=[SubmitButton(),
   134                                               Button(stdmsgs.BUTTON_CANCEL,
   138                                               Button(stdmsgs.BUTTON_CANCEL,
   135                                                      onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" %\
   139                                                      onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" %\
   136                                                          (entity.eid, rtype, divid))])
   140                                                          (entity.eid, rtype, divid))])
   137         form.append_field(RelationField(name=rtype, role=role, sort=True,
   141         form.append_field(RelationField(name=rtype, role=role, sort=True,
   139                                         label=u' '))
   143                                         label=u' '))
   140         self.w(tags.div(value, klass='editableField', id=divid,
   144         self.w(tags.div(value, klass='editableField', id=divid,
   141                         ondblclick=self.ondblclick % event_data))
   145                         ondblclick=self.ondblclick % event_data))
   142         return form
   146         return form
   143 
   147 
   144     def _build_attribute_form(self, entity, value, rtype, role, reload, row, col):
   148     def _build_attribute_form(self, entity, value, rtype, role, reload, row, col, default):
   145         eid = entity.eid
   149         eid = entity.eid
   146         divid = 'd%s' % make_uid('%s-%s' % (rtype, eid))
   150         divid = 'd%s' % make_uid('%s-%s' % (rtype, eid))
   147         event_data = {'divid' : divid, 'eid' : eid, 'rtype' : rtype,
   151         event_data = {'divid' : divid, 'eid' : eid, 'rtype' : rtype,
   148                       'reload' : dumps(reload)}
   152                       'reload' : dumps(reload), 'default' : default}
   149         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   153         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   150                    Button(stdmsgs.BUTTON_CANCEL,
   154                    Button(stdmsgs.BUTTON_CANCEL,
   151                           onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   155                           onclick="cancelInlineEdit(%s,\'%s\',\'%s\')" % (
   152                               eid, rtype, divid))]
   156                               eid, rtype, divid))]
   153         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   157         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,