Resolved a bug with the menu enable/disble logic.

Also, do not generate list disabled menu in the context menu
This commit is contained in:
Ashesh Vashi 2015-07-17 10:06:04 +05:30
parent 605f9aba32
commit dee3185bae
2 changed files with 24 additions and 20 deletions

View File

@ -18,7 +18,7 @@ function(_, pgAdmin, $) {
}; };
_.extend(pgAdmin.Browser.MenuItem.prototype, { _.extend(pgAdmin.Browser.MenuItem.prototype, {
generate: function() { generate: function(node) {
var url = $('<a></a>', { var url = $('<a></a>', {
'id': this.name, 'id': this.name,
'href': this.url, 'href': this.url,
@ -35,15 +35,17 @@ function(_, pgAdmin, $) {
url.append($('<span></span>').text(' ' + this.label)); url.append($('<span></span>').text(' ' + this.label));
return $('<li/>') return $('<li/>')
.addClass('menu-item') .addClass('menu-item' + (this.disabled(node) ? ' disabled' : ''))
.append(url); .append(url);
}, },
disabled: function(o) { disabled: function(node) {
if (_.isFunction(this.enable)) return !this.enable.apply(this.module, [this.data]); if (this.enable == undefined)
return false;
if (_.isBoolean(this.enable)) return !this.enable; if (_.isBoolean(this.enable)) return !this.enable;
if (_.isFunction(this.enable)) return !this.enable.apply(this.module, [node, this.data]);
if (this.module && _.isBoolean(this.module[this.enable])) return !this.module[this.enable]; if (this.module && _.isBoolean(this.module[this.enable])) return !this.module[this.enable];
if (this.module && _.isFunction(this.module[this.enable])) return !this.enable.apply(this.module, [this.data]); if (this.module && _.isFunction(this.module[this.enable])) return !(this.module[this.enable]).apply(this.module, [node, this.data]);
if (_.isFunction(o[this.enable])) return !this.enable.apply(o, [this.data]);
return false; return false;
} }

View File

@ -243,7 +243,7 @@ OWNER TO helpdesk;\n';
function(v, k) { function(v, k) {
// Remove disabled class in any case first. // Remove disabled class in any case first.
e = j.find('#' + k).closest('.menu-item').removeClass('disabled'); e = j.find('#' + k).closest('.menu-item').removeClass('disabled');
if (v.disabled(obj)) { if (v.disabled(d)) {
// Make this menu disabled // Make this menu disabled
e.addClass('disabled'); e.addClass('disabled');
} }
@ -260,9 +260,9 @@ OWNER TO helpdesk;\n';
function(o) { return o.priority; }), function(o) { return o.priority; }),
function(m) { function(m) {
if (m.category && m.category == 'create') { if (m.category && m.category == 'create') {
create_items.push(m.generate()); create_items.push(m.generate(d));
} else { } else {
obj_mnu.append(m.generate()); obj_mnu.append(m.generate(d));
} }
}); });
// Create menus goes seperately // Create menus goes seperately
@ -389,25 +389,27 @@ OWNER TO helpdesk;\n';
_.each( _.each(
_.sortBy(menus, function(m) { return m.priority; }), _.sortBy(menus, function(m) { return m.priority; }),
function(m) { function(m) {
if (m.category == 'create') if (m.category == 'create' && !m.disabled(d))
createMenu[m.module.type + '_' + m.callback] = { name: m.label }; createMenu[m.module.type + '_' + m.callback] = { name: m.label };
}); });
menu["create"] = { "name": "{{ _('Create') }}" } if (createMenu.length) {
menu["create"]["items"] = createMenu menu["create"] = { "name": "{{ _('Create') }}" };
menu["create"]["items"] = createMenu;
}
_.each( _.each(
_.sortBy(menus, function(m) { return m.priority; }), _.sortBy(menus, function(m) { return m.priority; }),
function(m) { function(m) {
if (m.category != 'create') if (m.category != 'create' && !m.disabled(d))
menu[m.module.type + '_' + m.callback] = { name: m.label }; menu[m.module.type + '_' + m.callback] = { name: m.label };
}); });
return { return menu.length ? {
autoHide: true, autoHide: true,
items: menu, items: menu,
callback: cb callback: cb
}; } : undefined;
} }
}); });