diff -r 2fc04786dd36 -r 3fa6c9ef2f51 cubicweb/web/views/autoform.py --- a/cubicweb/web/views/autoform.py Fri Oct 06 11:45:52 2017 +0200 +++ b/cubicweb/web/views/autoform.py Fri Oct 06 14:24:35 2017 +0200 @@ -1,4 +1,4 @@ -# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -118,16 +118,10 @@ .. Controlling the generic relation fields """ - -from cubicweb import _ - -from warnings import warn - from six.moves import range from logilab.mtconverter import xml_escape from logilab.common.decorators import iclassmethod, cached -from logilab.common.deprecation import deprecated from logilab.common.registry import NoSelectableObject from cubicweb import neg_role, uilib @@ -185,7 +179,7 @@ return False def process_posted(self, form): - pass # handled by the subform + pass # handled by the subform class InlineEntityEditionFormView(f.FormViewMixIn, EntityView): @@ -237,7 +231,7 @@ **self.cw_extra_kwargs) if self.pform is None: form.restore_previous_post(form.session_key()) - #assert form.parent_form + # assert form.parent_form self.add_hiddens(form, entity) return form @@ -261,7 +255,7 @@ entity = self._entity() rdef = entity.e_schema.rdef(self.rtype, neg_role(self.role), self.petype) card = rdef.role_cardinality(self.role) - if card == '1': # don't display remove link + if card == '1': # don't display remove link return None # if cardinality is 1..n (+), dont display link to remove an inlined form for the first form # allowing to edit the relation. To detect so: @@ -294,7 +288,7 @@ except KeyError: self._cw.data[countkey] = 1 self.form.render(w=self.w, divid=divid, title=title, removejs=removejs, - i18nctx=i18nctx, counter=self._cw.data[countkey] , + i18nctx=i18nctx, counter=self._cw.data[countkey], **kwargs) def form_title(self, entity, i18nctx): @@ -374,21 +368,21 @@ & specified_etype_implements('Any')) _select_attrs = InlineEntityCreationFormView._select_attrs + ('card',) - card = None # make pylint happy - form = None # no actual form wrapped + card = None # make pylint happy + form = None # no actual form wrapped def call(self, i18nctx, **kwargs): self._cw.set_varmaker() divid = "addNew%s%s%s:%s" % (self.etype, self.rtype, self.role, self.peid) self.w(u'
' - % divid) + % divid) js = "addInlineCreationForm('%s', '%s', '%s', '%s', '%s', '%s')" % ( self.peid, self.petype, self.etype, self.rtype, self.role, i18nctx) if self.pform.should_hide_add_new_relation_link(self.rtype, self.card): js = "toggleVisibility('%s'); %s" % (divid, js) __ = self._cw.pgettext self.w(u'+ %s.' - % (self.rtype, self.peid, js, __(i18nctx, 'add a %s' % self.etype))) + % (self.rtype, self.peid, js, __(i18nctx, 'add a %s' % self.etype))) self.w(u'
') @@ -400,6 +394,7 @@ return u'%s:%s:%s' % (eid, rtype, reid) return u'%s:%s:%s' % (reid, rtype, eid) + def toggleable_relation_link(eid, nodeid, label='x'): """return javascript snippet to delete/undelete a relation between two entities @@ -420,6 +415,7 @@ return ['%s:%s:%s' % (subj, rel, obj) for subj, rel, obj in pending if eid is None or eid in (subj, obj)] + def get_pending_deletes(req, eid=None): """shortcut to access req's pending_delete entry @@ -430,6 +426,7 @@ return ['%s:%s:%s' % (subj, rel, obj) for subj, rel, obj in pending if eid is None or eid in (subj, obj)] + def parse_relations_descr(rdescr): """parse a string describing some relations, in the form subjeids:rtype:objeids @@ -443,6 +440,7 @@ for obj in objs.split('_'): yield int(subj), rtype, int(obj) + def delete_relations(req, rdefs): """delete relations from the repository""" # FIXME convert to using the syntax subject:relation:eids @@ -452,6 +450,7 @@ execute(rql, {'x': subj, 'y': obj}) req.set_message(req._('relations deleted')) + def insert_relations(req, rdefs): """insert relations into the repository""" execute = req.execute @@ -468,10 +467,12 @@ peid=peid, petype=petype) return self._call_view(view, i18nctx=i18nctx) + @ajaxfunc(output_type='json') def validate_form(self, action, names, values): return self.validate_form(action, names, values) + @ajaxfunc def cancel_edition(self, errorurl): """cancelling edition from javascript @@ -491,6 +492,7 @@ pendings.append(value) req.session.data[key] = pendings + def _remove_pending(req, eidfrom, rel, eidto, kind): key = 'pending_%s' % kind pendings = req.session.data[key] @@ -499,21 +501,25 @@ pendings.remove(value) req.session.data[key] = pendings + @ajaxfunc(output_type='json') def remove_pending_insert(self, args): eidfrom, rel, eidto = args _remove_pending(self._cw, eidfrom, rel, eidto, 'insert') + @ajaxfunc(output_type='json') def add_pending_inserts(self, tripletlist): for eidfrom, rel, eidto in tripletlist: _add_pending(self._cw, eidfrom, rel, eidto, 'insert') + @ajaxfunc(output_type='json') def remove_pending_delete(self, args): eidfrom, rel, eidto = args _remove_pending(self._cw, eidfrom, rel, eidto, 'delete') + @ajaxfunc(output_type='json') def add_pending_delete(self, args): eidfrom, rel, eidto = args @@ -527,7 +533,6 @@ w = stream.append req = form._cw _ = req._ - __ = _ eid = form.edited_entity.eid w(u'') for rschema, role, related in field.relations_table(form): @@ -541,9 +546,9 @@ w(u'
  • %s%s
  • ' % (viewparams[1], viewparams[0], viewparams[2], viewparams[3])) if not form.force_display and form.maxrelitems < len(related): - link = (u'' - '[%s]' - '' % _('view all')) + link = (u'[%s]' % _('view all')) w(u'
  • %s
  • ' % link) w(u'') w(u'') @@ -619,7 +624,8 @@ if rschema.has_perm(form._cw, 'delete', **haspermkwargs): toggleable_rel_link_func = toggleable_relation_link else: - toggleable_rel_link_func = lambda x, y, z: u'' + def toggleable_rel_link_func(x, y, z): + return u'' for row in range(rset.rowcount): nodeid = relation_id(entity.eid, rschema, role, rset[row][0]) @@ -641,7 +647,7 @@ for pendingid in pending_inserts: eidfrom, rtype, eidto = pendingid.split(':') pendingid = 'id' + pendingid - if int(eidfrom) == entity.eid: # subject + if int(eidfrom) == entity.eid: # subject label = display_name(form._cw, rtype, 'subject', entity.cw_etype) reid = eidto @@ -687,13 +693,14 @@ relname, role = self._cw.form.get('relation').rsplit('_', 1) return u"""\
    - %s
    """ % (hidden and 'hidden' or '', divid, selectid, - xml_escape(json_dumps(entity.eid)), is_cell and 'true' or 'null', relname, - '\n'.join(options)) + xml_escape(json_dumps(entity.eid)), is_cell and 'true' or 'null', + relname, '\n'.join(options)) def _get_select_options(self, entity, rschema, role): """add options to search among all entities of each possible type""" @@ -706,7 +713,7 @@ # NOTE: expect 'limit' arg on choices method of relation field for eview, reid in field.vocabulary(form, limit=limit): if reid is None: - if eview: # skip blank value + if eview: # skip blank value options.append('' % xml_escape(eview)) elif reid != ff.INTERNAL_FIELD_VALUE: @@ -724,7 +731,7 @@ for eschema in targettypes: mode = '%s:%s:%s:%s' % (role, entity.eid, rschema.type, eschema) url = self._cw.build_url(entity.rest_path(), vid='search-associate', - __mode=mode) + __mode=mode) options.append((eschema.display_name(self._cw), '' % ( xml_escape(url), _('Search for'), eschema.display_name(self._cw)))) @@ -784,7 +791,7 @@ for rtype, role in self.editable_attributes(): try: self.field_by_name(str(rtype), role) - continue # explicitly specified + continue # explicitly specified except f.FieldNotFound: # has to be guessed try: @@ -803,7 +810,7 @@ for formview in self.inlined_form_views(): field = self._inlined_form_view_field(formview) self.fields.append(field) - if not field.fieldset in fsio: + if field.fieldset not in fsio: fsio.append(field.fieldset) if self.formtype == 'main': # add the generic relation field if necessary @@ -817,7 +824,7 @@ pass else: self.fields.append(field) - if not field.fieldset in fsio: + if field.fieldset not in fsio: fsio.append(field.fieldset) self.maxrelitems = self._cw.property_value('navigation.related-limit') self.force_display = bool(self._cw.form.get('__force_display')) @@ -949,7 +956,7 @@ relation. """ return (self.should_display_add_new_relation_link( - rschema, existing, card) and + rschema, existing, card) and self.check_inlined_rdef_permissions( rschema, role, tschema, ttype)) @@ -968,7 +975,6 @@ return rdef.has_perm(self._cw, 'add', **rdefkwargs) return rdef.may_have_permission('add', self._cw) - def should_hide_add_new_relation_link(self, rschema, card): """return true if once an inlined creation form is added, the 'add new' link should be hidden @@ -1009,7 +1015,7 @@ pass -## default form ui configuration ############################################## +# default form ui configuration ############################################## _AFS = uicfg.autoform_section # use primary and not generated for eid since it has to be an hidden @@ -1049,6 +1055,7 @@ _AFFK.tag_subject_of(('TrInfo', 'wf_info_for', '*'), {'widget': fw.HiddenInput}) + def registration_callback(vreg): global etype_relation_field