diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js
index 5fde62d898..bf969f1566 100644
--- a/frappe/public/js/frappe/ui/page.js
+++ b/frappe/public/js/frappe/ui/page.js
@@ -275,7 +275,7 @@ frappe.ui.Page = Class.extend({
return $('
\
@@ -286,8 +286,12 @@ frappe.ui.Page = Class.extend({
return $group;
},
+ get_inner_group_button: function(label) {
+ return this.inner_toolbar.find('.btn-group[data-label="'+label+'"]');
+ },
+
set_inner_btn_group_as_primary: function(label) {
- this.get_inner_group_button(label).find("button").removeClass("btn-default").addClass("btn-primary");
+ this.get_or_add_inner_group_button(label).find("button").removeClass("btn-default").addClass("btn-primary");
},
btn_disable_enable: function(btn, response) {
@@ -312,7 +316,7 @@ frappe.ui.Page = Class.extend({
me.btn_disable_enable(btn, response);
};
if(group) {
- var $group = this.get_inner_group_button(group);
+ var $group = this.get_or_add_inner_group_button(group);
$(this.inner_toolbar).removeClass("hide");
return $('
'+label+'')
.on('click', _action)
@@ -324,6 +328,29 @@ frappe.ui.Page = Class.extend({
}
},
+ remove_inner_button: function(label, group) {
+ if (typeof label === 'string') {
+ label = [label];
+ }
+ // translate
+ label = label.map(l => __(l));
+
+ if (group) {
+ var $group = this.get_inner_group_button(__(group));
+ if($group.length) {
+ $group.find('.dropdown-menu li a')
+ .filter((i, btn) => label.includes($(btn).text()))
+ .remove();
+ }
+ if ($group.find('.dropdown-menu li a').length === 0) $group.remove();
+ } else {
+
+ this.inner_toolbar.find('button')
+ .filter((i, btn) => label.includes($(btn).text()))
+ .remove();
+ }
+ },
+
clear_inner_toolbar: function() {
this.inner_toolbar.empty().addClass("hide");
},
@@ -495,4 +522,4 @@ frappe.ui.Page = Class.extend({
this.wrapper.trigger('view-change');
},
-});
\ No newline at end of file
+});
diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js
index 5c64d62c0a..081bb8fec6 100644
--- a/frappe/public/js/legacy/form.js
+++ b/frappe/public/js/legacy/form.js
@@ -4,7 +4,7 @@
/* Form page structure
+ this.parent (either FormContainer or Dialog)
- + this.wrapper
+ + this.wrapper
+ this.toolbar
+ this.form_wrapper
+ this.head
@@ -921,12 +921,18 @@ _f.Frm.prototype.add_custom_button = function(label, fn, group) {
return btn;
};
+//Remove all custom buttons
_f.Frm.prototype.clear_custom_buttons = function() {
this.page.clear_inner_toolbar();
this.page.clear_user_actions();
this.custom_buttons = {};
};
+//Remove specific custom button by button Label
+_f.Frm.prototype.remove_custom_button = function(label, group) {
+ this.page.remove_inner_button(label, group);
+};
+
_f.Frm.prototype.add_fetch = function(link_field, src_field, tar_field) {
if(!this.fetch_dict[link_field]) {
this.fetch_dict[link_field] = {'columns':[], 'fields':[]};