diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 681f2fe2f4b..5db66ab7260 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -2,6 +2,7 @@ openerp.web.search = function(openerp) { var QWeb = openerp.web.qweb; openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.SearchView# */{ + template: "EmptyComponent", /** * @constructs openerp.web.SearchView * @extends openerp.web.Widget @@ -12,8 +13,8 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search * @param view_id * @param defaults */ - init: function(parent, element_id, dataset, view_id, defaults) { - this._super(parent, element_id); + init: function(parent, dataset, view_id, defaults) { + this._super(parent); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; @@ -28,6 +29,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search this.ready = $.Deferred(); }, start: function() { + this._super(); this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded); return this.ready.promise(); }, diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 69bbf68c21f..e28936b850d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -10,20 +10,19 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# * view should be displayed (if there is one active). */ searchable: false, - template: "FormView", + form_template: "FormView", /** * @constructs openerp.web.FormView * @extends openerp.web.View * * @param {openerp.web.Session} session the current openerp session - * @param {String} element_id this view's root element id * @param {openerp.web.DataSet} dataset the dataset this view will work with * @param {String} view_id the identifier of the OpenERP view object * * @property {openerp.web.Registry} registry=openerp.web.form.widgets widgets registry for this form view instance */ - init: function(parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); + init: function(parent, dataset, view_id, options) { + this._super(parent); this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; @@ -45,6 +44,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# _.defaults(this.options, {"always_show_new_button": true}); }, start: function() { + this._super(); + return this.init_view(); + }, + init_view: function() { if (this.embedded_view) { var def = $.Deferred().then(this.on_loaded); var self = this; @@ -75,7 +78,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.fields_view = data; var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); - this.$element.html(QWeb.render(this.template, { 'frame': frame, 'view': this })); + this.$element.html(QWeb.render(this.form_template, { 'frame': frame, 'view': this })); _.each(this.widgets, function(w) { w.start(); }); @@ -480,11 +483,11 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ }, start: function() { this._super(); - this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, { + this.form = new openerp.web.FormView(this, this.dataset, this.view_id, { sidebar: false, pager: false }); - this.form.start(); + this.form.appendTo(this.$element); this.form.on_created.add_last(this.on_form_dialog_saved); this.form.on_saved.add_last(this.on_form_dialog_saved); return this; @@ -2022,7 +2025,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ self.on_ui_change(); }); - this.list_view = new openerp.web.form.Many2ManyListView(this, this.list_id, this.dataset, false, { + this.list_view = new openerp.web.form.Many2ManyListView(this, this.dataset, false, { 'addable': 'Add', 'selectable': self.multi_selection }); @@ -2031,7 +2034,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ self.is_started.resolve(); }); setTimeout(function () { - self.list_view.start(); + self.list_view.appendTo($("#" + self.list_id)); }, 0); }, set_value: function(value) { @@ -2141,7 +2144,7 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope this.searchview.stop(); } this.searchview = new openerp.web.SearchView(this, - this.element_id + "_search", this.dataset, false, { + this.dataset, false, { "selectable": !this.options.disable_multiple_selection, "deletable": false }); @@ -2170,15 +2173,17 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope self.stop(); }); self.view_list = new openerp.web.form.SelectCreateListView(self, - self.element_id + "_view_list", self.dataset, false, + self.dataset, false, {'deletable': false}); self.view_list.popup = self; - self.view_list.do_show(); - self.view_list.start().then(function() { + self.view_list.appendTo($("#" + self.element_id + "_view_list")).pipe(function() { + self.view_list.do_show(); + }).pipe(function() { self.searchview.do_search(); }); + }); - this.searchview.start(); + this.searchview.appendTo($("#" + this.element_id + "_search")); }, create_row: function(data) { var self = this; @@ -2205,11 +2210,11 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope this.view_list.$element.hide(); } this.dataset.index = null; - this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false); + this.view_form = new openerp.web.FormView(this, this.dataset, false); if (this.options.alternative_form_view) { this.view_form.set_embedded_view(this.options.alternative_form_view); } - this.view_form.start(); + this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form")); this.view_form.on_loaded.add_last(function() { var $buttons = self.view_form.$element.find(".oe_form_buttons"); $buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self})); @@ -2314,11 +2319,11 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp on_write_completed: function() {}, setup_form_view: function() { var self = this; - this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false); + this.view_form = new openerp.web.FormView(this, this.dataset, false); if (this.options.alternative_form_view) { this.view_form.set_embedded_view(this.options.alternative_form_view); } - this.view_form.start(); + this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form")); this.view_form.on_loaded.add_last(function() { var $buttons = self.view_form.$element.find(".oe_form_buttons"); $buttons.html(QWeb.render("FormOpenPopup.form.buttons")); diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 883fae81bbf..f8a89cd34a1 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -31,7 +31,6 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @extends openerp.web.View * * @param parent parent object - * @param element_id the id of the DOM elements this view should link itself to * @param {openerp.web.DataSet} dataset the dataset the view should work with * @param {String} view_id the listview's identifier, if any * @param {Object} options A set of options used to configure the view @@ -42,9 +41,9 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @param {Boolean} [options.sortable=true] is it possible to sort the table by clicking on column headers * @param {Boolean} [options.reorderable=true] is it possible to reorder list rows */ - init: function(parent, element_id, dataset, view_id, options) { + init: function(parent, dataset, view_id, options) { var self = this; - this._super(parent, element_id); + this._super(parent); this.set_default_options(_.extend({}, this.defaults, options || {})); this.dataset = dataset; this.model = dataset.model; @@ -128,6 +127,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @returns {$.Deferred} loading promise */ start: function() { + this._super(); this.$element.addClass('oe-listview'); return this.reload_view(null, null, true); }, diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index c38c43a4c9c..b5a5a3d8c10 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -180,11 +180,11 @@ openerp.web.list_editable = function (openerp) { } self.edition = true; self.edition_id = record_id; - self.edition_form = _.extend(new openerp.web.FormView( - self, $new_row.attr('id'), self.dataset, false), { - template: 'ListView.row.form', + self.edition_form = _.extend(new openerp.web.ListEditableFormView(self, self.dataset, false), { + form_template: 'ListView.row.form', registry: openerp.web.list.form.widgets }); + self.edition_form.appendTo($("#" + $new_row.attr('id'))); $.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () { // put in $.when just in case FormView.on_loaded becomes asynchronous $new_row.find('td') @@ -333,4 +333,8 @@ openerp.web.list_editable = function (openerp) { }); list_form_widgets.add(key, new_path); }); + + openerp.web.ListEditableFormView = openerp.web.FormView.extend({ + init_view: function() {} + }); }; diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 2a314f57fa8..7988d65805c 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -19,13 +19,12 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# * @extends openerp.web.View * * @param parent - * @param element_id * @param dataset * @param view_id * @param options */ - init: function(parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); + init: function(parent, dataset, view_id, options) { + this._super(parent); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 46c3f7e6b30..ad2e2131884 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -212,8 +212,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ if (!view.controller) { // Lazy loading of views var controllerclass = this.registry.get_object(view_type); - var controller = new controllerclass(this, this.element_id + '_view_' + view_type, - this.dataset, view.view_id, view.options); + var controller = new controllerclass(this, this.dataset, view.view_id, view.options); if (view.embedded_view) { controller.set_embedded_view(view.embedded_view); } @@ -232,7 +231,8 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ unique: true }); } - view_promise = controller.start(); + var container = $("#" + this.element_id + '_view_' + view_type); + view_promise = controller.appendTo(container); $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); }); @@ -285,14 +285,14 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.searchview.stop(); } this.searchview = new db.web.SearchView( - this, this.element_id + "_search", this.dataset, + this, this.dataset, view_id, search_defaults); this.searchview.on_search.add(function(domains, contexts, groupbys) { var controller = self.views[self.active_view].controller; controller.do_search.call(controller, domains, contexts, groupbys); }); - return this.searchview.start(); + return this.searchview.appendTo($("#" + this.element_id + "_search")); }, /** * Called when one of the view want to execute an action @@ -729,6 +729,7 @@ db.web.TranslateDialog = db.web.Dialog.extend({ }); db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ + template: "EmptyComponent", set_default_options: function(options) { this.options = options || {}; _.defaults(this.options, { diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 83ca819b4e6..c2b6ca0bdf2 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1425,4 +1425,7 @@ + +
+
diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 7b9fcc3ed33..e590280b933 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -8,8 +8,8 @@ QWeb.add_template('/web_calendar/static/src/xml/web_calendar.xml'); openerp.web.views.add('calendar', 'openerp.web_calendar.CalendarView'); openerp.web_calendar.CalendarView = openerp.web.View.extend({ // Dhtmlx scheduler ? - init: function(parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); + init: function(parent, dataset, view_id, options) { + this._super(parent); this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; @@ -30,6 +30,7 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ this.color_map = {}; }, start: function() { + this._super(); this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': true}, this.on_loaded); }, stop: function() { @@ -344,11 +345,11 @@ openerp.web_calendar.CalendarFormDialog = openerp.web.Dialog.extend({ }, start: function() { this._super(); - this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, { + this.form = new openerp.web.FormView(this, this.dataset, this.view_id, { sidebar: false, pager: false }); - this.form.start(); + this.form.appendTo(this.$element); this.form.on_created.add_last(this.on_form_dialog_saved); this.form.on_saved.add_last(this.on_form_dialog_saved); }, diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index a6855894a99..008d03d1548 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -288,13 +288,14 @@ if (!openerp.web_dashboard) { } openerp.web_dashboard.ConfigOverview = openerp.web.View.extend({ template: 'ConfigOverview', - init: function (parent, element_id) { - this._super(parent, element_id); + init: function (parent) { + this._super(parent); this.dataset = new openerp.web.DataSetSearch( this, 'ir.actions.todo'); this.dataset.domain = [['type', '=', 'manual']]; }, start: function () { + this._super(); $.when(this.dataset.read_slice(['state', 'action_id', 'category_id']), this.dataset.call('progress')) .then(this.on_records_loaded); @@ -352,6 +353,7 @@ openerp.web.client_actions.add( openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ template: 'ApplicationTiles', start: function () { + this._super(); var self = this; return new openerp.web.DataSetSearch( this, 'ir.ui.menu', null, [['parent_id', '=', false]]) @@ -393,6 +395,7 @@ openerp.web_dashboard.Widget = openerp.web.View.extend(/** @lends openerp.web_da this.widget_id = options.widget_id; }, start: function () { + this._super(); return new openerp.web.DataSet(this, 'res.widget').read_ids( [this.widget_id], ['title'], this.on_widget_loaded); }, diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 6ddaf26df98..b4aa62fd8f0 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -8,8 +8,8 @@ QWeb.add_template('/web_diagram/static/src/xml/base_diagram.xml'); openerp.web.views.add('diagram', 'openerp.web.DiagramView'); openerp.web.DiagramView = openerp.web.View.extend({ searchable: false, - init: function(parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); + init: function(parent, dataset, view_id, options) { + this._super(parent); this.set_default_options(options); this.view_manager = parent; this.dataset = dataset; @@ -20,6 +20,7 @@ openerp.web.DiagramView = openerp.web.View.extend({ this.ids = this.dataset.ids; }, start: function() { + this._super(); return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index 5bf04ff46c7..a045bae64e1 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -7,8 +7,8 @@ QWeb.add_template('/web_gantt/static/src/xml/web_gantt.xml'); openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView'); openerp.web_gantt.GanttView = openerp.web.View.extend({ -init: function(parent, element_id, dataset, view_id) { - this._super(parent, element_id); +init: function(parent, dataset, view_id) { + this._super(parent); this.view_manager = parent || new openerp.web.NullViewManager(); this.dataset = dataset; this.model = dataset.model; @@ -32,6 +32,7 @@ init: function(parent, element_id, dataset, view_id) { }, start: function() { + this._super(); this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "gantt"}, this.on_loaded); }, diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index f35e6ab112c..2a493b89166 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -17,8 +17,8 @@ QWeb.add_template('/web_graph/static/src/xml/web_graph.xml'); openerp.web.views.add('graph', 'openerp.web_graph.GraphView'); openerp.web_graph.GraphView = openerp.web.View.extend({ - init: function(parent, element_id, dataset, view_id) { - this._super(parent, element_id); + init: function(parent, dataset, view_id) { + this._super(parent); this.view_manager = parent; this.dataset = dataset; this.dataset_index = 0; @@ -33,6 +33,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ this.$element.hide(); }, start: function() { + this._super(); return this.rpc("/web_graph/graphview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, on_loaded: function(data) { diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index d90f4bc5ed8..8d6727facaa 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -4,8 +4,8 @@ var QWeb = openerp.web.qweb; QWeb.add_template('/web_kanban/static/src/xml/web_kanban.xml'); openerp.web.views.add('kanban', 'openerp.web_kanban.KanbanView'); openerp.web_kanban.KanbanView = openerp.web.View.extend({ - init: function (parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); + init: function (parent, dataset, view_id, options) { + this._super(parent); this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; @@ -24,6 +24,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ } }, start: function() { + this._super(); return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "kanban"}, this.on_loaded); }, on_loaded: function(data) { diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js index 2b9d8600fef..b52b4642b67 100644 --- a/addons/web_mobile/static/src/js/chrome_mobile.js +++ b/addons/web_mobile/static/src/js/chrome_mobile.js @@ -131,9 +131,9 @@ openerp.web_mobile.Shortcuts = openerp.web.Widget.extend({ id = $shortcut.data('menu'); res_id = $shortcut.data('res'); // this.header = new openerp.web_mobile.Header(this, "oe_header"); - this.listview = new openerp.web_mobile.ListView(this, "oe_list", res_id); + this.listview = new openerp.web_mobile.ListView(this, res_id); // this.header.start(); - this.listview.start(); + this.listview.appendTo($("#oe_list")); jQuery("#oe_header").find("h1").html($shortcut.data('name')); } }); @@ -252,8 +252,8 @@ openerp.web_mobile.Secondary = openerp.web.Widget.extend({ var $menu = $(ev.currentTarget); id = $menu.data('menu'); if (id) { - this.listview = new openerp.web_mobile.ListView(this, "oe_list", id); - this.listview.start(); + this.listview = new openerp.web_mobile.ListView(this, id); + this.listview.appendTo("#oe_list"); } jQuery("#oe_header").find("h1").html($menu.data('name')); }