diff options
| author | Fabien Meghazi <fme@openerp.com> | 2012-07-10 18:29:13 +0200 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2012-07-10 18:29:13 +0200 |
| commit | 14c66c73767c293d99145a60d8dca5ffe2ffa512 (patch) | |
| tree | 7a7f704fd278a9237b62eeb55681f912dbf6aff5 /addons/web/static/src/js | |
| parent | 5ae60d10df16862ad9f3179e24902d4f161f3a6d (diff) | |
[WIP] Refactor again
bzr revid: fme@openerp.com-20120710162913-6gyda8y3e6vu86ph
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views.js | 94 |
1 files changed, 56 insertions, 38 deletions
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index eaf9487473e..df57dc8e9be 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -165,7 +165,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ } this.inner_action = action; var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); - this.breadcrumb.push_actionmanager(inner_viewmanager); + this.breadcrumb.push_viewmanager(inner_viewmanager); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + (action.target || 'current')); } @@ -236,6 +236,7 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ this.action_manager.$element.on('click', '.oe_breadcrumb_item', this.on_item_clicked); }, push: function(item) { + item.id = _.uniqueId('breadcrumb_'); item.show = item.show || function() { item.widget.$element.show(); }; @@ -251,43 +252,58 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ console.log("breadcrumb push", item); this.items.push(item); }, - push_actionmanager: function(am, view_type) { + push_viewmanager: function(vm, view_type) { var self = this; - var bookmarked_view = view_type || am.active_view || am.views_src[0].view_type; + var bookmarked_view = view_type || vm.active_view || vm.views_src[0].view_type; + var views = [bookmarked_view]; + vm.on_mode_switch.add(function(mode) { + var last = views.slice(-1)[0]; + if (mode !== last) { + if (mode !== 'form') { + views.length = 0; + } + views.push(mode); + } + console.log(views); + }); this.push({ - widget: am, + widget: vm, view: bookmarked_view, - show: function() { - am.$element.show(); - if (am.active_view !== bookmarked_view) { - am.on_mode_switch(bookmarked_view); - console.log("breadcrunb pushaction man ager set title on show"); - am.set_title(); + show: function($e) { + var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + var view_to_select = views[index]; + vm.$element.show(); + if (vm.active_view !== view_to_select) { + vm.on_mode_switch(view_to_select); + vm.set_title(); } }, get_title: function() { - return am.views[bookmarked_view].controller.get('title'); + return _.map(views, function(v) { + return vm.views[v].controller.get('title'); + }); } }); - if (bookmarked_view !== 'form') { - am.on_mode_switch.add_first(function(mode) { - if (mode === 'form') { - self.push_actionmanager(am, 'form'); + }, + get_title: function() { + var titles = []; + for (var i = 0; i < this.items.length; i += 1) { + var item = this.items[i]; + var tit = item.get_title(); + if (!_.isArray(tit)) { + tit = [tit]; + } + for (var j = 0; j < tit.length; j += 1) { + var t= tit[j]; + var label = _.escape(t); + if (i === this.items.length - 1 && j === tit.length - 1) { + titles.push(label); } else { - var previous = self.items[self.items.length - 1]; - if (previous.widget === am && previous && previous.view === 'form') { - self.pop(); - } + titles.push(_.str.sprintf('<a href="#" class="oe_breadcrumb_item" data-id="%s">%s</a>', item.id, label)); } - }); + } } - }, - pop: function() { - this.remove_item(this.items.length - 1); - this.select_item(this.items.length - 1); - }, - get_title: function() { - return QWeb.render('BreadCrumb', { widget: this }); + return titles.join(' / '); }, hide_items: function() { _.each(this.items, function(i) { @@ -296,16 +312,19 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ }, 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); + var item; + for (var i = 0; i < this.items.length; i += 1) { + var it = this.items[i]; + if (it.id == $e.data('id')) { + item = it; + continue; + } + if (item) { + this.remove_item(i); + } } - var item = this.items[index]; if (item) { - item.show(); + item.show($e); } else { console.warn("Breadcrumb: Can't select item at index", index); } @@ -315,9 +334,9 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ var item = this.items.splice(index, 1)[0]; if (item) { var dups = _.filter(this.items, function(it) { - return item.widget === it.widget; + return item.widget === it.widget; }); - if (dups.length === 0) { + if (!dups.length) { console.log("Breadcrumb Destroy", item); item.destroy(); } @@ -460,7 +479,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ controller.on("change:title", this, function() { if (self.active_view === view_type) { - console.log("controller.on change:title"); self.set_title(controller.get('title')); } }); |
