Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d1c8c48

Browse files
committed
inherit from bars - pass 1
1 parent 3386803 commit d1c8c48

File tree

9 files changed

+171
-83
lines changed

9 files changed

+171
-83
lines changed

src/traces/bar/calc.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,9 @@ module.exports = function calc(gd, trace) {
3131
var serieslen = Math.min(pos.length, size.length);
3232
var cd = new Array(serieslen);
3333

34-
// set position and size (as well as for waterfall total size)
34+
// set position and size
3535
for(var i = 0; i < serieslen; i++) {
36-
cd[i] = {
37-
p: pos[i],
38-
s: size[i]
39-
};
36+
cd[i] = { p: pos[i], s: size[i] };
4037

4138
if(trace.ids) {
4239
cd[i].id = String(trace.ids[i]);

src/traces/bar/cross_trace_calc.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -663,8 +663,6 @@ function collectExtents(calcTraces, pa) {
663663
cd = calcTraces[i];
664664
cd[0].t.extents = extents;
665665

666-
var isWaterfall = (cd[0].trace.type === 'waterfall');
667-
668666
var poffset = cd[0].t.poffset;
669667
var poffsetIsArray = Array.isArray(poffset);
670668

@@ -686,12 +684,6 @@ function collectExtents(calcTraces, pa) {
686684
di.p1 = di.p0 + di.w;
687685
di.s0 = di.b;
688686
di.s1 = di.s0 + di.s;
689-
690-
if(isWaterfall) {
691-
if(di.isSum === false) {
692-
di.s0 += (j === 0) ? 0 : cd[j - 1].s;
693-
}
694-
}
695687
}
696688
}
697689
}

src/traces/bar/hover.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,6 @@ function hoverPoints(pointData, xval, yval, hovermode) {
120120

121121
var size = (trace.base) ? di.b + di.s : di.s;
122122
pointData[sizeLetter + '0'] = pointData[sizeLetter + '1'] = sa.c2p(di[sizeLetter], true);
123-
if(trace.type === 'waterfall' && di.isSum === false) {
124-
size -= (index === 0) ? 0 : cd[index - 1].s;
125-
}
126123
pointData[sizeLetter + 'LabelVal'] = size;
127124

128125
var extent = t.extents[t.extents.round(di.p)];

src/traces/bar/layout_defaults.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ module.exports = function(layoutIn, layoutOut, fullData) {
2626

2727
for(var i = 0; i < fullData.length; i++) {
2828
var trace = fullData[i];
29-
if(Registry.traceIs(trace, 'bar') &&
30-
trace.visible) hasBars = true;
29+
if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true;
3130
else continue;
3231

3332
// if we have at least 2 grouped bar traces on the same subplot,
@@ -40,7 +39,7 @@ module.exports = function(layoutIn, layoutOut, fullData) {
4039

4140
if(trace.visible && trace.type === 'histogram') {
4241
var pa = Axes.getFromId({_fullLayout: layoutOut},
43-
trace[trace.orientation === 'v' ? 'xaxis' : 'yaxis']);
42+
trace[trace.orientation === 'v' ? 'xaxis' : 'yaxis']);
4443
if(pa.type !== 'category') shouldBeGapless = true;
4544
}
4645
}

src/traces/bar/plot.js

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -152,71 +152,10 @@ module.exports = function plot(gd, plotinfo, cdModule, traceLayer) {
152152
Drawing.setClipUrl(plotGroup, hasClipOnAxisFalse ? null : plotinfo.layerClipId, gd);
153153
});
154154

155-
plotConnectors(gd, plotinfo, cdModule, traceLayer);
156-
157155
// error bars are on the top
158156
Registry.getComponentMethod('errorbars', 'plot')(gd, bartraces, plotinfo);
159157
};
160158

161-
function plotConnectors(gd, plotinfo, cdModule, traceLayer) {
162-
var xa = plotinfo.xaxis;
163-
var ya = plotinfo.yaxis;
164-
165-
Lib.makeTraceGroups(traceLayer, cdModule, 'trace connectors').each(function(cd) {
166-
var plotGroup = d3.select(this);
167-
var cd0 = cd[0];
168-
var trace = cd0.trace;
169-
170-
if(trace.type !== 'waterfall') return;
171-
if(!trace.connector || !trace.connector.width) return;
172-
173-
var lw = trace.connector.width * 0.5;
174-
var isHorizontal = (trace.orientation === 'h');
175-
176-
if(!plotinfo.isRangePlot) cd0.node3 = plotGroup;
177-
178-
var pointGroup = Lib.ensureSingle(plotGroup, 'g', 'connectors');
179-
180-
var connectors = pointGroup.selectAll('g.connector').data(Lib.identity);
181-
182-
connectors.enter().append('g')
183-
.classed('connector', true);
184-
185-
connectors.exit().remove();
186-
187-
connectors.each(function(di, i) {
188-
// do not draw connectors from the last item
189-
if(i === connectors[0].length - 1) return;
190-
191-
var connector = d3.select(this);
192-
var x0, x1, y0, y1;
193-
if(isHorizontal) {
194-
y0 = ya.c2p(di.p0, true);
195-
y1 = ya.c2p(di.p0 + 1, true);
196-
x0 = xa.c2p(di.s0, true);
197-
x1 = xa.c2p(di.s1, true);
198-
} else {
199-
x0 = xa.c2p(di.p0, true);
200-
x1 = xa.c2p(di.p0 + 1, true);
201-
y0 = ya.c2p(di.s0, true);
202-
y1 = ya.c2p(di.s1, true);
203-
}
204-
205-
var shape;
206-
if(isHorizontal) {
207-
shape = 'M' + (x1 + lw) + ',' + y0 + 'V' + y1 + 'H' + (x1 - lw) + 'V' + y0 + 'Z';
208-
} else {
209-
shape = 'M' + x0 + ',' + (y1 + lw) + 'H' + x1 + 'V' + (y1 - lw) + 'H' + x0 + 'Z';
210-
}
211-
212-
Lib.ensureSingle(connector, 'path')
213-
.style('vector-effect', 'non-scaling-stroke')
214-
.attr('d', shape)
215-
.call(Drawing.setClipUrl, plotinfo.layerClipId, gd);
216-
});
217-
});
218-
}
219-
220159
function appendBarText(gd, bar, calcTrace, i, x0, x1, y0, y1) {
221160
var textPosition;
222161

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* Copyright 2012-2019, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
var Registry = require('../../registry');
12+
var barCrossTraceCalc = require('../bar/cross_trace_calc').crossTraceCalc;
13+
14+
module.exports = function crossTraceCalc(gd, plotinfo) {
15+
16+
barCrossTraceCalc(gd, plotinfo);
17+
18+
var xa = plotinfo.xaxis;
19+
var ya = plotinfo.yaxis;
20+
21+
var fullTraces = gd._fullData;
22+
var calcTraces = gd.calcdata;
23+
var waterfalls = [];
24+
var i;
25+
26+
for(i = 0; i < fullTraces.length; i++) {
27+
var fullTrace = fullTraces[i];
28+
if(
29+
fullTrace.visible === true &&
30+
Registry.traceIs(fullTrace, 'bar') &&
31+
fullTrace.xaxis === xa._id &&
32+
fullTrace.yaxis === ya._id &&
33+
fullTrace.type === 'waterfall'
34+
) {
35+
waterfalls.push(calcTraces[i]);
36+
}
37+
}
38+
39+
for(i = 0; i < waterfalls.length; i++) {
40+
var cd = waterfalls[i];
41+
42+
for(var j = 0; j < cd.length; j++) {
43+
var di = cd[j];
44+
45+
if(di.isSum === false) {
46+
di.s0 += (j === 0) ? 0 : cd[j - 1].s;
47+
}
48+
}
49+
}
50+
};

src/traces/waterfall/hover.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Copyright 2012-2019, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
10+
'use strict';
11+
12+
var barHoverPoints = require('../bar/hover').hoverPoints;
13+
14+
module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
15+
16+
pointData = barHoverPoints(pointData, xval, yval, hovermode)[0];
17+
18+
var cd = pointData.cd;
19+
var trace = cd[0].trace;
20+
21+
// the closest data point
22+
var index = pointData.index;
23+
var di = cd[index];
24+
25+
var sizeLetter = (trace.orientation === 'h') ? 'x' : 'y';
26+
27+
var size = di.s;
28+
if(trace.type === 'waterfall' && di.isSum === false) {
29+
size -= (index === 0) ? 0 : cd[index - 1].s;
30+
}
31+
pointData[sizeLetter + 'LabelVal'] = size;
32+
33+
return [pointData];
34+
};

src/traces/waterfall/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ Waterfall.supplyDefaults = require('./defaults').supplyDefaults;
1616
Waterfall.crossTraceDefaults = require('./defaults').crossTraceDefaults;
1717
Waterfall.supplyLayoutDefaults = require('./layout_defaults');
1818
Waterfall.calc = require('./calc');
19-
Waterfall.crossTraceCalc = require('../bar/cross_trace_calc').crossTraceCalc;
19+
Waterfall.crossTraceCalc = require('./cross_trace_calc');
2020
Waterfall.colorbar = require('../scatter/marker_colorbar');
2121
Waterfall.arraysToCalcdata = require('../bar/arrays_to_calcdata');
22-
Waterfall.plot = require('../bar/plot');
22+
Waterfall.plot = require('./plot');
2323
Waterfall.style = require('../bar/style').style;
2424
Waterfall.styleOnSelect = require('../bar/style').styleOnSelect;
25-
Waterfall.hoverPoints = require('../bar/hover').hoverPoints;
25+
Waterfall.hoverPoints = require('./hover');
2626
Waterfall.selectPoints = require('../bar/select');
2727

2828
Waterfall.moduleType = 'trace';

src/traces/waterfall/plot.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/**
2+
* Copyright 2012-2019, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
10+
'use strict';
11+
12+
var d3 = require('d3');
13+
var Lib = require('../../lib');
14+
var Drawing = require('../../components/drawing');
15+
var barPlot = require('../bar/plot');
16+
17+
module.exports = function plot(gd, plotinfo, cdModule, traceLayer) {
18+
barPlot(gd, plotinfo, cdModule, traceLayer);
19+
20+
plotConnectors(gd, plotinfo, cdModule, traceLayer);
21+
};
22+
23+
function plotConnectors(gd, plotinfo, cdModule, traceLayer) {
24+
var xa = plotinfo.xaxis;
25+
var ya = plotinfo.yaxis;
26+
27+
Lib.makeTraceGroups(traceLayer, cdModule, 'trace connectors').each(function(cd) {
28+
var plotGroup = d3.select(this);
29+
var cd0 = cd[0];
30+
var trace = cd0.trace;
31+
32+
if(trace.type !== 'waterfall') return;
33+
if(!trace.connector || !trace.connector.width) return;
34+
35+
var lw = trace.connector.width * 0.5;
36+
var isHorizontal = (trace.orientation === 'h');
37+
38+
if(!plotinfo.isRangePlot) cd0.node3 = plotGroup;
39+
40+
var pointGroup = Lib.ensureSingle(plotGroup, 'g', 'connectors');
41+
42+
var connectors = pointGroup.selectAll('g.connector').data(Lib.identity);
43+
44+
connectors.enter().append('g')
45+
.classed('connector', true);
46+
47+
connectors.exit().remove();
48+
49+
connectors.each(function(di, i) {
50+
// do not draw connectors from the last item
51+
if(i === connectors[0].length - 1) return;
52+
53+
var connector = d3.select(this);
54+
var x0, x1, y0, y1;
55+
if(isHorizontal) {
56+
y0 = ya.c2p(di.p0, true);
57+
y1 = ya.c2p(di.p0 + 1, true);
58+
x0 = xa.c2p(di.s0, true);
59+
x1 = xa.c2p(di.s1, true);
60+
} else {
61+
x0 = xa.c2p(di.p0, true);
62+
x1 = xa.c2p(di.p0 + 1, true);
63+
y0 = ya.c2p(di.s0, true);
64+
y1 = ya.c2p(di.s1, true);
65+
}
66+
67+
var shape;
68+
if(isHorizontal) {
69+
shape = 'M' + (x1 + lw) + ',' + y0 + 'V' + y1 + 'H' + (x1 - lw) + 'V' + y0 + 'Z';
70+
} else {
71+
shape = 'M' + x0 + ',' + (y1 + lw) + 'H' + x1 + 'V' + (y1 - lw) + 'H' + x0 + 'Z';
72+
}
73+
74+
Lib.ensureSingle(connector, 'path')
75+
.style('vector-effect', 'non-scaling-stroke')
76+
.attr('d', shape)
77+
.call(Drawing.setClipUrl, plotinfo.layerClipId, gd);
78+
});
79+
});
80+
}

0 commit comments

Comments
 (0)