85 |
85 |
86 (double-click on the field to see an appropriate edition widget) |
86 (double-click on the field to see an appropriate edition widget) |
87 """ |
87 """ |
88 id = 'reledit' |
88 id = 'reledit' |
89 __select__ = non_final_entity() & match_kwargs('rtype') |
89 __select__ = non_final_entity() & match_kwargs('rtype') |
90 |
|
91 # FIXME editableField class could be toggleable from userprefs |
90 # FIXME editableField class could be toggleable from userprefs |
|
91 |
|
92 # add metadata to allow edition of metadata attributes (not considered by |
|
93 # edition form by default) |
|
94 attrcategories = ('primary', 'secondary', 'metadata') |
92 |
95 |
93 _onclick = u"showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')" |
96 _onclick = u"showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')" |
94 _defaultlandingzone = (u'<img title="%(msg)s" ' |
97 _defaultlandingzone = (u'<img title="%(msg)s" ' |
95 'src="data/accessories-text-editor.png" ' |
98 'src="data/accessories-text-editor.png" ' |
96 'alt="%(msg)s"/>') |
99 'alt="%(msg)s"/>') |
132 entity = self.entity(row, col) |
135 entity = self.entity(row, col) |
133 rschema = entity.schema.rschema(rtype) |
136 rschema = entity.schema.rschema(rtype) |
134 lzone = self._build_landing_zone(landing_zone) |
137 lzone = self._build_landing_zone(landing_zone) |
135 # compute value, checking perms, build form |
138 # compute value, checking perms, build form |
136 if rschema.is_final(): |
139 if rschema.is_final(): |
137 value = entity.printable_value(rtype) or default |
140 value = entity.printable_value(rtype) |
138 if not entity.has_perm('update'): |
141 etype = str(entity.e_schema) |
|
142 ttype = rschema.targets(etype, role)[0] |
|
143 afs = uicfg.autoform_section.etype_get(etype, rtype, role, ttype) |
|
144 if not (afs in self.attrcategories and entity.has_perm('update')): |
139 self.w(value) |
145 self.w(value) |
140 return |
146 return |
|
147 value = value or default |
141 self._attribute_form(entity, value, rtype, role, reload, |
148 self._attribute_form(entity, value, rtype, role, reload, |
142 row, col, default, lzone) |
149 row, col, default, lzone) |
143 else: |
150 else: |
144 dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema, |
151 dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema, |
145 rtype, role) |
152 rtype, role) |
148 self.wview(vid, entity.related(rtype, role)) |
155 self.wview(vid, entity.related(rtype, role)) |
149 return |
156 return |
150 if rvid is None: |
157 if rvid is None: |
151 rvid = self._compute_best_vid(entity, rtype, role) |
158 rvid = self._compute_best_vid(entity, rtype, role) |
152 rset = entity.related(rtype, role) |
159 rset = entity.related(rtype, role) |
153 candidate = self.view(rvid, rset, 'null') |
160 if rset: |
154 value = candidate or default |
161 value = self.view(rvid, rset) |
|
162 else: |
|
163 value = default |
|
164 # XXX check autoform_section. what if 'generic'? |
155 if role == 'subject' and not rschema.has_perm(self.req, 'add', |
165 if role == 'subject' and not rschema.has_perm(self.req, 'add', |
156 fromeid=entity.eid): |
166 fromeid=entity.eid): |
157 return self.w(value) |
167 return self.w(value) |
158 elif role == 'object' and not rschema.has_perm(self.req, 'add', |
168 elif role == 'object' and not rschema.has_perm(self.req, 'add', |
159 toeid=entity.eid): |
169 toeid=entity.eid): |
181 onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', " |
191 onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', " |
182 "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');" |
192 "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');" |
183 % event_data) |
193 % event_data) |
184 cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % ( |
194 cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % ( |
185 entity.eid, rtype, divid) |
195 entity.eid, rtype, divid) |
186 form = self.vreg.select_object('forms', 'base', self.req, entity=entity, |
196 form = self.vreg.select('forms', 'base', self.req, entity=entity, |
187 domid='%s-form' % divid, cssstyle='display: none', |
197 attrcategories=self.attrcategories, |
188 onsubmit=onsubmit, action='#', |
198 domid='%s-form' % divid, cssstyle='display: none', |
189 form_buttons=[SubmitButton(), |
199 onsubmit=onsubmit, action='#', |
190 Button(stdmsgs.BUTTON_CANCEL, |
200 form_buttons=[SubmitButton(), |
191 onclick=cancelclick)]) |
201 Button(stdmsgs.BUTTON_CANCEL, |
|
202 onclick=cancelclick)]) |
192 field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role) |
203 field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role) |
193 form.append_field(field) |
204 form.append_field(field) |
194 w = self.w |
205 w = self.w |
195 w(u'<div id="%s-reledit" class="field">' % divid) |
206 w(u'<div id="%s-reledit" class="field">' % divid) |
196 w(tags.div(lzone, klass='editableField', id=divid, |
207 w(tags.div(lzone, klass='editableField', id=divid, |
217 "%(reload)s, '%(default)s');") |
228 "%(reload)s, '%(default)s');") |
218 buttons = [SubmitButton(stdmsgs.BUTTON_OK), |
229 buttons = [SubmitButton(stdmsgs.BUTTON_OK), |
219 Button(stdmsgs.BUTTON_CANCEL, |
230 Button(stdmsgs.BUTTON_CANCEL, |
220 onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % ( |
231 onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % ( |
221 eid, rtype, divid))] |
232 eid, rtype, divid))] |
222 form = self.vreg.select_object('forms', 'edition', self.req, self.rset, |
233 form = self.vreg.select('forms', 'edition', self.req, rset=self.rset, |
223 row=row, col=col, form_buttons=buttons, |
234 row=row, col=col, form_buttons=buttons, |
224 domid='%s-form' % divid, action='#', |
235 attrcategories=self.attrcategories, |
225 cssstyle='display: none', |
236 domid='%s-form' % divid, action='#', |
226 onsubmit=onsubmit % event_data) |
237 cssstyle='display: none', |
|
238 onsubmit=onsubmit % event_data) |
227 w = self.w |
239 w = self.w |
228 w(u'<div class="field">') |
240 w(u'<div class="field">') |
229 w(u'<div id="%s" style="display: inline">' % divid) |
241 w(u'<div id="%s" style="display: inline">' % divid) |
230 w(tags.div(lzone, klass='editableField', |
242 w(tags.div(lzone, klass='editableField', |
231 onclick=self._onclick % event_data)) |
243 onclick=self._onclick % event_data)) |