[fix] Button duplication on page trigger: refresh (#5564)

* [fix] custom button duplication on page trigger: refresh

* added data-label to buttons to filter them more easily

* added encodeURIComponent to data-label

* Update page.js
This commit is contained in:
Sushant Nadkar 2018-05-23 11:15:27 +05:30 committed by Rushabh Mehta
parent e76b3eef4e
commit c86de780fc
2 changed files with 17 additions and 14 deletions

View file

@ -322,9 +322,9 @@ frappe.ui.Page = Class.extend({
},
get_or_add_inner_group_button: function(label) {
var $group = this.inner_toolbar.find('.btn-group[data-label="'+label+'"]');
var $group = this.inner_toolbar.find('.btn-group[data-label="'+encodeURIComponent(label)+'"]');
if(!$group.length) {
$group = $('<div class="btn-group" data-label="'+label+'" style="margin-left: 10px;">\
$group = $('<div class="btn-group" data-label="'+encodeURIComponent(label)+'" style="margin-left: 10px;">\
<button type="button" class="btn btn-default dropdown-toggle btn-xs" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\
'+label+' <span class="caret"></span></button>\
<ul class="dropdown-menu" style="margin-top: -8px;"></ul></div>').appendTo(this.inner_toolbar);
@ -333,7 +333,7 @@ frappe.ui.Page = Class.extend({
},
get_inner_group_button: function(label) {
return this.inner_toolbar.find('.btn-group[data-label="'+label+'"]');
return this.inner_toolbar.find('.btn-group[data-label="'+encodeURIComponent(label)+'"]');
},
set_inner_btn_group_as_primary: function(label) {
@ -375,15 +375,20 @@ frappe.ui.Page = Class.extend({
$(this.inner_toolbar).removeClass("hide");
if (!this.is_in_group_button_dropdown($group.find(".dropdown-menu"), 'li', label)) {
return $('<li><a>'+label+'</a></li>')
return $('<li><a data-label="'+encodeURIComponent(label)+'">'+label+'</a></li>')
.on('click', _action)
.appendTo($group.find(".dropdown-menu"));
}
} else {
return $('<button class="btn btn-default btn-xs" style="margin-left: 10px;">'+__(label)+'</btn>')
.on("click", _action)
.appendTo(this.inner_toolbar.removeClass("hide"));
var button = this.inner_toolbar.find('button[data-label="'+encodeURIComponent(label)+'"]');
if( button.length == 0 ) {
return $('<button data-label="'+encodeURIComponent(label)+'" class="btn btn-default btn-xs" style="margin-left: 10px;">'+__(label)+'</btn>')
.on("click", _action)
.appendTo(this.inner_toolbar.removeClass("hide"));
} else {
return button;
}
}
},
@ -397,16 +402,12 @@ frappe.ui.Page = Class.extend({
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();
$group.find('.dropdown-menu li a[data-label="'+encodeURIComponent(label)+'"]').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();
this.inner_toolbar.find('button[data-label="'+encodeURIComponent(label)+'"]').remove();
}
},

View file

@ -934,7 +934,9 @@ _f.Frm.prototype.add_custom_button = function(label, fn, group) {
// temp! old parameter used to be icon
if(group && group.indexOf("fa fa-")!==-1) group = null;
var btn = this.page.add_inner_button(label, fn, group);
this.custom_buttons[label] = btn;
if(btn) {
this.custom_buttons[label] = btn;
}
return btn;
};