# HG changeset patch # User Aurelien Campeas # Date 1247068242 -7200 # Node ID 8b5a1af6dc35a60afcefb3ce1df48137ffc9e3e2 # Parent 206735882b8e09dceb1c84643b3fb6cb4553c82f [reledit] small cleanup and add escape param to control xml_escapability of the value, also rename vid arg which clashes with entity.view(...) args diff -r 206735882b8e -r 8b5a1af6dc35 web/views/editforms.py --- a/web/views/editforms.py Wed Jul 08 17:24:21 2009 +0200 +++ b/web/views/editforms.py Wed Jul 08 17:50:42 2009 +0200 @@ -90,15 +90,20 @@ # FIXME editableField class could be toggleable from userprefs - ondblclick = "showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')" + _ondblclick = "showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')" - def cell_call(self, row, col, rtype=None, role='subject', reload=False, - vid='textoutofcontext', default=None): + def cell_call(self, row, col, rtype=None, role='subject', + reload=False, # controls reloading the whole page after change + rvid='textoutofcontext', # vid to be applied to other side of rtype + escape=True, # depending on the vid, will xml_escape or not + default=None # default value + ): """display field to edit entity's `rtype` relation on double-click""" + assert rtype rschema = self.schema.rschema(rtype) entity = self.entity(row, col) if not default: - default = self.req._('not specified') + default = xml_escape(self.req._('not specified')) if rschema.is_final(): value = entity.printable_value(rtype) if not entity.has_perm('update'): @@ -106,25 +111,28 @@ return else: rset = entity.related(rtype, role) - # XXX xml_escape but that depends of the actual vid - value = xml_escape(self.view(vid, rset, 'null') or default) - # XXX consider local roles ? + candidate = self.view(rvid, rset, 'null').strip() + if candidate and escape: + value = xml_escape(candidate) + value = candidate or default + # check perms. if role == 'subject'and not rschema.has_perm(self.req, 'add', - fromeid=entity.eid): + fromeid=entity.eid): self.w(value) return - elif role == 'object'and not rschema.has_perm(self.req, 'add', - toeid=entity.eid): + elif role == 'object' and not rschema.has_perm(self.req, 'add', + toeid=entity.eid): self.w(value) return if not value.strip(): value = default + # build form. if rschema.is_final(): form = self._build_attribute_form(entity, value, rtype, role, reload, row, col, default) else: form = self._build_relation_form(entity, value, rtype, role, - row, col, vid, default) + row, col, rvid, default) renderer = self.vreg.select_object('formrenderers', 'base', self.req, entity=entity, display_label=False, display_help=False, @@ -151,7 +159,7 @@ field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role) form.append_field(field) self.w(tags.div(value, klass='editableField', id=divid, - ondblclick=self.ondblclick % event_data)) + ondblclick=self._ondblclick % event_data)) return form def _build_attribute_form(self, entity, value, rtype, role, reload, row, col, default): @@ -171,7 +179,7 @@ cssstyle='display: none', onsubmit=onsubmit % event_data) self.w(tags.div(value, klass='editableField', id=divid, - ondblclick=self.ondblclick % event_data)) + ondblclick=self._ondblclick % event_data)) return form