Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5c17d6b

Browse filesBrowse files
committed
switch from flaglist to arrayOk string
1 parent 096674c commit 5c17d6b
Copy full SHA for 5c17d6b

File tree

Expand file treeCollapse file tree

3 files changed

+101
-74
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+101
-74
lines changed

‎src/components/modebar/attributes.js

Copy file name to clipboardExpand all lines: src/components/modebar/attributes.js
+4-34Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,5 @@
11
'use strict';
22

3-
var modeBarButtons = require('./buttons');
4-
var buttonList = Object.keys(modeBarButtons);
5-
var backButtons = [
6-
'v1hovermode',
7-
'hoverclosest',
8-
'hovercompare',
9-
'togglehover',
10-
'togglespikelines',
11-
'drawclosedpath',
12-
'drawopenpath',
13-
'drawline',
14-
'drawrect',
15-
'drawcircle',
16-
'eraseshape',
17-
];
18-
19-
var foreButtons = [];
20-
var addToForeButtons = function(b) {
21-
if(backButtons.indexOf(b._cat || b.name) !== -1) return;
22-
// for convenience add lowercase shotname e.g. zoomin as well fullname zoomInGeo
23-
var name = b.name;
24-
var _cat = (b._cat || b.name).toLowerCase();
25-
if(foreButtons.indexOf(name) === -1) foreButtons.push(name);
26-
if(foreButtons.indexOf(_cat) === -1) foreButtons.push(_cat);
27-
};
28-
buttonList.forEach(function(k) {
29-
addToForeButtons(modeBarButtons[k]);
30-
});
31-
foreButtons.sort();
32-
333
module.exports = {
344
editType: 'modebar',
355

@@ -65,8 +35,8 @@ module.exports = {
6535
].join(' ')
6636
},
6737
add: {
68-
valType: 'flaglist',
69-
flags: backButtons,
38+
valType: 'string',
39+
arrayOk: true,
7040
dflt: '',
7141
editType: 'modebar',
7242
description: [
@@ -77,8 +47,8 @@ module.exports = {
7747
].join(' ')
7848
},
7949
remove: {
80-
valType: 'flaglist',
81-
flags: foreButtons,
50+
valType: 'string',
51+
arrayOk: true,
8252
dflt: '',
8353
editType: 'modebar',
8454
description: [

‎src/components/modebar/manage.js

Copy file name to clipboardExpand all lines: src/components/modebar/manage.js
+41-11Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ var isUnifiedHover = require('../fx/helpers').isUnifiedHover;
77

88
var createModeBar = require('./modebar');
99
var modeBarButtons = require('./buttons');
10+
var buttonList = Object.keys(modeBarButtons);
11+
12+
var DRAW_MODES = [
13+
'drawline',
14+
'drawopenpath',
15+
'drawclosedpath',
16+
'drawcircle',
17+
'drawrect',
18+
'eraseshape'
19+
];
20+
21+
var backButtons = [
22+
'v1hovermode',
23+
'hoverclosest',
24+
'hovercompare',
25+
'togglehover',
26+
'togglespikelines'
27+
].concat(DRAW_MODES);
28+
29+
var foreButtons = [];
30+
var addToForeButtons = function(b) {
31+
if(backButtons.indexOf(b._cat || b.name) !== -1) return;
32+
// for convenience add lowercase shotname e.g. zoomin as well fullname zoomInGeo
33+
var name = b.name;
34+
var _cat = (b._cat || b.name).toLowerCase();
35+
if(foreButtons.indexOf(name) === -1) foreButtons.push(name);
36+
if(foreButtons.indexOf(_cat) === -1) foreButtons.push(_cat);
37+
};
38+
buttonList.forEach(function(k) {
39+
addToForeButtons(modeBarButtons[k]);
40+
});
41+
foreButtons.sort();
42+
1043

1144
/**
1245
* ModeBar wrapper around 'create' and 'update',
@@ -58,15 +91,6 @@ module.exports = function manageModeBar(gd) {
5891
else fullLayout._modeBar = createModeBar(gd, buttonGroups);
5992
};
6093

61-
var DRAW_MODES = [
62-
'drawline',
63-
'drawopenpath',
64-
'drawclosedpath',
65-
'drawcircle',
66-
'drawrect',
67-
'eraseshape'
68-
];
69-
7094
// logic behind which buttons are displayed by default
7195
function getButtonGroups(gd) {
7296
var fullLayout = gd._fullLayout;
@@ -85,8 +109,14 @@ function getButtonGroups(gd) {
85109
return false;
86110
}
87111

112+
var layoutAdd = fullLayout.modebar.add;
113+
if(typeof layoutAdd === 'string') layoutAdd = [layoutAdd];
114+
115+
var layoutRemove = fullLayout.modebar.remove;
116+
if(typeof layoutRemove === 'string') layoutRemove = [layoutRemove];
117+
88118
var buttonsToAdd = context.modeBarButtonsToAdd.concat(
89-
fullLayout.modebar.add.split('+').filter(function(e) {
119+
layoutAdd.filter(function(e) {
90120
for(var i = 0; i < context.modeBarButtonsToRemove.length; i++) {
91121
if(match(e, context.modeBarButtonsToRemove[i])) return false;
92122
}
@@ -95,7 +125,7 @@ function getButtonGroups(gd) {
95125
);
96126

97127
var buttonsToRemove = context.modeBarButtonsToRemove.concat(
98-
fullLayout.modebar.remove.split('+').filter(function(e) {
128+
layoutRemove.filter(function(e) {
99129
for(var i = 0; i < context.modeBarButtonsToAdd.length; i++) {
100130
if(match(e, context.modeBarButtonsToAdd[i])) return false;
101131
}

‎test/jasmine/tests/modebar_test.js

Copy file name to clipboardExpand all lines: test/jasmine/tests/modebar_test.js
+56-29Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,7 +1573,7 @@ describe('ModeBar', function() {
15731573
.then(done, done.fail);
15741574
});
15751575

1576-
it('add predefined shape drawing and hover buttons via layout.modebar.add and template', function(done) {
1576+
it('add predefined shape drawing and hover buttons via layout.modebar.add', function(done) {
15771577
function countButtons() {
15781578
var modeBarEl = gd._fullLayout._modeBar.element;
15791579
return d3Select(modeBarEl).selectAll('a.modebar-btn').size();
@@ -1591,7 +1591,7 @@ describe('ModeBar', function() {
15911591
'drawcircle',
15921592
'drawrect',
15931593
'eraseshape'
1594-
].join('+'));
1594+
]);
15951595
})
15961596
.then(function() {
15971597
expect(countButtons()).toBe(initial + 6);
@@ -1605,7 +1605,7 @@ describe('ModeBar', function() {
16051605
'hovercompare',
16061606
'hoverclosest',
16071607
'togglespikelines'
1608-
].join('+'));
1608+
]);
16091609
})
16101610
.then(function() {
16111611
expect(countButtons()).toBe(initial + 3);
@@ -1618,7 +1618,7 @@ describe('ModeBar', function() {
16181618
return Plotly.relayout(gd, 'modebar.add', [
16191619
'v1hovermode',
16201620
'togglespikelines'
1621-
].join('+'));
1621+
]);
16221622
})
16231623
.then(function() {
16241624
expect(countButtons()).toBe(initial + 3);
@@ -1629,18 +1629,16 @@ describe('ModeBar', function() {
16291629
'togglehover',
16301630
'hovercompare',
16311631
'hoverclosest',
1632-
'eraseshape',
1633-
'eraseshape',
16341632
'eraseshape'
1635-
].join('+'));
1633+
]);
16361634
})
16371635
.then(function() {
16381636
expect(countButtons()).toBe(initial + 4, 'skip duplicates');
16391637

16401638
return Plotly.relayout(gd, 'modebar.add', [
16411639
'drawline',
16421640
'invalid'
1643-
].join('+'));
1641+
]);
16441642
})
16451643
.then(function() {
16461644
expect(countButtons()).toBe(initial + 1, 'skip invalid');
@@ -1649,11 +1647,6 @@ describe('ModeBar', function() {
16491647
})
16501648
.then(function() {
16511649
expect(countButtons()).toBe(initial);
1652-
1653-
return Plotly.relayout(gd, 'template.layout.modebar.add', 'v1hovermode');
1654-
})
1655-
.then(function() {
1656-
expect(countButtons()).toBe(initial + 2, 'via template');
16571650
})
16581651
.then(done, done.fail);
16591652
});
@@ -1679,7 +1672,7 @@ describe('ModeBar', function() {
16791672
'autoscale',
16801673
'resetscale',
16811674
'toimage',
1682-
].join('+'));
1675+
]);
16831676
})
16841677
.then(function() {
16851678
expect(countButtons()).toBe(initial - 9);
@@ -1699,30 +1692,64 @@ describe('ModeBar', function() {
16991692
'autoScale2d',
17001693
'resetScale2d',
17011694
'toImage',
1702-
].join('+'));
1695+
]);
17031696
})
17041697
.then(function() {
17051698
expect(countButtons()).toBe(initial - 9);
1699+
})
1700+
.then(done, done.fail);
1701+
});
17061702

1707-
return Plotly.relayout(gd, 'modebar.remove', '');
1703+
it('remove buttons using template', function(done) {
1704+
function countButtons() {
1705+
var modeBarEl = gd._fullLayout._modeBar.element;
1706+
return d3Select(modeBarEl).selectAll('a.modebar-btn').size();
1707+
}
1708+
1709+
var initial = 10;
1710+
Plotly.newPlot(gd, [{y: [1, 2]}], {
1711+
template: {
1712+
layout: {
1713+
modebar: {
1714+
remove: [
1715+
'zoom',
1716+
'zoomin',
1717+
'zoomout',
1718+
'pan',
1719+
'select',
1720+
'lasso',
1721+
'autoscale',
1722+
'resetscale',
1723+
'toimage',
1724+
]
1725+
}
1726+
}
1727+
}
17081728
})
17091729
.then(function() {
1710-
expect(countButtons()).toBe(initial);
1730+
expect(countButtons()).toBe(initial - 9);
1731+
})
1732+
.then(done, done.fail);
1733+
});
17111734

1712-
return Plotly.relayout(gd, 'template.layout.modebar.remove', [
1713-
'zoom',
1714-
'zoomin',
1715-
'zoomout',
1716-
'pan',
1717-
'select',
1718-
'lasso',
1719-
'autoscale',
1720-
'resetscale',
1721-
'toimage',
1722-
].join('+'));
1735+
it('add buttons using template', function(done) {
1736+
function countButtons() {
1737+
var modeBarEl = gd._fullLayout._modeBar.element;
1738+
return d3Select(modeBarEl).selectAll('a.modebar-btn').size();
1739+
}
1740+
1741+
var initial = 10;
1742+
Plotly.newPlot(gd, [{y: [1, 2]}], {
1743+
template: {
1744+
layout: {
1745+
modebar: {
1746+
add: 'drawcircle'
1747+
}
1748+
}
1749+
}
17231750
})
17241751
.then(function() {
1725-
expect(countButtons()).toBe(initial - 9);
1752+
expect(countButtons()).toBe(initial + 1);
17261753
})
17271754
.then(done, done.fail);
17281755
});

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.