[WIP] Breadcrumb

bzr revid: fme@openerp.com-20120703161720-kiavze0kmxs6v5uq
This commit is contained in:
Fabien Meghazi
2012-07-03 18:17:20 +02:00
parent fa5ef483d5
commit 6b6cd67196
2 changed files with 68 additions and 4 deletions
+55 -3
View File
@@ -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);
}
}
});
+13 -1
View File
@@ -396,6 +396,18 @@
</table>
</t>
<t t-name="BreadCrumb">
<t t-foreach="widget.items" t-as="item">
<t t-if="!item_last">
<a href="#" class="oe_breadcrumb_item" t-att-data-index="item_index" t-att-data-action_id="item.action.id">
<t t-esc="item.title"/>
</a> /
</t>
<t t-if="item_last">
<t t-esc="item.title"/>
</t>
</t>
</t>
<t t-name="ViewManager">
<div class="oe_view_manager">
<table class="oe_view_manager_header">
@@ -405,7 +417,7 @@
<tr class="oe_header_row oe_header_row_top">
<td colspan="2">
<h2 class="oe_view_title" t-if="widget.flags.display_title !== false">
<span class="oe_view_title_text"><t t-esc="widget.display_title()"/></span>
<span class="oe_view_title_text"><t t-raw="widget.display_title()"/></span>
</h2>
</td>
<td>