Skip to content

Commit 3daa2f3

Browse files
committed
filter layout additions if removed by config and vice versa
1 parent bf3416d commit 3daa2f3

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed

src/components/modebar/manage.js

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,33 @@ function getButtonGroups(gd) {
7272
var fullLayout = gd._fullLayout;
7373
var fullData = gd._fullData;
7474
var context = gd._context;
75-
var buttonsToAdd = context.modeBarButtonsToAdd
76-
.concat(fullLayout.modebar.add.split('+'));
77-
var buttonsToRemove = context.modeBarButtonsToRemove
78-
.concat(fullLayout.modebar.remove.split('+'));
75+
76+
function match(name, B) {
77+
if(typeof B === 'string') {
78+
if(B === name) return true;
79+
} else {
80+
if(B.name === name || B._cat === name) return true;
81+
}
82+
return false;
83+
}
84+
85+
var buttonsToAdd = context.modeBarButtonsToAdd.concat(
86+
fullLayout.modebar.add.split('+').filter(function(e) {
87+
for(var i = 0; i < context.modeBarButtonsToRemove.length; i++) {
88+
if(match(e, context.modeBarButtonsToRemove[i])) return false;
89+
}
90+
return true;
91+
})
92+
);
93+
94+
var buttonsToRemove = context.modeBarButtonsToRemove.concat(
95+
fullLayout.modebar.remove.split('+').filter(function(e) {
96+
for(var i = 0; i < context.modeBarButtonsToAdd.length; i++) {
97+
if(match(e, context.modeBarButtonsToAdd[i])) return false;
98+
}
99+
return true;
100+
})
101+
);
79102

80103
var hasCartesian = fullLayout._has('cartesian');
81104
var hasGL3D = fullLayout._has('gl3d');

test/jasmine/tests/modebar_test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,6 +1726,46 @@ describe('ModeBar', function() {
17261726
})
17271727
.then(done, done.fail);
17281728
});
1729+
1730+
it('add button if removed by layout and added by config', function(done) {
1731+
function countButtons() {
1732+
var modeBarEl = gd._fullLayout._modeBar.element;
1733+
return d3Select(modeBarEl).selectAll('a.modebar-btn').size();
1734+
}
1735+
1736+
var initial = 10;
1737+
Plotly.newPlot(gd, [{y: [1, 2]}], {
1738+
modebar: {
1739+
remove: 'zoom'
1740+
}
1741+
}, {
1742+
modeBarButtonsToAdd: ['zoom']
1743+
})
1744+
.then(function() {
1745+
expect(countButtons()).toBe(initial);
1746+
})
1747+
.then(done, done.fail);
1748+
});
1749+
1750+
it('remove button if added by layout and removed by config', function(done) {
1751+
function countButtons() {
1752+
var modeBarEl = gd._fullLayout._modeBar.element;
1753+
return d3Select(modeBarEl).selectAll('a.modebar-btn').size();
1754+
}
1755+
1756+
var initial = 10;
1757+
Plotly.newPlot(gd, [{y: [1, 2]}], {
1758+
modebar: {
1759+
add: 'drawline'
1760+
}
1761+
}, {
1762+
modeBarButtonsToRemove: ['drawline']
1763+
})
1764+
.then(function() {
1765+
expect(countButtons()).toBe(initial);
1766+
})
1767+
.then(done, done.fail);
1768+
});
17291769
});
17301770

17311771
describe('modebar html', function() {

0 commit comments

Comments
 (0)