Skip to content

Commit 2056773

Browse files
committed
implement modebar.remove & improve config.modeBarButtonsToRemove to use exact and short names
1 parent aeb1626 commit 2056773

File tree

5 files changed

+168
-23
lines changed

5 files changed

+168
-23
lines changed

src/components/modebar/attributes.js

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
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 = {
434
editType: 'modebar',
535

@@ -36,25 +66,24 @@ module.exports = {
3666
},
3767
add: {
3868
valType: 'flaglist',
39-
flags: [
40-
'v1hovermode',
41-
'hoverclosest',
42-
'hovercompare',
43-
'togglehover',
44-
'togglespikelines',
45-
'drawclosedpath',
46-
'drawopenpath',
47-
'drawline',
48-
'drawrect',
49-
'drawcircle',
50-
'eraseshape',
51-
],
69+
flags: backButtons,
5270
dflt: '',
5371
editType: 'modebar',
5472
description: [
5573
'Determines which predefined modebar buttons to add.',
56-
'Please note that these buttons will only be shown if they are compatible',
57-
'with all trace types used in a graph.'
74+
'Please note that these buttons will only be shown if they are',
75+
'compatible with all trace types used in a graph.',
76+
'Similar to `config.modeBarButtonsToAdd` option'
77+
].join(' ')
78+
},
79+
remove: {
80+
valType: 'flaglist',
81+
flags: foreButtons,
82+
dflt: '',
83+
editType: 'modebar',
84+
description: [
85+
'Determines which predefined modebar buttons to remove.',
86+
'Similar to `config.modeBarButtonsToRemove` option'
5887
].join(' ')
5988
}
6089
};

src/components/modebar/buttons.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ modeBarButtons.editInChartStudio = {
9292

9393
modeBarButtons.zoom2d = {
9494
name: 'zoom2d',
95+
_cat: 'zoom',
9596
title: function(gd) { return _(gd, 'Zoom'); },
9697
attr: 'dragmode',
9798
val: 'zoom',
@@ -101,6 +102,7 @@ modeBarButtons.zoom2d = {
101102

102103
modeBarButtons.pan2d = {
103104
name: 'pan2d',
105+
_cat: 'pan',
104106
title: function(gd) { return _(gd, 'Pan'); },
105107
attr: 'dragmode',
106108
val: 'pan',
@@ -110,6 +112,7 @@ modeBarButtons.pan2d = {
110112

111113
modeBarButtons.select2d = {
112114
name: 'select2d',
115+
_cat: 'select',
113116
title: function(gd) { return _(gd, 'Box Select'); },
114117
attr: 'dragmode',
115118
val: 'select',
@@ -119,6 +122,7 @@ modeBarButtons.select2d = {
119122

120123
modeBarButtons.lasso2d = {
121124
name: 'lasso2d',
125+
_cat: 'lasso',
122126
title: function(gd) { return _(gd, 'Lasso Select'); },
123127
attr: 'dragmode',
124128
val: 'lasso',
@@ -180,6 +184,7 @@ modeBarButtons.eraseshape = {
180184

181185
modeBarButtons.zoomIn2d = {
182186
name: 'zoomIn2d',
187+
_cat: 'zoomin',
183188
title: function(gd) { return _(gd, 'Zoom in'); },
184189
attr: 'zoom',
185190
val: 'in',
@@ -189,6 +194,7 @@ modeBarButtons.zoomIn2d = {
189194

190195
modeBarButtons.zoomOut2d = {
191196
name: 'zoomOut2d',
197+
_cat: 'zoomout',
192198
title: function(gd) { return _(gd, 'Zoom out'); },
193199
attr: 'zoom',
194200
val: 'out',
@@ -198,6 +204,7 @@ modeBarButtons.zoomOut2d = {
198204

199205
modeBarButtons.autoScale2d = {
200206
name: 'autoScale2d',
207+
_cat: 'autoscale',
201208
title: function(gd) { return _(gd, 'Autoscale'); },
202209
attr: 'zoom',
203210
val: 'auto',
@@ -207,6 +214,7 @@ modeBarButtons.autoScale2d = {
207214

208215
modeBarButtons.resetScale2d = {
209216
name: 'resetScale2d',
217+
_cat: 'resetscale',
210218
title: function(gd) { return _(gd, 'Reset axes'); },
211219
attr: 'zoom',
212220
val: 'reset',
@@ -216,6 +224,7 @@ modeBarButtons.resetScale2d = {
216224

217225
modeBarButtons.hoverClosestCartesian = {
218226
name: 'hoverClosestCartesian',
227+
_cat: 'hoverclosest',
219228
title: function(gd) { return _(gd, 'Show closest data on hover'); },
220229
attr: 'hovermode',
221230
val: 'closest',
@@ -226,6 +235,7 @@ modeBarButtons.hoverClosestCartesian = {
226235

227236
modeBarButtons.hoverCompareCartesian = {
228237
name: 'hoverCompareCartesian',
238+
_cat: 'hoverCompare',
229239
title: function(gd) { return _(gd, 'Compare data on hover'); },
230240
attr: 'hovermode',
231241
val: function(gd) {
@@ -309,6 +319,7 @@ function handleCartesian(gd, ev) {
309319

310320
modeBarButtons.zoom3d = {
311321
name: 'zoom3d',
322+
_cat: 'zoom',
312323
title: function(gd) { return _(gd, 'Zoom'); },
313324
attr: 'scene.dragmode',
314325
val: 'zoom',
@@ -318,6 +329,7 @@ modeBarButtons.zoom3d = {
318329

319330
modeBarButtons.pan3d = {
320331
name: 'pan3d',
332+
_cat: 'pan',
321333
title: function(gd) { return _(gd, 'Pan'); },
322334
attr: 'scene.dragmode',
323335
val: 'pan',
@@ -365,6 +377,7 @@ function handleDrag3d(gd, ev) {
365377

366378
modeBarButtons.resetCameraDefault3d = {
367379
name: 'resetCameraDefault3d',
380+
_cat: 'resetCameraDefault',
368381
title: function(gd) { return _(gd, 'Reset camera to default'); },
369382
attr: 'resetDefault',
370383
icon: Icons.home,
@@ -373,6 +386,7 @@ modeBarButtons.resetCameraDefault3d = {
373386

374387
modeBarButtons.resetCameraLastSave3d = {
375388
name: 'resetCameraLastSave3d',
389+
_cat: 'resetCameraLastSave',
376390
title: function(gd) { return _(gd, 'Reset camera to last save'); },
377391
attr: 'resetLastSave',
378392
icon: Icons.movie,
@@ -422,6 +436,7 @@ function handleCamera3d(gd, ev) {
422436

423437
modeBarButtons.hoverClosest3d = {
424438
name: 'hoverClosest3d',
439+
_cat: 'hoverclosest',
425440
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
426441
attr: 'hovermode',
427442
val: null,
@@ -476,6 +491,7 @@ function handleHover3d(gd, ev) {
476491

477492
modeBarButtons.zoomInGeo = {
478493
name: 'zoomInGeo',
494+
_cat: 'zoomin',
479495
title: function(gd) { return _(gd, 'Zoom in'); },
480496
attr: 'zoom',
481497
val: 'in',
@@ -485,6 +501,7 @@ modeBarButtons.zoomInGeo = {
485501

486502
modeBarButtons.zoomOutGeo = {
487503
name: 'zoomOutGeo',
504+
_cat: 'zoomout',
488505
title: function(gd) { return _(gd, 'Zoom out'); },
489506
attr: 'zoom',
490507
val: 'out',
@@ -494,6 +511,7 @@ modeBarButtons.zoomOutGeo = {
494511

495512
modeBarButtons.resetGeo = {
496513
name: 'resetGeo',
514+
_cat: 'reset',
497515
title: function(gd) { return _(gd, 'Reset'); },
498516
attr: 'reset',
499517
val: null,
@@ -503,6 +521,7 @@ modeBarButtons.resetGeo = {
503521

504522
modeBarButtons.hoverClosestGeo = {
505523
name: 'hoverClosestGeo',
524+
_cat: 'hoverclosest',
506525
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
507526
attr: 'hovermode',
508527
val: null,
@@ -538,6 +557,7 @@ function handleGeo(gd, ev) {
538557

539558
modeBarButtons.hoverClosestGl2d = {
540559
name: 'hoverClosestGl2d',
560+
_cat: 'hoverclosest',
541561
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
542562
attr: 'hovermode',
543563
val: null,
@@ -549,6 +569,7 @@ modeBarButtons.hoverClosestGl2d = {
549569

550570
modeBarButtons.hoverClosestPie = {
551571
name: 'hoverClosestPie',
572+
_cat: 'hoverclosest',
552573
title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },
553574
attr: 'hovermode',
554575
val: 'closest',
@@ -661,6 +682,7 @@ function setSpikelineVisibility(gd) {
661682

662683
modeBarButtons.resetViewMapbox = {
663684
name: 'resetViewMapbox',
685+
_cat: 'resetView',
664686
title: function(gd) { return _(gd, 'Reset view'); },
665687
attr: 'reset',
666688
icon: Icons.home,
@@ -671,6 +693,7 @@ modeBarButtons.resetViewMapbox = {
671693

672694
modeBarButtons.zoomInMapbox = {
673695
name: 'zoomInMapbox',
696+
_cat: 'zoomin',
674697
title: function(gd) { return _(gd, 'Zoom in'); },
675698
attr: 'zoom',
676699
val: 'in',
@@ -680,6 +703,7 @@ modeBarButtons.zoomInMapbox = {
680703

681704
modeBarButtons.zoomOutMapbox = {
682705
name: 'zoomOutMapbox',
706+
_cat: 'zoomout',
683707
title: function(gd) { return _(gd, 'Zoom out'); },
684708
attr: 'zoom',
685709
val: 'out',

src/components/modebar/defaults.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
2020
coerce('activecolor', Color.addOpacity(defaultColor, 0.7));
2121
coerce('uirevision', layoutOut.uirevision);
2222
coerce('add');
23+
coerce('remove');
2324
};

src/components/modebar/manage.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,10 @@ function getButtonGroups(gd) {
7272
var fullLayout = gd._fullLayout;
7373
var fullData = gd._fullData;
7474
var context = gd._context;
75-
var layoutButtonsToAdd = fullLayout.modebar.add.split('+');
76-
var buttonsToAdd = context.modeBarButtonsToAdd.concat(layoutButtonsToAdd);
77-
var buttonsToRemove = context.modeBarButtonsToRemove;
75+
var buttonsToAdd = context.modeBarButtonsToAdd
76+
.concat(fullLayout.modebar.add.split('+'));
77+
var buttonsToRemove = context.modeBarButtonsToRemove
78+
.concat(fullLayout.modebar.remove.split('+'));
7879

7980
var hasCartesian = fullLayout._has('cartesian');
8081
var hasGL3D = fullLayout._has('gl3d');
@@ -97,9 +98,20 @@ function getButtonGroups(gd) {
9798
var out = [];
9899

99100
for(var i = 0; i < newGroup.length; i++) {
100-
var button = newGroup[i];
101-
if(buttonsToRemove.indexOf(button) !== -1) continue;
102-
out.push(modeBarButtons[button]);
101+
var name = newGroup[i];
102+
var B = modeBarButtons[name];
103+
var v0 = B.name.toLowerCase();
104+
var v1 = (B._cat || B.name).toLowerCase();
105+
var found = false;
106+
for(var q = 0; q < buttonsToRemove.length; q++) {
107+
var t = buttonsToRemove[q].toLowerCase();
108+
if(t === v0 || t === v1) {
109+
found = true;
110+
break;
111+
}
112+
}
113+
if(found) continue;
114+
out.push(modeBarButtons[name]);
103115
}
104116

105117
groups.push(out);

0 commit comments

Comments
 (0)