Skip to content

Commit bec31aa

Browse files
committed
Event generation on filtering
1 parent 2030ad6 commit bec31aa

File tree

2 files changed

+39
-13
lines changed

2 files changed

+39
-13
lines changed

src/traces/parcoords/parcoords.js

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ function domainToUnitScale(values) {
6464
extent[0]--;
6565
extent[1]++;
6666
}
67-
var a = 1 / (extent[1] - extent[0]);
68-
var b = -a * extent[0];
69-
return function(x) {return a * x + b;};
67+
return d3.scale.linear().domain(extent);
7068
}
7169

7270
function viewModel(lines, width, height, canvasPixelRatio, model) {
@@ -83,6 +81,7 @@ function viewModel(lines, width, height, canvasPixelRatio, model) {
8381
};
8482

8583
viewModel.panels = model.dimensions.filter(visible).map(function(dimension, i) {
84+
var domainToUnit = domainToUnitScale(dimension.values);
8685
return {
8786
key: dimension.id || (dimension.label + ' ' + Math.floor(1e6 * Math.random())),
8887
label: dimension.label,
@@ -92,13 +91,14 @@ function viewModel(lines, width, height, canvasPixelRatio, model) {
9291
originalXIndex: i,
9392
height: height,
9493
values: dimension.values,
95-
paddedUnitValues: dimension.values.map(domainToUnitScale(dimension.values)).map(paddedUnitScale),
94+
paddedUnitValues: dimension.values.map(domainToUnit).map(paddedUnitScale),
9695
xScale: xScale,
9796
x: xScale(i),
9897
canvasX: xScale(i) * canvasPixelRatio,
9998
unitScale: unitScale(height, lines.verticalpadding),
10099
domainScale: domainScale(height, lines.verticalpadding, lines.integerpadding, dimension),
101100
integerScale: integerScale(lines.integerpadding, dimension),
101+
domainToUnitScale: domainToUnit,
102102
pieChartCheat: dimension.pieChartCheat,
103103
filter: [0, 1], // todo dimension.filter || (dimension.filter = [0, 1]),
104104
parent: viewModel
@@ -119,7 +119,7 @@ function styleExtentTexts(selection) {
119119
.style('user-select', 'none');
120120
}
121121

122-
module.exports = function(root, styledData, layout) {
122+
module.exports = function(root, styledData, layout, callbacks) {
123123

124124
var unitToColor = styledData.unitToColor;
125125

@@ -488,11 +488,6 @@ module.exports = function(root, styledData, layout) {
488488
}
489489
var newExtent = reset ? [0, 1] : extent.slice();
490490
if(newExtent[0] !== filter[0] || newExtent[1] !== filter[1]) {
491-
/* // the 1st dimension is special: brushing on it changes the color projection
492-
if(dimension.originalXIndex === 0) {
493-
dimension.parent['focusLineLayer'].setColorDomain(newExtent);
494-
}
495-
*/
496491
panels[dimension.xIndex].filter = newExtent;
497492
dimension.parent.focusLineLayer.render(panels, true);
498493
var filtersActive = someFiltersActive(dimension.parent);
@@ -510,9 +505,9 @@ module.exports = function(root, styledData, layout) {
510505
function axisBrushEnded(dimension) {
511506
var extent = dimension.brush.extent();
512507
var empty = extent[0] === extent[1];
508+
var panels = dimension.parent.panels;
509+
var f = panels[dimension.xIndex].filter;
513510
if(!empty && dimension.integer) {
514-
var panels = dimension.parent.panels;
515-
var f = panels[dimension.xIndex].filter;
516511
f[0] = ordinalScaleSnap(dimension.integerScale, f[0]);
517512
f[1] = ordinalScaleSnap(dimension.integerScale, f[1]);
518513
if(f[0] === f[1]) {
@@ -523,6 +518,24 @@ module.exports = function(root, styledData, layout) {
523518
dimension.parent.focusLineLayer.render(panels, true);
524519
}
525520
domainBrushing = false;
521+
if(callbacks && callbacks.filterChangedCallback) {
522+
callbacks.filterChangedCallback({
523+
changedDimension: {
524+
key: dimension.key,
525+
label: dimension.label,
526+
domainFilter: f.map(dimension.domainToUnitScale.invert),
527+
fullDomain: f[0] === 0 && f[1] === 1
528+
},
529+
allDimensions: panels.map(function(p) {
530+
return {
531+
key: p.key,
532+
label: p.label,
533+
domainFilter: p.filter.map(p.domainToUnitScale.invert),
534+
fullDomain: p.filter[0] === 0 && p.filter[1] === 1
535+
};
536+
})
537+
});
538+
};
526539
}
527540

528541
return tweakables;

src/traces/parcoords/plot.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,18 @@ module.exports = function plot(gd, cdparcoords) {
1616
var root = fullLayout._glcontainer.node();
1717
var data = cdparcoords[0][0];
1818

19-
parcoords(root, data, {width: fullLayout.width, height: fullLayout.height});
19+
var filterChangedCallback = function(value) {
20+
gd.emit('plotly_selected', value);
21+
};
22+
23+
parcoords(
24+
root,
25+
data,
26+
{
27+
width: fullLayout.width,
28+
height: fullLayout.height
29+
},
30+
{
31+
filterChangedCallback: filterChangedCallback
32+
});
2033
};

0 commit comments

Comments
 (0)