summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-08-26 10:47:58 +0200
committerXavier Morel <xmo@openerp.com>2011-08-26 10:47:58 +0200
commit6bb5138f9fa39fb4f85ace195a0f735b8f8e51dd (patch)
tree0faa299b53192c470121bc87f362fe69739da8ee /addons/base/static/src
parent8cba17fcc64d119f75599f7151d60b38b6928b68 (diff)
parent6815ad29a880450f9ffea1830a24638a0293986a (diff)
[FIX] bugs in shortcuts management: desync between backing collection and DOM, multiple click events on shortcut star
bzr revid: xmo@openerp.com-20110826084758-g08o83wi9eaj3vdl
Diffstat (limited to 'addons/base/static/src')
-rw-r--r--addons/base/static/src/js/chrome.js18
-rw-r--r--addons/base/static/src/js/views.js30
2 files changed, 28 insertions, 20 deletions
diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js
index 954e2024965..a4a3b73cc77 100644
--- a/addons/base/static/src/js/chrome.js
+++ b/addons/base/static/src/js/chrome.js
@@ -590,22 +590,27 @@ openerp.base.Header = openerp.base.Widget.extend({
sc.binding = {};
$(sc.binding).bind({
'add': function (e, attrs) {
- var $shortcut = $('<li>', {
+ shortcuts_ds.create(attrs, function (out) {
+ $('<li>', {
+ 'data-shortcut-id':out.result,
'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);
+ .appendTo(self.$element.find('.oe-shortcuts ul'));
+ attrs.id = out.result;
+ sc.push(attrs);
});
},
'remove-current': function () {
var menu_id = self.session.active_id;
var $shortcut = self.$element
- .find('.oe-shortcuts li[data-id=' + menu_id + ']');
+ .find('.oe-shortcuts li[data-id=' + menu_id + ']');
var shortcut_id = $shortcut.data('shortcut-id');
$shortcut.remove();
shortcuts_ds.unlink([shortcut_id]);
- }
+ var sc_new = _.reject(sc, function(shortcut){ return shortcut_id === shortcut.id});
+ sc.splice(0, sc.length);
+ sc.push.apply(sc, sc_new);
+ }
});
}
return this.rpc('/base/session/sc_list', {}, function(shortcuts) {
@@ -615,6 +620,7 @@ openerp.base.Header = openerp.base.Widget.extend({
self.$element.find('.oe-shortcuts')
.html(QWeb.render('Shortcuts', {'shortcuts': shortcuts}))
.undelegate('li', 'click')
+
.delegate('li', 'click', function(e) {
e.stopPropagation();
var id = $(this).data('id');
diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 9e981e7c3e2..bd05856f55a 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -350,20 +350,22 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
shortcut_add_remove: function() {
var self = this;
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
- $shortcut_toggle.click(function() {
- if ($shortcut_toggle.hasClass("oe-shortcut-remove")) {
- $(self.session.shortcuts.binding).trigger('remove-current');
- $shortcut_toggle.removeClass("oe-shortcut-remove");
- } else {
- $(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
- });
- $shortcut_toggle.addClass("oe-shortcut-remove");
- }
- });
+ $shortcut_toggle
+ .unbind("click")
+ .click(function() {
+ if ($shortcut_toggle.hasClass("oe-shortcut-remove")) {
+ $(self.session.shortcuts.binding).trigger('remove-current');
+ $shortcut_toggle.removeClass("oe-shortcut-remove");
+ } else {
+ $(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
+ });
+ $shortcut_toggle.addClass("oe-shortcut-remove");
+ }
+ });
}
});