summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/view_list_editable.js
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2012-03-27 17:55:27 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2012-03-27 17:55:27 +0200
commitdcb5133a05ec1a035cbf0999e89e1eae0d27803c (patch)
tree6fa80b98cb7a4a8506cd4a62545d55fc2d19092e /addons/web/static/src/js/view_list_editable.js
parentbf12dbeaf4fc0650652577929af26e2d74e88d99 (diff)
[imp] some improvements to editable list
bzr revid: nicolas.vanhoren@openerp.com-20120327155527-7fmlnpo4hzyx9buf
Diffstat (limited to 'addons/web/static/src/js/view_list_editable.js')
-rw-r--r--addons/web/static/src/js/view_list_editable.js77
1 files changed, 32 insertions, 45 deletions
diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js
index 78b4c45b8b7..7d70fce2a5f 100644
--- a/addons/web/static/src/js/view_list_editable.js
+++ b/addons/web/static/src/js/view_list_editable.js
@@ -235,6 +235,7 @@ openerp.web.list_editable = function (openerp) {
}
self.edition = true;
self.edition_id = record_id;
+ $new_row.addClass("oe_form_container");
self.edition_form = new openerp.web.ListEditableFormView(self.view, self.dataset, false);
self.edition_form.$element = $new_row;
self.edition_form.editable_list = self;
@@ -366,54 +367,40 @@ openerp.web.list_editable = function (openerp) {
});
}
});
- if (!openerp.web.list) {
- openerp.web.list = {};
- }
- if (!openerp.web.list.form) {
- openerp.web.list.form = {};
- }
- // TODO: EDITABLE LIST SHOULD USE openerp.web.FormRenderingEngine
- //openerp.web.list.form.WidgetFrame = openerp.web.form.WidgetFrame.extend({
- // form_template: 'ListView.row.frame'
- //});
- var form_widgets = openerp.web.form.widgets;
- openerp.web.list.form.widgets = form_widgets.extend({
- // 'frame': 'openerp.web.list.form.WidgetFrame'
- });
-
- // All form widgets inherit a problematic behavior from
- // openerp.web.form.WidgetFrame: the cell itself is removed when invisible
- // whether it's @invisible or @attrs[invisible]. In list view, only the
- // former should completely remove the cell. We need to override update_dom
- // on all widgets since we can't just hit on widget itself (I think)
- var list_form_widgets = openerp.web.list.form.widgets;
- _(form_widgets.map).each(function (widget_path, key) {
- if (key === 'frame') { return; }
- var new_path = 'openerp.web.list.form.' + key;
-
- openerp.web.list.form[key] = (form_widgets.get_object(key)).extend({
- update_dom: function () {
- this.$element.children().css('visibility', '');
- if (this.modifiers.tree_invisible) {
- var old_invisible = this.invisible;
- this.invisible = true;
- this._super();
- this.invisible = old_invisible;
- } else if (this.invisible) {
- this.$element.children().css('visibility', 'hidden');
- } else {
- this._super();
- }
- }
- });
- list_form_widgets.add(key, new_path);
- });
openerp.web.ListEditableFormView = openerp.web.FormView.extend({
- form_template: 'ListView.row.form',
init: function() {
- this._super.apply(this, arguments);
- this.registry = openerp.web.list.form.widgets;
+ this._super.apply(this, arguments);
+ this.rendering_engine = new openerp.web.ListEditableRenderingEngine(this);
+ },
+ renderElement: function() {}
+ });
+
+ openerp.web.ListEditableRenderingEngine = openerp.web.Class.extend({
+ init: function(view) {
+ this.view = view;
+ },
+ set_fields_view: function(fields_view) {
+ this.fvg = fields_view;
+ },
+ render_to: function($element) {
+ var self = this;
+
+ var xml = openerp.web.json_node_to_xml(this.fvg.arch);
+ var $xml = $(xml);
+ $xml.children().each(function(i, el) {
+ $td = $("<td>");
+ var tag_name = el.tagName.toLowerCase();
+ var key = tag_name;
+ if (tag_name === "field") {
+ var name = $(el).attr("name");
+ key = $(el).attr('widget') || self.fvg.fields[name].type;
+ }
+ var obj = self.view.registry.get_object(key);
+ var w = new (obj)(self.view, openerp.web.xml_to_json(el));
+ w.appendTo($td);
+ $td.appendTo($element);
+ });
},
});
};