web/views/reledit.py
branchstable
changeset 6283 c827fa795a6b
parent 6282 556b1b1a2c5a
child 6289 163a7f1d5bba
--- a/web/views/reledit.py	Fri Sep 17 16:54:56 2010 +0200
+++ b/web/views/reledit.py	Fri Sep 17 16:54:57 2010 +0200
@@ -19,6 +19,7 @@
 """
 
 import copy
+from warnings import warn
 
 from logilab.mtconverter import xml_escape
 from logilab.common.deprecation import deprecated
@@ -49,7 +50,7 @@
 
     # ui side continuations
     _onclick = (u"cw.reledit.loadInlineEditionForm('%(formid)s', %(eid)s, '%(rtype)s', '%(role)s', "
-                "'%(divid)s', %(reload)s, '%(vid)s', '%(default_value)s');")
+                "'%(divid)s', %(reload)s, '%(vid)s');")
     _cancelclick = "cw.reledit.cleanupAfterCancel('%s')"
 
     # ui side actions/buttons
@@ -60,10 +61,6 @@
     _editzone = u'<img title="%(msg)s" src="data/pen_icon.png" alt="%(msg)s"/>'
     _editzonemsg = _('click to edit this field')
 
-    # default relation vids according to cardinality
-    # can be changed per rtype using reledit_ctrl rtag
-    _one_rvid = 'incontext'
-    _many_rvid = 'csv'
     # renderer
     _form_renderer_id = 'base'
 
@@ -83,53 +80,53 @@
         entity = self.cw_rset.get_entity(row, col)
         rschema = self._cw.vreg.schema[rtype]
         self._rules = rctrl.etype_get(entity.e_schema.type, rschema.type, role, '*')
+        if rvid is not None or default_value is not None:
+            warn('[3.9] specifying rvid/default_value on select is deprecated, '
+                 'reledit_ctrl rtag to control this' % self, DeprecationWarning)
         reload = self._compute_reload(entity, rschema, role, reload)
-        default_value = self._compute_default_value(entity, rschema, role, default_value)
         divid = self._build_divid(rtype, role, entity.eid)
         if rschema.final:
-            self._handle_attribute(entity, rschema, role, divid, reload, default_value)
+            self._handle_attribute(entity, rschema, role, divid, reload)
         else:
             if self._is_composite():
-                self._handle_composite(entity, rschema, role, divid, reload, default_value, formid)
+                self._handle_composite(entity, rschema, role, divid, reload, formid)
             else:
-                self._handle_relation(entity, rschema, role, divid, reload, default_value, formid)
+                self._handle_relation(entity, rschema, role, divid, reload, formid)
 
-    def _handle_attribute(self, entity, rschema, role, divid, reload, default_value):
+    def _handle_attribute(self, entity, rschema, role, divid, reload):
         rtype = rschema.type
         value = entity.printable_value(rtype)
         if not self._should_edit_attribute(entity, rschema):
             self.w(value)
             return
-
         display_label, related_entity = self._prepare_form(entity, rtype, role)
-        form, renderer = self._build_form(entity, rtype, role, divid, 'base', default_value,
+        form, renderer = self._build_form(entity, rtype, role, divid, 'base',
                                           reload, display_label, related_entity)
-        value = value or default_value
+        value = value or self._compute_default_value(rschema, role)
         self.view_form(divid, value, form, renderer)
 
-    def _compute_formid_value(self, entity, rschema, role, default_value, rvid, formid):
+    def _compute_formid_value(self, entity, rschema, role, rvid, formid):
         related_rset = entity.related(rschema.type, role)
         if related_rset:
             value = self._cw.view(rvid, related_rset)
         else:
-            value = default_value
+            value = self._compute_default_value(rschema, role)
         if not self._should_edit_relation(entity, rschema, role):
             return None, value
         return formid, value
 
-    def _handle_relation(self, entity, rschema, role, divid, reload, default_value, formid):
+    def _handle_relation(self, entity, rschema, role, divid, reload, formid):
         rvid = self._compute_best_vid(entity.e_schema, rschema, role)
-        formid, value = self._compute_formid_value(entity, rschema, role, default_value, rvid, formid)
+        formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
         if formid is None:
             return self.w(value)
-
         rtype = rschema.type
         display_label, related_entity = self._prepare_form(entity, rtype, role)
-        form, renderer = self._build_form(entity, rtype, role, divid, formid, default_value, reload,
+        form, renderer = self._build_form(entity, rtype, role, divid, formid, reload,
                                           display_label, related_entity, dict(vid=rvid))
         self.view_form(divid, value, form, renderer)
 
-    def _handle_composite(self, entity, rschema, role, divid, reload, default_value, formid):
+    def _handle_composite(self, entity, rschema, role, divid, reload, formid):
         # this is for attribute-like composites (1 target type, 1 related entity at most, for now)
         ttypes = self._compute_ttypes(rschema, role)
         related_rset = entity.related(rschema.type, role)
@@ -138,7 +135,7 @@
         delete_related = edit_related and self._may_delete_related(related_rset, entity, rschema, role)
 
         rvid = self._compute_best_vid(entity.e_schema, rschema, role)
-        formid, value = self._compute_formid_value(entity, rschema, role, default_value, rvid, formid)
+        formid, value = self._compute_formid_value(entity, rschema, role, rvid, formid)
         if formid is None or not (edit_related or add_related):
             # till we learn to handle cases where not (edit_related or add_related)
             self.w(value)
@@ -148,16 +145,28 @@
         ttype = ttypes[0]
         _fdata = self._prepare_composite_form(entity, rtype, role, edit_related, add_related and ttype)
         display_label, related_entity = _fdata
-        form, renderer = self._build_form(entity, rtype, role, divid, formid, default_value, reload,
+        form, renderer = self._build_form(entity, rtype, role, divid, formid, reload,
                                           display_label, related_entity, dict(vid=rvid))
         self.view_form(divid, value, form, renderer,
                        edit_related, add_related, delete_related)
 
     def _compute_best_vid(self, eschema, rschema, role):
-        rvid = self._one_rvid
-        if eschema.rdef(rschema, role).role_cardinality(role) in '+*':
-            rvid = self._many_rvid
-        return self._rules.get('rvid', rvid)
+        vid = self._rules.get('rvid', None)
+        if vid is None:
+            try:
+                if eschema.rdef(rschema, role).role_cardinality(role) in '+*':
+                    vid = self._many_rvid
+                    warn('[3.9] %s overriding _one_rvid is deprecated, use '
+                         'reledit_ctrl rtag to control this' % self, DeprecationWarning)
+                else:
+                    vid = self._one_rvid
+                    warn('[3.9] %s overriding _many_rvid is deprecated, use '
+                         'reledit_ctrl rtag to control this' % self, DeprecationWarning)
+            except AttributeError:
+                pass
+        if vid is None:
+            vid = 'autolimited'
+        return vid
 
     def _compute_ttypes(self, rschema, role):
         dual_role = neg_role(role)
@@ -171,17 +180,15 @@
             ctrl_reload = self._cw.build_url(ctrl_reload)
         return ctrl_reload
 
-    def _compute_default_value(self, entity, rschema, role, default_value):
-        etype = entity.e_schema.type
-        ctrl_default = self._rules.get('default_value', default_value)
-        if ctrl_default:
-            return ctrl_default
-        if default_value is None:
-            if self._rules.get('default_showlabel'):
-                return xml_escape(self._cw._('<%s not specified>') %
-                                  display_name(self._cw, rschema.type, role))
-            return xml_escape(self._cw._('<not specified>'))
-        return default_value
+    def _compute_default_value(self, rschema, role):
+        default = self._rules.get('novalue_label')
+        if default is None:
+            if self._rules.get('novalue_include_rtype'):
+                default = self._cw._('<%s not specified>') % display_name(
+                    self._cw, rschema.type, role)
+            else:
+                default = self._cw._('<not specified>')
+        return xml_escape(default)
 
     def _is_composite(self):
         return self._rules.get('edit_target') == 'related'
@@ -233,11 +240,11 @@
         """ builds an id for the root div of a reledit widget """
         return '%s-%s-%s' % (rtype, role, entity_eid)
 
-    def _build_args(self, entity, rtype, role, formid, default_value, reload,
+    def _build_args(self, entity, rtype, role, formid, reload,
                     extradata=None):
         divid = self._build_divid(rtype, role, entity.eid)
         event_args = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'formid': formid,
-                      'reload' : json_dumps(reload), 'default_value' : default_value,
+                      'reload' : json_dumps(reload),
                       'role' : role, 'vid' : u''}
         if extradata:
             event_args.update(extradata)
@@ -269,9 +276,9 @@
             display_help=False, button_bar_class='buttonbar',
             display_progress_div=False)
 
-    def _build_form(self, entity, rtype, role, divid, formid, default_value, reload,
+    def _build_form(self, entity, rtype, role, divid, formid, reload,
                     display_label, related_entity, extradata=None, **formargs):
-        event_args = self._build_args(entity, rtype, role, formid, default_value,
+        event_args = self._build_args(entity, rtype, role, formid,
                                       reload, extradata)
         cancelclick = self._cancelclick % divid
         form = self._cw.vreg['forms'].select(
@@ -382,9 +389,9 @@
 class AutoClickAndEditFormView(ClickAndEditFormView):
     __regid__ = 'reledit'
 
-    def _build_form(self, entity, rtype, role, divid, formid, default_value, reload,
+    def _build_form(self, entity, rtype, role, divid, formid, reload,
                     display_label, related_entity, extradata=None, **formargs):
-        event_args = self._build_args(entity, rtype, role, 'base', default_value,
+        event_args = self._build_args(entity, rtype, role, 'base',
                                       reload, extradata)
         form = _DummyForm()
         form.event_args = event_args