Skip to content

Commit 65d24f3

Browse files
committed
Fix updatemenus bindings
1 parent 43dc3d4 commit 65d24f3

File tree

3 files changed

+28
-38
lines changed

3 files changed

+28
-38
lines changed

src/components/sliders/draw.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ module.exports = function draw(gd) {
6868
// If it has fewer than two options, it's not really a slider:
6969
if(sliderOpts.steps.length < 2) return;
7070

71+
var gSlider = d3.select(this);
72+
7173
computeLabelSteps(sliderOpts);
7274

7375
if(!sliderOpts._commandObserver) {
7476
sliderOpts._commandObserver = Plots.createCommandObserver(gd, sliderOpts.steps, function(data) {
75-
setActive(gd, d3.select(this), sliderOpts, data.index, false, true);
76-
}.bind(this));
77+
setActive(gd, gSlider, sliderOpts, data.index, false, true);
78+
});
7779
}
7880

7981
drawSlider(gd, d3.select(this), sliderOpts);

src/components/updatemenus/draw.js

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,6 @@ var anchorUtils = require('../legend/anchor_utils');
2121

2222
var constants = require('./constants');
2323

24-
function computeBindings(gd, menuOpts) {
25-
var bindings = [], newBindings;
26-
var buttons = menuOpts.buttons;
27-
for(var i = 0; i < buttons.length; i++) {
28-
newBindings = Plots.computeAPICommandBindings(gd, buttons[i].method, buttons[i].args);
29-
30-
if(i > 0 && !Plots.bindingsAreConsistent(bindings, newBindings)) {
31-
bindings = null;
32-
break;
33-
}
34-
35-
for(var j = 0; j < newBindings.length; j++) {
36-
var b = newBindings[j];
37-
38-
if(bindings.indexOf(b) === -1) {
39-
bindings.push(b);
40-
}
41-
}
42-
}
43-
44-
return bindings;
45-
}
46-
4724
module.exports = function draw(gd) {
4825
var fullLayout = gd._fullLayout,
4926
menuData = makeMenuData(fullLayout);
@@ -137,7 +114,12 @@ module.exports = function draw(gd) {
137114
headerGroups.each(function(menuOpts) {
138115
var gHeader = d3.select(this);
139116

140-
computeBindings(gd, menuOpts);
117+
if(!menuOpts._commandObserver) {
118+
var _gButton = menuOpts.type === 'dropdown' ? gButton : null;
119+
menuOpts._commandObserver = Plots.createCommandObserver(gd, menuOpts.buttons, function(data) {
120+
setActive(gd, menuOpts, menuOpts.buttons[data.index], gHeader, _gButton, data.index, true);
121+
});
122+
}
141123

142124
if(menuOpts.type === 'dropdown') {
143125
drawHeader(gd, gHeader, gButton, menuOpts);
@@ -317,17 +299,7 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
317299
.call(setItemPosition, menuOpts, posOpts);
318300

319301
button.on('click', function() {
320-
// update 'active' attribute in menuOpts
321-
menuOpts._input.active = menuOpts.active = buttonIndex;
322-
323-
// fold up buttons and redraw header
324-
gButton.attr(constants.menuIndexAttrName, '-1');
325-
326-
if(menuOpts.type === 'dropdown') {
327-
drawHeader(gd, gHeader, gButton, menuOpts);
328-
}
329-
330-
drawButtons(gd, gHeader, gButton, menuOpts);
302+
setActive(gd, menuOpts, buttonOpts, gHeader, gButton, buttonIndex);
331303

332304
// call button method
333305
var args = buttonOpts.args;
@@ -350,6 +322,22 @@ function drawButtons(gd, gHeader, gButton, menuOpts) {
350322
Lib.setTranslate(gButton, menuOpts.lx, menuOpts.ly);
351323
}
352324

325+
function setActive(gd, menuOpts, buttonOpts, gHeader, gButton, buttonIndex, isSilentUpdate) {
326+
// update 'active' attribute in menuOpts
327+
menuOpts._input.active = menuOpts.active = buttonIndex;
328+
329+
if(menuOpts.type === 'dropdown') {
330+
// fold up buttons and redraw header
331+
gButton.attr(constants.menuIndexAttrName, '-1');
332+
333+
drawHeader(gd, gHeader, gButton, menuOpts);
334+
}
335+
336+
if(!isSilentUpdate || menuOpts.type === 'buttons') {
337+
drawButtons(gd, gHeader, gButton, menuOpts);
338+
}
339+
}
340+
353341
function drawItem(item, menuOpts, itemOpts) {
354342
item.call(drawItemRect, menuOpts)
355343
.call(drawItemText, menuOpts, itemOpts);

src/plots/command.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ exports.hasSimpleBindings = function(gd, commandList, bindingsByValue) {
7777
}
7878

7979
binding = bindings[0];
80-
var value = binding.value[0];
80+
var value = binding.value;
8181
if(Array.isArray(value)) {
8282
value = value[0];
8383
}

0 commit comments

Comments
 (0)