summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2014-10-24 12:54:05 +0200
committerGéry Debongnie <ged@odoo.com>2014-10-29 08:38:18 +0100
commit2c6f576cc424d45125c664bfe7f26c7cd842bbac (patch)
tree8bfb2da0ccb281770119ad8b6bf1d9bf6b0f6566 /addons/web/static/src
parent1ccd87a03753c69a2e12c585de388434ef9ff557 (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.js64
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);
});