diff options
| author | Géry Debongnie <ged@odoo.com> | 2014-10-24 12:54:05 +0200 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2014-10-29 08:38:18 +0100 |
| commit | 2c6f576cc424d45125c664bfe7f26c7cd842bbac (patch) | |
| tree | 8bfb2da0ccb281770119ad8b6bf1d9bf6b0f6566 /addons/web/static/src | |
| parent | 1ccd87a03753c69a2e12c585de388434ef9ff557 (diff) | |
[FIX] make sure that breadcrumbs are generic (web client)
breadcrumbs incorrectly assumed that they were made with views inside
viewmanagers. But client actions can be used in breadcrumbs, so the
action manager should play nice with these widgets.
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/views.js | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 12049d51886..b06ed90809c 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -45,6 +45,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.widgets = []; } if (widget instanceof instance.web.Widget) { + var title = widget.get('title') || action.display_name || action.name; + widget.set('title', title); this.widgets.push(widget); } else { this.widgets.push({ @@ -65,25 +67,35 @@ instance.web.ActionManager = instance.web.Widget.extend({ }); }, get_breadcrumbs: function () { - return _.flatten(_.map(this.widgets, function (vm) { - return vm.view_stack.map(function (view, index) { - return { - title: view.controller.get('title') || vm.title, - index: index, - view_manager: vm, - }; - }); + return _.flatten(_.map(this.widgets, function (widget) { + if (widget instanceof instance.web.ViewManager) { + return widget.view_stack.map(function (view, index) { + return { + title: view.controller.get('title') || widget.title, + index: index, + widget: widget, + }; + }); + } else { + return {title: widget.get('title'), widget: widget }; + } }), true); }, history_back: function() { - var widget = _.last(this.widgets), - nbr_views = widget.view_stack.length; - if (nbr_views > 1) { - this.select_widget(widget, nbr_views - 2); + var widget = _.last(this.widgets); + if (widget instanceof instance.web.ViewManager) { + var nbr_views = widget.view_stack.length; + if (nbr_views > 1) { + this.select_widget(widget, nbr_views - 2); + } else if (this.widgets.length > 1) { + widget = this.widgets[this.widgets.length -2]; + nbr_views = widget.view_stack.length; + this.select_view(widget, nbr_views - 2) + } } else if (this.widgets.length > 1) { - widget = this.widgets[this.widgets.length -2]; - nbr_views = widget.view_stack.length; - this.select_view(widgets, nbr_views - 2) + widget = this.widgets[this.widgets.length - 2]; + var index = widget.view_stack && widget.view_stack.length - 1; + this.select_widget(widget, index); } }, select_widget: function(widget, index) { @@ -91,17 +103,17 @@ instance.web.ActionManager = instance.web.Widget.extend({ if (this.webclient.has_uncommitted_changes()) { return false; } - var vm_index = this.widgets.indexOf(widget); - if (widget.select_view) { - widget.select_view(index).done(function () { - _.each(self.widgets.splice(vm_index + 1), function (vm) { - vm.destroy(); - }); - self.inner_widget = _.last(self.widgets); - self.inner_widget.display_breadcrumbs(); - self.inner_widget.$el.show(); + var widget_index = this.widgets.indexOf(widget), + def = $.when(widget.select_view && widget.select_view(index)); + + def.done(function () { + _.each(self.widgets.splice(widget_index + 1), function (w) { + w.destroy(); }); - } + self.inner_widget = _.last(self.widgets); + self.inner_widget.display_breadcrumbs && self.inner_widget.display_breadcrumbs(); + self.inner_widget.$el.show(); + }); }, clear_widgets: function(widgets) { _.invoke(widgets || this.widgets, 'destroy'); @@ -665,7 +677,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ var $breadcrumbs = _.map(_.initial(breadcrumbs), function (bc) { var $link = $('<a>').text(bc.title); $link.click(function () { - self.action_manager.select_widget(bc.view_manager, bc.index); + self.action_manager.select_widget(bc.widget, bc.index); }); return $('<li>').append($link); }); |
