diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-08-26 10:47:58 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-08-26 10:47:58 +0200 |
| commit | 6bb5138f9fa39fb4f85ace195a0f735b8f8e51dd (patch) | |
| tree | 0faa299b53192c470121bc87f362fe69739da8ee /addons/base/static/src | |
| parent | 8cba17fcc64d119f75599f7151d60b38b6928b68 (diff) | |
| parent | 6815ad29a880450f9ffea1830a24638a0293986a (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.js | 18 | ||||
| -rw-r--r-- | addons/base/static/src/js/views.js | 30 |
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"); + } + }); } }); |
