From a19a8d673e603186dd57f152e624ddfe7b9d401f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 11:11:31 +0100 Subject: [PATCH 01/13] [imp] externalized widget creation bzr revid: nicolas.vanhoren@openerp.com-20120207101131-vz0s9bxiemml48fs --- addons/web/static/src/js/view_form.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index bafac0395e8..644cc92bb65 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -93,7 +93,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (data) { this.fields_order = []; this.fields_view = data; - var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); + var frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); this.rendered = QWeb.render(this.form_template, { 'frame': frame, 'widget': this }); } @@ -946,14 +946,14 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ node.attrs.nolabel = '1'; } } - var widget = new (this.view.registry.get_any( - [node.attrs.widget, type.type, node.tag])) (this.view, node); + var widget = instanciate_widget(this.view.registry.get_any( + [node.attrs.widget, type.type, node.tag]), this.view, node); if (node.tag == 'field') { if (!this.view.default_focus_field || node.attrs.default_focus == '1') { this.view.default_focus_field = widget; } if (node.attrs.nolabel != '1') { - var label = new (this.view.registry.get_object('label')) (this.view, node); + var label = instanciate_widget(this.view.registry.get_object('label'), this.view, node); label["for"] = widget; this.add_widget(label, widget.colspan + 1); } @@ -986,7 +986,7 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ for (var i = 0; i < node.children.length; i++) { var n = node.children[i]; if (n.tag == "page") { - var page = new (this.view.registry.get_object('notebookpage'))( + var page = instanciate_widget(this.view.registry.get_object('notebookpage'), this.view, n, this, this.pages.length); this.pages.push(page); } @@ -3221,7 +3221,7 @@ openerp.web.form.WidgetHtml = openerp.web.form.Widget.extend({ $into.text(child); } else if (child.tag === 'field') { $into.append( - new (self.view.registry.get_object('frame'))( + instanciate_widget(self.view.registry.get_object('frame'), self.view, {tag: 'ueule', attrs: {}, children: [child] }) .render()); } else { @@ -3270,6 +3270,10 @@ openerp.web.form.widgets = new openerp.web.Registry({ 'html': 'openerp.web.form.WidgetHtml' }); +var instanciate_widget = function(claz, view, node, o1, o2) { + return new (claz)(view, node, o1, o2); +} + }; From ceaeea239dd357380dd27d8d3b642d696651f1b8 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 11:19:36 +0100 Subject: [PATCH 02/13] [imp] externalized form widget element_class creation bzr revid: nicolas.vanhoren@openerp.com-20120207101936-c40ot5upi5g57rnx --- addons/web/static/src/js/view_form.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 644cc92bb65..35d82aace76 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -759,13 +759,9 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo this.always_invisible = (this.modifiers.invisible && this.modifiers.invisible === true); this.type = this.type || node.tag; this.element_name = this.element_name || this.type; - this.element_class = [ - 'formview', this.view.view_id, this.element_name, - this.view.widgets_counter++].join("_"); this._super(view); - this.view.widgets[this.element_class] = this; this.children = node.children; this.colspan = parseInt(node.attrs.colspan || 1, 10); this.decrease_max_width = 0; @@ -3271,7 +3267,11 @@ openerp.web.form.widgets = new openerp.web.Registry({ }); var instanciate_widget = function(claz, view, node, o1, o2) { - return new (claz)(view, node, o1, o2); + var widget = new (claz)(view, node, o1, o2); + widget.element_class = ['formview', view.view_id, widget.element_name, + view.widgets_counter++].join("_"); + view.widgets[widget.element_class] = widget; + return widget; } From 5a4d636c44f1c290c9d50fce34d3206b89d61e77 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 11:23:07 +0100 Subject: [PATCH 03/13] [imp] externalized setting of $element bzr revid: nicolas.vanhoren@openerp.com-20120207102307-4vc60e6y61eokawf --- addons/web/static/src/js/view_form.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 35d82aace76..a69110cd480 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -99,6 +99,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } this.$element.html(this.rendered); _.each(this.widgets, function(w) { + w.$element = self.$element.find( + '.' + w.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); w.start(); }); this.$form_header = this.$element.find('.oe_form_header:first'); @@ -780,13 +782,8 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo this.align = 'center'; } - this.width = this.node.attrs.width; }, - start: function() { - this.$element = this.view.$element.find( - '.' + this.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); - }, stop: function() { this._super.apply(this, arguments); $('div.tipsy').stop().remove(); From 6143bf668008e054e4be6118327f1aa97beedf0a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 11:35:12 +0100 Subject: [PATCH 04/13] [imp] polished renderind methods bzr revid: nicolas.vanhoren@openerp.com-20120207103512-pzkugr4dm0ag7rsh --- addons/web/static/src/js/view_form.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a69110cd480..c29037f6c1d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -798,8 +798,10 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo this.$element.toggle(!this.invisible); }, render: function() { - var template = this.template; - return QWeb.render(template, { "widget": this }); + return QWeb.render(this.template, { "widget": this }); + }, + render_element: function() { + this.$element.html(this.render()); }, do_attach_tooltip: function(widget, trigger, options) { widget = widget || this; From ed9eeea3db818110aa7c01206267514890680ba9 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 12:01:29 +0100 Subject: [PATCH 05/13] [imp] nivified root frame bzr revid: nicolas.vanhoren@openerp.com-20120207110129-psfxmdiw9c2gvxtp --- addons/web/static/src/js/view_form.js | 6 +++++- addons/web/static/src/xml/base.xml | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c29037f6c1d..eb245155315 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -94,10 +94,14 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.fields_order = []; this.fields_view = data; var frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); + this.root_frame = frame; - this.rendered = QWeb.render(this.form_template, { 'frame': frame, 'widget': this }); + this.rendered = QWeb.render(this.form_template, {'widget': this}); } this.$element.html(this.rendered); + this.root_frame.$element = $(".oe_form_root_frame_placeholder", this.$element); + this.root_frame.render_element(); + _.each(this.widgets, function(w) { w.$element = self.$element.find( '.' + w.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 8a8e39e0b7e..241d323dc0e 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -743,7 +743,8 @@ - +
+
From a898146cc1cc98d638a98377e65f7c0f0b909383 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 12:09:31 +0100 Subject: [PATCH 06/13] [imp] nivified frames bzr revid: nicolas.vanhoren@openerp.com-20120207110931-3z2iz6c3qb3b9xv0 --- addons/web/static/src/js/view_form.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index eb245155315..0e0bbaa6505 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -898,6 +898,16 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ } this.set_row_cells_with(this.table[this.table.length - 1]); }, + render_element: function() { + this._super(); + var self = this; + _.each(this.table, function(row) { + _.each(row, function(td) { + td.$element = self.$element.find('.' + td.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); + td.render_element(); + }); + }); + }, add_row: function(){ if (this.table.length) { this.set_row_cells_with(this.table[this.table.length - 1]); From 9fb0a22b869bd52c406152a64758ac443a67afa4 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 12:14:51 +0100 Subject: [PATCH 07/13] [imp] nivified notebook bzr revid: nicolas.vanhoren@openerp.com-20120207111451-le08xlmqfhalkcgm --- addons/web/static/src/js/view_form.js | 10 ++++++++-- addons/web/static/src/xml/base.xml | 7 +++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 0e0bbaa6505..06442b169d1 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -103,8 +103,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.root_frame.render_element(); _.each(this.widgets, function(w) { - w.$element = self.$element.find( - '.' + w.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); w.start(); }); this.$form_header = this.$element.find('.oe_form_header:first'); @@ -1001,6 +999,14 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ } } }, + render_element: function() { + this._super(); + var self = this; + _.each(this.pages, function(page) { + page.$element = self.$element.find('.' + page.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); + page.render_element(); + }); + }, start: function() { var self = this; this._super.apply(this, arguments); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 241d323dc0e..76e2d5f15d9 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -837,7 +837,8 @@ - +
+
@@ -854,9 +855,7 @@
-
- -
+
From 7cb86686eafc6aed2a28ef62f523305242b3588a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 13:05:39 +0100 Subject: [PATCH 08/13] [imp] removed strange condition in on_loaded bzr revid: nicolas.vanhoren@openerp.com-20120207120539-ga91yxjqyqabgoa1 --- addons/web/static/src/js/view_form.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 06442b169d1..6978d14ee27 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -90,14 +90,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }, on_loaded: function(data) { var self = this; - if (data) { - this.fields_order = []; - this.fields_view = data; - var frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); - this.root_frame = frame; - - this.rendered = QWeb.render(this.form_template, {'widget': this}); + if (!data) { + throw "No data provided." } + this.fields_order = []; + this.fields_view = data; + var frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); + this.root_frame = frame; + + this.rendered = QWeb.render(this.form_template, {'widget': this}); + this.$element.html(this.rendered); this.root_frame.$element = $(".oe_form_root_frame_placeholder", this.$element); this.root_frame.render_element(); From 1ce8ef8f0f7bbfd6d0c0ad54eb4686605111a801 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 13:08:11 +0100 Subject: [PATCH 09/13] [imp] made start of widgets recursive bzr revid: nicolas.vanhoren@openerp.com-20120207120811-juejxm2mq3xcjxga --- addons/web/static/src/js/view_form.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 6978d14ee27..d63c7b1cb31 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -103,10 +103,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.$element.html(this.rendered); this.root_frame.$element = $(".oe_form_root_frame_placeholder", this.$element); this.root_frame.render_element(); + this.root_frame.start(); - _.each(this.widgets, function(w) { - w.start(); - }); this.$form_header = this.$element.find('.oe_form_header:first'); this.$form_header.find('div.oe_form_pager button[data-pager-action]').click(function() { var action = $(this).data('pager-action'); @@ -908,6 +906,13 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ }); }); }, + start: function() { + _.each(this.table, function(row) { + _.each(row, function(td) { + td.start(); + }); + }); + }, add_row: function(){ if (this.table.length) { this.set_row_cells_with(this.table[this.table.length - 1]); @@ -1028,6 +1033,9 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ gravity: 's' }); } + _.each(this.pages, function(page) { + page.start(); + }); }, do_select_first_visible_tab: function() { for (var i = 0; i < this.pages.length; i++) { From e5f05086cb5c6708964c5ca8ed0a61eec98a0b9a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 13:13:53 +0100 Subject: [PATCH 10/13] [imp] simplified escaping of form class namees bzr revid: nicolas.vanhoren@openerp.com-20120207121353-0fy9djh2osxjbdof --- addons/web/static/src/js/view_form.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d63c7b1cb31..7762064269b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -901,7 +901,7 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ var self = this; _.each(this.table, function(row) { _.each(row, function(td) { - td.$element = self.$element.find('.' + td.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); + td.$element = self.$element.find('.' + td.element_class); td.render_element(); }); }); @@ -1010,7 +1010,7 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ this._super(); var self = this; _.each(this.pages, function(page) { - page.$element = self.$element.find('.' + page.element_class.replace(/[^\r\n\f0-9A-Za-z_-]/g, "\\$&")); + page.$element = self.$element.find('.' + page.element_class); page.render_element(); }); }, @@ -3297,8 +3297,8 @@ openerp.web.form.widgets = new openerp.web.Registry({ var instanciate_widget = function(claz, view, node, o1, o2) { var widget = new (claz)(view, node, o1, o2); - widget.element_class = ['formview', view.view_id, widget.element_name, - view.widgets_counter++].join("_"); + widget.element_class = (['formview', view.view_id, widget.element_name, + view.widgets_counter++].join("_")).replace(/[^\r\n\f0-9A-Za-z_-]/g, "_"); view.widgets[widget.element_class] = widget; return widget; } From d0ae0403f5d73707782927680e19fa5944cf05fb Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 13:25:56 +0100 Subject: [PATCH 11/13] [imp] changed name of template in form widgets bzr revid: nicolas.vanhoren@openerp.com-20120207122556-f4lzt5kjy72fnssu --- addons/web/static/src/js/view_form.js | 56 +++++++++++++-------------- addons/web/static/src/js/view_page.js | 10 ++--- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7762064269b..d7d8076c0b8 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -748,7 +748,7 @@ openerp.web.form.compute_domain = function(expr, fields) { }; openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.form.Widget# */{ - template: 'Widget', + form_template: 'Widget', /** * @constructs openerp.web.form.Widget * @extends openerp.web.OldWidget @@ -800,7 +800,7 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo this.$element.toggle(!this.invisible); }, render: function() { - return QWeb.render(this.template, { "widget": this }); + return QWeb.render(this.form_template, { "widget": this }); }, render_element: function() { this.$element.html(this.render()); @@ -813,7 +813,7 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo delayOut: 0, fade: true, title: function() { - var template = widget.template + '.tooltip'; + var template = widget.form_template + '.tooltip'; if (!QWeb.has_template(template)) { template = 'WidgetLabel.tooltip'; } @@ -878,7 +878,7 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo }); openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ - template: 'WidgetFrame', + form_template: 'WidgetFrame', init: function(view, node) { this._super(view, node); this.columns = parseInt(node.attrs.col || 4, 10); @@ -989,11 +989,11 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ }); openerp.web.form.WidgetGroup = openerp.web.form.WidgetFrame.extend({ - template: 'WidgetGroup' + form_template: 'WidgetGroup' }), openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ - template: 'WidgetNotebook', + form_template: 'WidgetNotebook', init: function(view, node) { this._super(view, node); this.pages = []; @@ -1049,7 +1049,7 @@ openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({ }); openerp.web.form.WidgetNotebookPage = openerp.web.form.WidgetFrame.extend({ - template: 'WidgetNotebookPage', + form_template: 'WidgetNotebookPage', init: function(view, node, notebook, index) { this.notebook = notebook; this.index = index; @@ -1071,7 +1071,7 @@ openerp.web.form.WidgetNotebookPage = openerp.web.form.WidgetFrame.extend({ }); openerp.web.form.WidgetSeparator = openerp.web.form.Widget.extend({ - template: 'WidgetSeparator', + form_template: 'WidgetSeparator', init: function(view, node) { this._super(view, node); this.orientation = node.attrs.orientation || 'horizontal'; @@ -1083,7 +1083,7 @@ openerp.web.form.WidgetSeparator = openerp.web.form.Widget.extend({ }); openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ - template: 'WidgetButton', + form_template: 'WidgetButton', init: function(view, node) { this._super(view, node); this.force_disabled = false; @@ -1173,14 +1173,14 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }); openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({ - template: 'WidgetLabel', + form_template: 'WidgetLabel', init: function(view, node) { this.element_name = 'label_' + node.attrs.name; this._super(view, node); if (this.node.tag == 'label' && (this.align === 'left' || this.node.attrs.colspan || (this.string && this.string.length > 32))) { - this.template = "WidgetParagraph"; + this.form_template = "WidgetParagraph"; this.colspan = parseInt(this.node.attrs.colspan || 1, 10); // Widgets default to right-aligned, but paragraph defaults to // left-aligned @@ -1196,10 +1196,10 @@ openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({ }, render: function () { if (this['for'] && this.type !== 'label') { - return QWeb.render(this.template, {widget: this['for']}); + return QWeb.render(this.form_template, {widget: this['for']}); } // Actual label widgets should not have a false and have type label - return QWeb.render(this.template, {widget: this}); + return QWeb.render(this.form_template, {widget: this}); }, start: function() { this._super(); @@ -1329,7 +1329,7 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f }); openerp.web.form.FieldChar = openerp.web.form.Field.extend({ - template: 'FieldChar', + form_template: 'FieldChar', init: function (view, node) { this._super(view, node); this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1'; @@ -1374,7 +1374,7 @@ openerp.web.form.FieldID = openerp.web.form.FieldChar.extend({ }); openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({ - template: 'FieldEmail', + form_template: 'FieldEmail', start: function() { this._super.apply(this, arguments); this.$element.find('button').click(this.on_button_clicked); @@ -1389,7 +1389,7 @@ openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({ }); openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ - template: 'FieldUrl', + form_template: 'FieldUrl', start: function() { this._super.apply(this, arguments); this.$element.find('button').click(this.on_button_clicked); @@ -1512,7 +1512,7 @@ openerp.web.DateWidget = openerp.web.DateTimeWidget.extend({ }); openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({ - template: "EmptyComponent", + form_template: "EmptyComponent", build_widget: function() { return new openerp.web.DateTimeWidget(this); }, @@ -1549,7 +1549,7 @@ openerp.web.form.FieldDate = openerp.web.form.FieldDatetime.extend({ }); openerp.web.form.FieldText = openerp.web.form.Field.extend({ - template: 'FieldText', + form_template: 'FieldText', start: function() { this._super.apply(this, arguments); this.$element.find('textarea').change(this.on_ui_change); @@ -1610,7 +1610,7 @@ openerp.web.form.FieldText = openerp.web.form.Field.extend({ }); openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({ - template: 'FieldBoolean', + form_template: 'FieldBoolean', start: function() { var self = this; this._super.apply(this, arguments); @@ -1634,7 +1634,7 @@ openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({ }); openerp.web.form.FieldProgressBar = openerp.web.form.Field.extend({ - template: 'FieldProgressBar', + form_template: 'FieldProgressBar', start: function() { this._super.apply(this, arguments); this.$element.find('div').progressbar({ @@ -1658,7 +1658,7 @@ openerp.web.form.FieldTextXml = openerp.web.form.Field.extend({ }); openerp.web.form.FieldSelection = openerp.web.form.Field.extend({ - template: 'FieldSelection', + form_template: 'FieldSelection', init: function(view, node) { var self = this; this._super(view, node); @@ -1764,7 +1764,7 @@ openerp.web.form.dialog = function(content, options) { }; openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ - template: 'FieldMany2One', + form_template: 'FieldMany2One', init: function(view, node) { this._super(view, node); this.limit = 7; @@ -2133,7 +2133,7 @@ var commands = { } }; openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ - template: 'FieldOne2Many', + form_template: 'FieldOne2Many', multi_selection: false, init: function(view, node) { this._super(view, node); @@ -2500,7 +2500,7 @@ openerp.web.form.One2ManyFormView = openerp.web.FormView.extend({ }); openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ - template: 'FieldMany2Many', + form_template: 'FieldMany2Many', multi_selection: false, init: function(view, node) { this._super(view, node); @@ -2949,7 +2949,7 @@ openerp.web.form.FormOpenDataset = openerp.web.ProxyDataSet.extend({ }); openerp.web.form.FieldReference = openerp.web.form.Field.extend({ - template: 'FieldReference', + form_template: 'FieldReference', init: function(view, node) { this._super(view, node); this.fields_view = { @@ -3095,7 +3095,7 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ }); openerp.web.form.FieldBinaryFile = openerp.web.form.FieldBinary.extend({ - template: 'FieldBinaryFile', + form_template: 'FieldBinaryFile', update_dom: function() { this._super.apply(this, arguments); this.$element.find('.oe-binary-file-set, .oe-binary-file-clear').toggle(!this.readonly); @@ -3133,7 +3133,7 @@ openerp.web.form.FieldBinaryFile = openerp.web.form.FieldBinary.extend({ }); openerp.web.form.FieldBinaryImage = openerp.web.form.FieldBinary.extend({ - template: 'FieldBinaryImage', + form_template: 'FieldBinaryImage', start: function() { this._super.apply(this, arguments); this.$image = this.$element.find('img.oe-binary-image'); @@ -3168,7 +3168,7 @@ openerp.web.form.FieldBinaryImage = openerp.web.form.FieldBinary.extend({ }); openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ - template: "EmptyComponent", + form_template: "EmptyComponent", start: function() { this._super(); this.selected_value = null; diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index d5c37419764..be3863e9918 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -68,13 +68,13 @@ openerp.web.page = function (openerp) { openerp.web.page = {}; openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({ - template: 'WidgetFrame.readonly' + form_template: 'WidgetFrame.readonly' }); openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({ }); openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({ - template: 'FieldChar.readonly', + form_template: 'FieldChar.readonly', init: function(view, node) { this._super(view, node); this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1'; @@ -90,7 +90,7 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({ - template: 'FieldURI.readonly', + form_template: 'FieldURI.readonly', scheme: null, set_value: function (value) { var displayed = this._super.apply(this, arguments); @@ -117,7 +117,7 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({ - template: 'FieldChar.readonly', + form_template: 'FieldChar.readonly', init: function(view, node) { // lifted straight from r/w version var self = this; @@ -222,7 +222,7 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.FieldBinaryFileReadonly = openerp.web.form.FieldBinary.extend({ - template: 'FieldURI.readonly', + form_template: 'FieldURI.readonly', start: function() { this._super.apply(this, arguments); var self = this; From 58dee55da3c6a14c5bd701c4564b6b808fac627c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 13:34:25 +0100 Subject: [PATCH 12/13] [imp] put some more things in old widget bzr revid: nicolas.vanhoren@openerp.com-20120207123425-02jofowbat61e500 --- addons/web/static/src/js/core.js | 36 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 3e81342b9f8..e5e1bc4a066 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -1043,27 +1043,19 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W }, on_inserted: function(element, widget) {}, /** - * Renders the element and insert the result of the render() method in this.$element. + * Renders the element. The default implementation renders the widget using QWeb, + * `this.template` must be defined. The context given to QWeb contains the "widget" + * key that references `this`. */ render_element: function() { - var rendered = this.render(); + var rendered = null; + if (this.template) + rendered = openerp.web.qweb.render(this.template, {widget: this}); if (rendered) { var elem = $(rendered); this.$element.replaceWith(elem); this.$element = elem; } - return this; - }, - /** - * Renders the widget using QWeb, `this.template` must be defined. - * The context given to QWeb contains the "widget" key that references `this`. - * - * @param {Object} additional Additional context arguments to pass to the template. - */ - render: function (additional) { - if (this.template) - return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); - return null; }, /** * Method called after rendering. Mostly used to bind actions, perform asynchronous @@ -1141,7 +1133,21 @@ openerp.web.OldWidget = openerp.web.Widget.extend({ this.element_id = this.element_id || _.uniqueId('widget-'); var tmp = document.getElementById(this.element_id); this.$element = tmp ? $(tmp) : $(document.createElement(this.tag_name)); - } + }, + render_element: function() { + var rendered = this.render(); + if (rendered) { + var elem = $(rendered); + this.$element.replaceWith(elem); + this.$element = elem; + } + return this; + }, + render: function (additional) { + if (this.template) + return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {})); + return null; + }, }); openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.web.TranslationDataBase# */{ From 243d524978bf2a4aaab508984c87bbf9af9d1810 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 7 Feb 2012 14:01:25 +0100 Subject: [PATCH 13/13] [imp] polish render and render_element usage bzr revid: nicolas.vanhoren@openerp.com-20120207130125-xexqks24jb7mguy8 --- addons/web/static/src/js/view_form.js | 42 +++++++++---------- addons/web/static/src/xml/base.xml | 2 - .../web_dashboard/static/src/js/dashboard.js | 11 ++--- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d7d8076c0b8..3dcda5e5c08 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -91,19 +91,19 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# on_loaded: function(data) { var self = this; if (!data) { - throw "No data provided." + throw "No data provided."; + } + if (this.root_frame) { + throw "Form view does not support multiple calls to on_loaded"; } this.fields_order = []; this.fields_view = data; - var frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); - this.root_frame = frame; this.rendered = QWeb.render(this.form_template, {'widget': this}); - this.$element.html(this.rendered); - this.root_frame.$element = $(".oe_form_root_frame_placeholder", this.$element); - this.root_frame.render_element(); - this.root_frame.start(); + + this.root_frame = instanciate_widget(this.registry.get_object('frame'), this, this.fields_view.arch); + this.root_frame.appendTo($(".oe_form_header", this.$element)); this.$form_header = this.$element.find('.oe_form_header:first'); this.$form_header.find('div.oe_form_pager button[data-pager-action]').click(function() { @@ -799,11 +799,8 @@ openerp.web.form.Widget = openerp.web.OldWidget.extend(/** @lends openerp.web.fo update_dom: function() { this.$element.toggle(!this.invisible); }, - render: function() { - return QWeb.render(this.form_template, { "widget": this }); - }, render_element: function() { - this.$element.html(this.render()); + this.$element.html(QWeb.render(this.form_template, { "widget": this })); }, do_attach_tooltip: function(widget, trigger, options) { widget = widget || this; @@ -1194,12 +1191,15 @@ openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({ this.nowrap = true; } }, - render: function () { + render_element: function() { + var rendered; if (this['for'] && this.type !== 'label') { - return QWeb.render(this.form_template, {widget: this['for']}); + rendered = QWeb.render(this.form_template, {widget: this['for']}); + } else { + // Actual label widgets should not have a false and have type label + rendered = QWeb.render(this.form_template, {widget: this}); } - // Actual label widgets should not have a false and have type label - return QWeb.render(this.form_template, {widget: this}); + this.$element.html(rendered); }, start: function() { this._super(); @@ -3233,10 +3233,11 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ }); openerp.web.form.WidgetHtml = openerp.web.form.Widget.extend({ - render: function () { + render_element: function () { var $root = $('
'); this.render_children(this, $root); - return $root.html(); + var rendered = $root.html(); + this.$element.html(rendered); }, render_children: function (object, $into) { var self = this, @@ -3245,10 +3246,9 @@ openerp.web.form.WidgetHtml = openerp.web.form.Widget.extend({ if (typeof child === 'string') { $into.text(child); } else if (child.tag === 'field') { - $into.append( - instanciate_widget(self.view.registry.get_object('frame'), - self.view, {tag: 'ueule', attrs: {}, children: [child] }) - .render()); + var widget = instanciate_widget(self.view.registry.get_object('frame'), + self.view, {tag: 'ueule', attrs: {}, children: [child] }); + widget.appendTo($into); } else { var $child = $(document.createElement(child.tag)) .attr(child.attrs) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 76e2d5f15d9..2871552e590 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -743,8 +743,6 @@
-
-
diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index ec2975d48d4..23a62cb18e7 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -10,7 +10,7 @@ if (!openerp.web_dashboard) { openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ init: function(view, node) { this._super(view, node); - this.template = 'DashBoard'; + this.form_template = 'DashBoard'; this.actions_attrs = {}; this.action_managers = []; }, @@ -225,7 +225,7 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ }); } }, - render: function() { + render_element: function() { // We should start with three columns available for (var i = this.node.children.length; i < 3; i++) { this.node.children.push({ @@ -234,7 +234,8 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ children: [] }); } - return QWeb.render(this.template, this); + var rendered = QWeb.render(this.form_template, this); + this.$element.html(rendered); }, do_reload: function() { var view_manager = this.view.widget_parent, @@ -244,7 +245,7 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ } }); openerp.web.form.DashBoardLegacy = openerp.web.form.DashBoard.extend({ - render: function() { + render_element: function() { if (this.node.tag == 'hpaned') { this.node.attrs.style = '2-1'; } else if (this.node.tag == 'vpaned') { @@ -263,7 +264,7 @@ openerp.web.form.DashBoardLegacy = openerp.web.form.DashBoard.extend({ } } }); - return this._super(this, arguments); + this._super(this); } });