diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js
index 5079944c433..ecce83342a2 100644
--- a/addons/base/static/src/js/chrome.js
+++ b/addons/base/static/src/js/chrome.js
@@ -25,8 +25,8 @@ openerp.base.Session = openerp.base.Widget.extend( /** @lends openerp.base.Sessi
this.module_list = [];
this.module_loaded = {"base": true};
this.context = {};
- this.sc_list ={};
- this.active_id = "";
+ this.shortcuts = [];
+ this.active_id = null;
},
start: function() {
this.session_restore();
@@ -863,9 +863,37 @@ openerp.base.Header = openerp.base.Widget.extend({
return this.shortcut_load();
},
shortcut_load :function(){
- var self = this;
+ var self = this,
+ sc = self.session.shortcuts,
+ shortcuts_ds = new openerp.base.DataSet(this, 'ir.ui.view_sc');
+ // TODO: better way to communicate between sections.
+ // sc.bindings, because jquery does not bind/trigger on arrays...
+ if (!sc.binding) {
+ sc.binding = {};
+ $(sc.binding).bind({
+ 'add': function (e, attrs) {
+ var $shortcut = $('
', {
+ 'data-id': attrs.res_id
+ }).text(attrs.name)
+ .appendTo(self.$element.find('.oe-shortcuts ul'));
+ shortcuts_ds.create(attrs, function (out) {
+ $shortcut.data('shortcut-id', out.result);
+ });
+ },
+ 'remove-current': function () {
+ var menu_id = self.session.active_id;
+ var $shortcut = self.$element
+ .find('.oe-shortcuts li[data-id=' + menu_id + ']');
+ var shortcut_id = $shortcut.data('shortcut-id');
+ $shortcut.remove();
+ shortcuts_ds.unlink([shortcut_id]);
+ }
+ });
+ }
return this.rpc('/base/session/sc_list', {}, function(shortcuts) {
- self.session.sc_list = shortcuts;
+ sc.splice(0, sc.length);
+ sc.push.apply(sc, shortcuts);
+
self.$element.find('.oe-shortcuts')
.html(QWeb.render('Shortcuts', {'shortcuts': shortcuts}))
.undelegate('li', 'click')
diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 08520ca7d43..6eb333b8a8a 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -369,7 +369,7 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
return;
}
$shortcut_toggle.removeClass('oe-shortcut-remove').show();
- if (_(this.session.sc_list).detect(function (shortcut) {
+ if (_(this.session.shortcuts).detect(function (shortcut) {
return shortcut.res_id === self.session.active_id; })) {
$shortcut_toggle.addClass("oe-shortcut-remove");
}
@@ -378,15 +378,13 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
shortcut_add_remove: function() {
var self = this;
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
- var dataset_shortcut = new openerp.base.DataSet(this, 'ir.ui.view_sc');
$shortcut_toggle.click(function() {
if ($shortcut_toggle.hasClass("oe-shortcut-remove")) {
- var unlink_id = $(".oe-shortcuts li[data-id=" + self.session.active_id + "]").data('shortcut-id');
- dataset_shortcut.unlink([parseInt(unlink_id)]);
+ $(self.session.shortcuts.binding).trigger('remove-current');
$shortcut_toggle.removeClass("oe-shortcut-remove");
} else {
- dataset_shortcut.create({
- 'user_id': self.uid,
+ $(self.session.shortcuts.binding).trigger('add', {
+ 'user_id': self.session.uid,
'res_id': self.session.active_id,
'resource': 'ir.ui.menu',
'name': self.action.name