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, |