web/views/formrenderers.py
changeset 3524 a3431f4e2f40
parent 3478 f043f71017a3
parent 3519 e3ce9db1133c
child 3589 a5432f99f2d9
--- a/web/views/formrenderers.py	Mon Sep 28 16:39:10 2009 +0200
+++ b/web/views/formrenderers.py	Tue Sep 29 15:58:44 2009 +0200
@@ -169,7 +169,6 @@
         return tag + '>'
 
     def render_fields(self, w, form, values):
-        form.form_build_context(values)
         fields = self._render_hidden_fields(w, form)
         if fields:
             self._render_fields(fields, w, form)
@@ -292,7 +291,7 @@
     _main_display_fields = None
 
     def render_fields(self, w, form, values):
-        if not form.is_subform:
+        if form.parent_form is None:
             w(u'<table class="listing">')
             subfields = [field for field in form.forms[0].fields
                          if self.display_field(form, field)
@@ -308,14 +307,14 @@
                     w(u'<th>%s</th>' % self._cw._(field.label))
                 w(u'</tr>')
         super(EntityCompositeFormRenderer, self).render_fields(w, form, values)
-        if not form.is_subform:
+        if form.parent_form is None:
             w(u'</table>')
             if self._main_display_fields:
                 super(EntityCompositeFormRenderer, self)._render_fields(
                     self._main_display_fields, w, form)
 
     def _render_fields(self, fields, w, form):
-        if form.is_subform:
+        if form.parent_form is not None:
             entity = form.edited_entity
             values = form.form_previous_values
             qeid = eid_param('eid', entity.eid)
@@ -351,16 +350,19 @@
     # needs some additional points in some case (XXX explain cases)
     __select__ = entity_implements('Any') & yes()
 
-    _options = FormRenderer._options + ('display_relations_form',)
+    _options = FormRenderer._options + ('display_relations_form', 'main_form_title')
     display_relations_form = True
+    main_form_title = _('main information')
 
     def render(self, form, values):
         rendered = super(EntityFormRenderer, self).render(form, values)
         return rendered + u'</div>' # close extra div introducted by open_form
 
     def open_form(self, form, values):
-        attrs_fs_label = ('<div class="iformTitle"><span>%s</span></div>'
-                          % self._cw._('main informations'))
+        attrs_fs_label = ''
+        if self.main_form_title:
+            attrs_fs_label += ('<div class="iformTitle"><span>%s</span></div>'
+                               % self.req._(self.main_form_title))
         attrs_fs_label += '<div class="formBody">'
         return attrs_fs_label + super(EntityFormRenderer, self).open_form(form, values)
 
@@ -460,51 +462,23 @@
 
     def inline_entities_form(self, w, form):
         """create a form to edit entity's inlined relations"""
-        if not hasattr(form, 'inlined_relations'):
+        if not hasattr(form, 'inlined_form_views'):
             return
-        for rschema, targettypes, role in form.inlined_relations():
-            # show inline forms only if there's one possible target type
-            # for rschema
-            if len(targettypes) != 1:
-                self.warning('entity related by the %s relation should have '
-                             'inlined form but there is multiple target types, '
-                             'dunno what to do', rschema)
-                continue
-            targettype = targettypes[0].type
-            if form.should_inline_relation_form(rschema, targettype, role):
-                self.inline_relation_form(w, form, rschema, targettype, role)
+        keysinorder = []
+        formviews = form.inlined_form_views()
+        for formview in formviews:
+            if not (formview.rtype, formview.role) in keysinorder:
+                keysinorder.append( (formview.rtype, formview.role) )
+        for key in keysinorder:
+            self.inline_relation_form(w, form, [fv for fv in formviews
+                                                if (fv.rtype, fv.role) == key])
 
-    def inline_relation_form(self, w, form, rschema, targettype, role):
-        entity = form.edited_entity
-        __ = self._cw.pgettext
-        i18nctx = 'inlined:%s.%s.%s' % (entity.e_schema, rschema, role)
-        w(u'<div id="inline%sslot">' % rschema)
-        existant = form.display_inline_edition_form(w, rschema, targettype,
-                                                    role, i18nctx)
-        if role == 'subject':
-            card = rschema.rproperty(entity.e_schema, targettype, 'cardinality')[0]
-        else:
-            card = rschema.rproperty(targettype, entity.e_schema, 'cardinality')[1]
-        # there is no related entity and we need at least one: we need to
-        # display one explicit inline-creation view
-        if form.should_display_inline_creation_form(rschema, existant, card):
-            form.display_inline_creation_form(w, rschema, targettype,
-                                              role, i18nctx)
-            existant = True
-        # we can create more than one related entity, we thus display a link
-        # to add new related entities
-        if form.should_display_add_new_relation_link(rschema, existant, card):
-            divid = "addNew%s%s%s:%s" % (targettype, rschema, role, entity.eid)
-            w(u'<div class="inlinedform" id="%s" cubicweb:limit="true">'
-              % divid)
-            js = "addInlineCreationForm('%s', '%s', '%s', '%s', '%s')" % (
-                entity.eid, targettype, rschema, role, i18nctx)
-            if form.should_hide_add_new_relation_link(rschema, card):
-                js = "toggleVisibility('%s'); %s" % (divid, js)
-            w(u'<a class="addEntity" id="add%s:%slink" href="javascript: %s" >+ %s.</a>'
-              % (rschema, entity.eid, js, __(i18nctx, 'add a %s' % targettype)))
-            w(u'</div>')
-            w(u'<div class="trame_grise">&#160;</div>')
+    def inline_relation_form(self, w, form, formviews):
+        i18nctx = 'inlined:%s.%s.%s' % (form.edited_entity.e_schema,
+                                        formviews[0].rtype, formviews[0].role)
+        w(u'<div id="inline%sslot">' % formviews[0].rtype)
+        for formview in formviews:
+            w(formview.render(i18nctx=i18nctx, row=formview.row, col=formview.col))
         w(u'</div>')
 
 
@@ -541,7 +515,6 @@
         return '\n'.join(data)
 
     def render_fields(self, w, form, values):
-        form.form_build_context(values)
         w(u'<fieldset id="fs-%(divid)s">' % values)
         fields = self._render_hidden_fields(w, form)
         w(u'</fieldset>')