From 6b6cd671965b074aa81beaf27c3f7d987f44f166 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 3 Jul 2012 18:17:20 +0200 Subject: [PATCH] [WIP] Breadcrumb bzr revid: fme@openerp.com-20120703161720-kiavze0kmxs6v5uq --- addons/web/static/src/js/views.js | 58 ++++++++++++++++++++++++++++-- addons/web/static/src/xml/base.xml | 14 +++++++- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 98df8a0af0d..d623c889e55 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -15,6 +15,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_viewmanager = null; this.client_widget = null; }, + start: function() { + this._super.apply(this, arguments); + this.bread_crumb = new instance.web.BreadCrumb(this); + }, dialog_stop: function () { if (this.dialog) { this.dialog_viewmanager.destroy(); @@ -150,7 +154,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog.open(); } else { this.dialog_stop(); - this.content_stop(); + //this.content_stop(); + this.bread_crumb.hide_all(); if(action.menu_id) { return this.getParent().do_action(action, function () { instance.webclient.menu.open_menu(action.menu_id); @@ -160,6 +165,11 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); + this.bread_crumb.add({ + view_manager: this.inner_viewmanager, + action: action, + title: action.name + }); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -214,6 +224,43 @@ instance.web.ActionManager = instance.web.Widget.extend({ } }); +instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ + init: function(parent) { + this._super(parent); + this.action_manager = parent; + this.items = []; + this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); + }, + add: function(item) { + this.items.push(item); + }, + hide_all: function() { + _.each(this.items, function(i) { + i.view_manager.$element.hide(); + }); + }, + get_title: function() { + return QWeb.render('BreadCrumb', { widget: this }); + }, + on_item_clicked: function(ev) { + var $e = $(ev.target); + var index = $e.data('index'); + this.select_item(index); + }, + select_item: function(index) { + for (var i = index + 1; i < this.items.length; i += 1) { + this.remove_item(i); + } + this.items[index].view_manager.$element.show(); + }, + remove_item: function(index) { + var item = this.items.splice(index, 1)[0]; + if (item) { + item.view_manager.destroy(); + } + } +}); + instance.web.ViewManager = instance.web.Widget.extend({ template: "ViewManager", init: function(parent, dataset, views, flags) { @@ -350,7 +397,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ } }); - self.$element.find('.oe_view_title_text:first').text( + self.$element.find('.oe_view_title_text:first').html( self.display_title()); }); return view_promise; @@ -703,7 +750,12 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ }); }, display_title: function () { - return this.action.name; + var am = this.getParent(); + if (am) { + return am.bread_crumb.get_title(); + } else { + return _.escape(this.action.name); + } } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 29a7a61aa30..45cf3acafb3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -396,6 +396,18 @@ + + + + + + / + + + + + +
@@ -405,7 +417,7 @@

- +