From e979cf0dbf3493c8d693f0e3b0d44f9bff659cb4 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Wed, 4 Apr 2018 21:34:30 -0400 Subject: [PATCH 01/24] refactor candlestick into a first-class trace, also box/violin hover expanded acceptance --- src/components/legend/draw.js | 4 +- src/components/legend/style.js | 33 ++++++- src/components/rangeslider/defaults.js | 14 +-- src/plot_api/helpers.js | 45 +++++++++ src/plot_api/plot_schema.js | 24 ++++- src/plots/plots.js | 4 + src/traces/box/calc.js | 5 - src/traces/box/hover.js | 12 +-- src/traces/box/index.js | 2 +- src/traces/box/layout_defaults.js | 4 +- src/traces/box/plot.js | 13 ++- src/traces/box/set_positions.js | 10 +- src/traces/box/style.js | 45 ++++++--- src/traces/candlestick/attributes.js | 3 - src/traces/candlestick/calc.js | 77 +++++++++++++++ src/traces/candlestick/defaults.js | 16 +-- src/traces/candlestick/hover.js | 97 +++++++++++++++++++ src/traces/candlestick/index.js | 15 +-- src/traces/candlestick/select.js | 43 +++++++++ src/traces/candlestick/transform.js | 129 ------------------------- src/traces/ohlc/helpers.js | 1 + src/traces/violin/index.js | 2 +- src/traces/violin/plot.js | 8 +- test/jasmine/tests/plot_api_test.js | 53 ++++++++++ 24 files changed, 460 insertions(+), 199 deletions(-) create mode 100644 src/traces/candlestick/calc.js create mode 100644 src/traces/candlestick/hover.js create mode 100644 src/traces/candlestick/select.js delete mode 100644 src/traces/candlestick/transform.js diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 98c1e766652..954086490b9 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -390,9 +390,9 @@ function drawTexts(g, gd) { // N.B. this block isn't super clean, // is unfortunately untested at the moment, - // and only works for for 'ohlc' and 'candlestick', + // and only works for for 'ohlc', // but should be generalized for other one-to-many transforms - if(['ohlc', 'candlestick'].indexOf(fullInput.type) !== -1) { + if(fullInput.type === 'ohlc') { transforms = legendItem.trace.transforms; direction = transforms[transforms.length - 1].direction; diff --git a/src/components/legend/style.js b/src/components/legend/style.js index b5a4878b9f7..1eab5571214 100644 --- a/src/components/legend/style.js +++ b/src/components/legend/style.js @@ -52,7 +52,8 @@ module.exports = function style(s, gd) { .each(styleBoxes) .each(stylePies) .each(styleLines) - .each(stylePoints); + .each(stylePoints) + .each(styleCandles); function styleLines(d) { var trace = d[0].trace; @@ -207,7 +208,35 @@ module.exports = function style(s, gd) { .call(Color.fill, trace.fillcolor); if(w) { - p.call(Color.stroke, trace.line.color); + Color.stroke(p, trace.line.color); + } + }); + } + + function styleCandles(d) { + var trace = d[0].trace, + pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendcandle') + .data(Registry.traceIs(trace, 'candlestick') && trace.visible ? [d, d] : []); + pts.enter().append('path').classed('legendcandle', true) + // if we want the median bar, prepend M6,0H-6 + .attr('d', function(_, i) { + if(i) return 'M-15,0H-8M-8,6V-6H8Z'; // increasing + return 'M15,0H8M8,-6V6H-8Z'; // decreasing + }) + .attr('transform', 'translate(20,0)') + .style('stroke-miterlimit', 1); + pts.exit().remove(); + pts.each(function(_, i) { + var container = trace[i ? 'increasing' : 'decreasing']; + var w = container.line.width, + p = d3.select(this); + + p.style('stroke-width', w + 'px') + .call(Color.fill, container.fillcolor); + + if(w) { + Color.stroke(p, container.line.color); } }); } diff --git a/src/components/rangeslider/defaults.js b/src/components/rangeslider/defaults.js index 5202aa2a7a6..651bfc72e7f 100644 --- a/src/components/rangeslider/defaults.js +++ b/src/components/rangeslider/defaults.js @@ -14,16 +14,18 @@ var oppAxisAttrs = require('./oppaxis_attributes'); var axisIds = require('../../plots/cartesian/axis_ids'); module.exports = function handleDefaults(layoutIn, layoutOut, axName) { - if(!layoutIn[axName].rangeslider) return; + var axIn = layoutIn[axName]; + var axOut = layoutOut[axName]; + + if(!(axIn.rangeslider || layoutOut._requestRangeslider[axOut._id])) return; // not super proud of this (maybe store _ in axis object instead - if(!Lib.isPlainObject(layoutIn[axName].rangeslider)) { - layoutIn[axName].rangeslider = {}; + if(!Lib.isPlainObject(axIn.rangeslider)) { + axIn.rangeslider = {}; } - var containerIn = layoutIn[axName].rangeslider, - axOut = layoutOut[axName], - containerOut = axOut.rangeslider = {}; + var containerIn = axIn.rangeslider; + var containerOut = axOut.rangeslider = {}; function coerce(attr, dflt) { return Lib.coerce(containerIn, containerOut, attributes, attr, dflt); diff --git a/src/plot_api/helpers.js b/src/plot_api/helpers.js index d4f44af785a..a5effdb94bc 100644 --- a/src/plot_api/helpers.js +++ b/src/plot_api/helpers.js @@ -330,6 +330,26 @@ exports.cleanData = function(data, existingData) { } } + // fixes from converting finance from transforms to real trace types + if(trace.type === 'candlestick') { + var increasingName = cleanFinanceDir(trace.increasing); + var decreasingName = cleanFinanceDir(trace.decreasing); + + // now figure out something smart to do with the separate direction + // names we removed + if(increasingName && decreasingName) { + // both sub-names existed: base name previously had no effect + // so ignore it and try to find a shared part of the sub-names + var newName = commonPrefix(increasingName, decreasingName); + // if no common part, leave whatever name was (or wasn't) there + if(newName) trace.name = newName; + } + else if((increasingName || decreasingName) && !trace.name) { + // one sub-name existed but not the base name - just use the sub-name + trace.name = increasingName || decreasingName; + } + } + // transforms backward compatibility fixes if(Array.isArray(trace.transforms)) { var transforms = trace.transforms; @@ -388,6 +408,31 @@ exports.cleanData = function(data, existingData) { } }; +function cleanFinanceDir(dirContainer) { + if(!Lib.isPlainObject(dirContainer)) return ''; + + var dirName = (dirContainer.showlegend === false) ? '' : dirContainer.name; + + delete dirContainer.name; + delete dirContainer.showlegend; + + return dirName; +} + +function commonPrefix(name1, name2) { + if(!name1.trim()) return name2; + if(!name2.trim()) return name1; + + var minLen = Math.min(name1.length, name2.length); + var i; + for(i = 0; i < minLen; i++) { + if(name1.charAt(i) !== name2.charAt(i)) break; + } + + var out = name1.substr(0, i); + return out.trim(); +} + // textposition - support partial attributes (ie just 'top') // and incorrect use of middle / center etc. function cleanTextPosition(textposition) { diff --git a/src/plot_api/plot_schema.js b/src/plot_api/plot_schema.js index 54994abf457..f1d6f171e4c 100644 --- a/src/plot_api/plot_schema.js +++ b/src/plot_api/plot_schema.js @@ -252,15 +252,17 @@ exports.findArrayAttributes = function(trace) { exports.getTraceValObject = function(trace, parts) { var head = parts[0]; var i = 1; // index to start recursing from + var transforms = trace.transforms; + if(!Array.isArray(transforms) || !transforms.length) transforms = false; var moduleAttrs, valObject; if(head === 'transforms') { - if(!Array.isArray(trace.transforms)) return false; + if(!transforms) return false; var tNum = parts[1]; - if(!isIndex(tNum) || tNum >= trace.transforms.length) { + if(!isIndex(tNum) || tNum >= transforms.length) { return false; } - moduleAttrs = (Registry.transformsRegistry[trace.transforms[tNum].type] || {}).attributes; + moduleAttrs = (Registry.transformsRegistry[transforms[tNum].type] || {}).attributes; valObject = moduleAttrs && moduleAttrs[parts[2]]; i = 3; // start recursing only inside the transform } @@ -285,8 +287,22 @@ exports.getTraceValObject = function(trace, parts) { } } - // finally look in the global attributes + // next look in the global attributes if(!valObject) valObject = baseAttributes[head]; + + // finally check if we have a transform matching the original trace type + if(!valObject && transforms) { + var inputType = trace._input.type; + if(inputType && inputType !== trace.type) { + for(var j = 0; j < transforms.length; j++) { + if(transforms[j].type === inputType) { + moduleAttrs = ((Registry.modules[inputType] || {})._module || {}).attributes; + valObject = moduleAttrs && moduleAttrs[head]; + if(valObject) break; + } + } + } + } } return recurseIntoValObject(valObject, parts, i); diff --git a/src/plots/plots.js b/src/plots/plots.js index 56c45fcdb17..2ee3b69f67c 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -366,6 +366,10 @@ plots.supplyDefaults = function(gd) { newFullLayout._basePlotModules = []; newFullLayout._subplots = emptySubplotLists(); + // for traces to request a default rangeslider on their x axes + // eg set `_requestRangeslider.x2 = true` for xaxis2 + newFullLayout._requestRangeslider = {}; + // then do the data newFullLayout._globalTransforms = (gd._context || {}).globalTransforms; plots.supplyDataDefaults(newData, newFullData, newLayout, newFullLayout); diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index 9452bc3390a..0c4c75dc58a 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -143,11 +143,6 @@ module.exports = function calc(gd, trace) { } }; - // don't show labels in candlestick hover labels - if(trace._fullInput && trace._fullInput.type === 'candlestick') { - delete cd[0].t.labels; - } - fullLayout[numKey]++; return cd; } else { diff --git a/src/traces/box/hover.js b/src/traces/box/hover.js index 3ff3fe024ef..79e24509360 100644 --- a/src/traces/box/hover.js +++ b/src/traces/box/hover.js @@ -58,25 +58,26 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) { hoverPseudoDistance, spikePseudoDistance; var boxDelta = t.bdPos; + var posAcceptance = t.wHover; var shiftPos = function(di) { return di.pos + t.bPos - pVal; }; if(isViolin && trace.side !== 'both') { if(trace.side === 'positive') { dPos = function(di) { var pos = shiftPos(di); - return Fx.inbox(pos, pos + boxDelta, hoverPseudoDistance); + return Fx.inbox(pos, pos + posAcceptance, hoverPseudoDistance); }; } if(trace.side === 'negative') { dPos = function(di) { var pos = shiftPos(di); - return Fx.inbox(pos - boxDelta, pos, hoverPseudoDistance); + return Fx.inbox(pos - posAcceptance, pos, hoverPseudoDistance); }; } } else { dPos = function(di) { var pos = shiftPos(di); - return Fx.inbox(pos - boxDelta, pos + boxDelta, hoverPseudoDistance); + return Fx.inbox(pos - posAcceptance, pos + posAcceptance, hoverPseudoDistance); }; } @@ -133,10 +134,9 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) { else if(Color.opacity(mc) && trace.boxpoints) pointData.color = mc; else pointData.color = trace.fillcolor; - pointData[pLetter + '0'] = pAxis.c2p(di.pos + t.bPos - t.bdPos, true); - pointData[pLetter + '1'] = pAxis.c2p(di.pos + t.bPos + t.bdPos, true); + pointData[pLetter + '0'] = pAxis.c2p(di.pos + t.bPos - boxDelta, true); + pointData[pLetter + '1'] = pAxis.c2p(di.pos + t.bPos + boxDelta, true); - Axes.tickText(pAxis, pAxis.c2l(di.pos), 'hover').text; pointData[pLetter + 'LabelVal'] = di.pos; var spikePosAttr = pLetter + 'Spike'; diff --git a/src/traces/box/index.js b/src/traces/box/index.js index 5395dd0af66..e965cc7320b 100644 --- a/src/traces/box/index.js +++ b/src/traces/box/index.js @@ -24,7 +24,7 @@ Box.selectPoints = require('./select'); Box.moduleType = 'trace'; Box.name = 'box'; Box.basePlotModule = require('../../plots/cartesian'); -Box.categories = ['cartesian', 'symbols', 'oriented', 'box-violin', 'showLegend']; +Box.categories = ['cartesian', 'symbols', 'oriented', 'box-violin', 'showLegend', 'boxLayout']; Box.meta = { description: [ 'In vertical (horizontal) box plots,', diff --git a/src/traces/box/layout_defaults.js b/src/traces/box/layout_defaults.js index fd136614907..68af8851d0b 100644 --- a/src/traces/box/layout_defaults.js +++ b/src/traces/box/layout_defaults.js @@ -8,13 +8,15 @@ 'use strict'; +var Registry = require('../../registry'); var Lib = require('../../lib'); var layoutAttributes = require('./layout_attributes'); function _supply(layoutIn, layoutOut, fullData, coerce, traceType) { var hasTraceType; + var category = traceType + 'Layout'; for(var i = 0; i < fullData.length; i++) { - if(fullData[i].type === traceType) { + if(Registry.traceIs(fullData[i], category)) { hasTraceType = true; break; } diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index 8f8bea84b5c..46b531107db 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -35,11 +35,13 @@ function plot(gd, plotinfo, cdbox) { var sel = cd0.node3 = d3.select(this); var numBoxes = fullLayout._numBoxes; + var groupFraction = (1 - fullLayout.boxgap); + var group = (fullLayout.boxmode === 'group' && numBoxes > 1); // box half width - var bdPos = t.dPos * (1 - fullLayout.boxgap) * (1 - fullLayout.boxgroupgap) / (group ? numBoxes : 1); + var bdPos = t.dPos * groupFraction * (1 - fullLayout.boxgroupgap) / (group ? numBoxes : 1); // box center offset - var bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numBoxes) * (1 - fullLayout.boxgap) : 0; + var bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numBoxes) * groupFraction : 0; // whisker width var wdPos = bdPos * trace.whiskerwidth; @@ -62,6 +64,9 @@ function plot(gd, plotinfo, cdbox) { t.bPos = bPos; t.bdPos = bdPos; t.wdPos = wdPos; + // half-width within which to accept hover for this box + // always split the distance to the closest box + t.wHover = t.dPos * (group ? groupFraction / numBoxes : 1); // boxes and whiskers plotBoxAndWhiskers(sel, {pos: posAxis, val: valAxis}, trace, t); @@ -121,8 +126,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { valAxis.c2p(d.med, true), Math.min(q1, q3) + 1, Math.max(q1, q3) - 1 ); - var lf = valAxis.c2p(trace.boxpoints === false ? d.min : d.lf, true); - var uf = valAxis.c2p(trace.boxpoints === false ? d.max : d.uf, true); + var lf = valAxis.c2p(trace.boxpoints ? d.lf : d.min, true); + var uf = valAxis.c2p(trace.boxpoints ? d.uf : d.max, true); var ln = valAxis.c2p(d.ln, true); var un = valAxis.c2p(d.un, true); diff --git a/src/traces/box/set_positions.js b/src/traces/box/set_positions.js index 21437c39a25..ca460fd8297 100644 --- a/src/traces/box/set_positions.js +++ b/src/traces/box/set_positions.js @@ -25,21 +25,23 @@ function setPositions(gd, plotinfo) { var minPad = 0; var maxPad = 0; - // make list of boxes + // make list of boxes / candlesticks + // For backward compatibility, candlesticks are treated as if they *are* box traces here for(var j = 0; j < calcdata.length; j++) { var cd = calcdata[j]; var t = cd[0].t; var trace = cd[0].trace; - if(trace.visible === true && trace.type === 'box' && + if(trace.visible === true && + (trace.type === 'box' || trace.type === 'candlestick') && !t.empty && - trace.orientation === orientation && + (trace.orientation || 'v') === orientation && trace.xaxis === xa._id && trace.yaxis === ya._id ) { boxList.push(j); - if(trace.boxpoints !== false) { + if(trace.boxpoints) { minPad = Math.max(minPad, trace.jitter - trace.pointpos - 1); maxPad = Math.max(maxPad, trace.jitter + trace.pointpos - 1); } diff --git a/src/traces/box/style.js b/src/traces/box/style.js index 265692eedb2..afcb8232b8d 100644 --- a/src/traces/box/style.js +++ b/src/traces/box/style.js @@ -22,20 +22,35 @@ module.exports = function style(gd, cd) { var trace = d[0].trace; var lineWidth = trace.line.width; - el.selectAll('path.box') - .style('stroke-width', lineWidth + 'px') - .call(Color.stroke, trace.line.color) - .call(Color.fill, trace.fillcolor); - - el.selectAll('path.mean') - .style({ - 'stroke-width': lineWidth, - 'stroke-dasharray': (2 * lineWidth) + 'px,' + lineWidth + 'px' - }) - .call(Color.stroke, trace.line.color); - - var pts = el.selectAll('path.point'); - Drawing.pointStyle(pts, trace, gd); - Drawing.selectedPointStyle(pts, trace); + function styleBox(boxSel, lineWidth, lineColor, fillColor) { + boxSel.style('stroke-width', lineWidth + 'px') + .call(Color.stroke, lineColor) + .call(Color.fill, fillColor); + } + + var allBoxes = el.selectAll('path.box'); + + if(trace.type === 'candlestick') { + allBoxes.each(function(boxData) { + var thisBox = d3.select(this); + var container = trace[boxData.candle]; // candle = 'increasing' or 'decreasing' + styleBox(thisBox, container.line.width, container.line.color, container.fillcolor); + // TODO: custom selection style for candlesticks + thisBox.style('opacity', trace.selectedpoints && !boxData.selected ? 0.3 : 1); + }); + } + else { + styleBox(allBoxes, lineWidth, trace.line.color, trace.fillcolor); + el.selectAll('path.mean') + .style({ + 'stroke-width': lineWidth, + 'stroke-dasharray': (2 * lineWidth) + 'px,' + lineWidth + 'px' + }) + .call(Color.stroke, trace.line.color); + + var pts = el.selectAll('path.point'); + Drawing.pointStyle(pts, trace, gd); + Drawing.selectedPointStyle(pts, trace); + } }); }; diff --git a/src/traces/candlestick/attributes.js b/src/traces/candlestick/attributes.js index f4a6c8c9394..ac007ffc9af 100644 --- a/src/traces/candlestick/attributes.js +++ b/src/traces/candlestick/attributes.js @@ -15,9 +15,6 @@ var boxAttrs = require('../box/attributes'); function directionAttrs(lineColorDefault) { return { - name: OHLCattrs.increasing.name, - showlegend: OHLCattrs.increasing.showlegend, - line: { color: extendFlat({}, boxAttrs.line.color, {dflt: lineColorDefault}), width: boxAttrs.line.width, diff --git a/src/traces/candlestick/calc.js b/src/traces/candlestick/calc.js new file mode 100644 index 00000000000..515fd75a9f6 --- /dev/null +++ b/src/traces/candlestick/calc.js @@ -0,0 +1,77 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Lib = require('../../lib'); +var _ = Lib._; +var Axes = require('../../plots/cartesian/axes'); + +module.exports = function(gd, trace) { + var fullLayout = gd._fullLayout; + var xa = Axes.getFromId(gd, trace.xaxis); + var ya = Axes.getFromId(gd, trace.yaxis); + var cd = []; + + var x = xa.makeCalcdata(trace, 'x'); + var o = ya.makeCalcdata(trace, 'open'); + var h = ya.makeCalcdata(trace, 'high'); + var l = ya.makeCalcdata(trace, 'low'); + var c = ya.makeCalcdata(trace, 'close'); + + var hasTextArray = Array.isArray(trace.text); + + for(var i = 0; i < x.length; i++) { + var xi = x[i]; + var oi = o[i]; + var hi = h[i]; + var li = l[i]; + var ci = c[i]; + + if(xi !== undefined && oi !== undefined && hi !== undefined && li !== undefined && ci !== undefined) { + var increasing = ci >= oi; + + var pt = { + pos: xi, + min: li, + q1: increasing ? oi : ci, + med: ci, + q3: increasing ? ci : oi, + max: hi, + i: i, + candle: increasing ? 'increasing' : 'decreasing' + }; + + if(hasTextArray) pt.tx = trace.text[i]; + + cd.push(pt); + } + } + + Axes.expand(ya, l.concat(h), {padded: true}); + + if(cd.length) { + cd[0].t = { + num: fullLayout._numBoxes, + dPos: Lib.distinctVals(x).minDiff / 2, + posLetter: 'x', + valLetter: 'y', + labels: { + open: _(gd, 'open:') + ' ', + high: _(gd, 'high:') + ' ', + low: _(gd, 'low:') + ' ', + close: _(gd, 'close:') + ' ' + } + }; + + fullLayout._numBoxes++; + return cd; + } else { + return [{t: {empty: true}}]; + } +}; diff --git a/src/traces/candlestick/defaults.js b/src/traces/candlestick/defaults.js index ee5dcdf7682..ad43f01516f 100644 --- a/src/traces/candlestick/defaults.js +++ b/src/traces/candlestick/defaults.js @@ -10,14 +10,11 @@ 'use strict'; var Lib = require('../../lib'); +var Color = require('../../components/color'); var handleOHLC = require('../ohlc/ohlc_defaults'); -var handleDirectionDefaults = require('../ohlc/direction_defaults'); -var helpers = require('../ohlc/helpers'); var attributes = require('./attributes'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { - helpers.pushDummyTransformOpts(traceIn, traceOut); - function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } @@ -28,6 +25,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return; } + // TODO: get rid of _inputLength and do this in ohlc_defaults once that's not a transform either + traceOut._length = len; + coerce('line.width'); handleDirection(traceIn, traceOut, coerce, 'increasing'); @@ -35,12 +35,12 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('whiskerwidth'); + + layout._requestRangeslider[traceOut.xaxis] = true; }; function handleDirection(traceIn, traceOut, coerce, direction) { - handleDirectionDefaults(traceIn, traceOut, coerce, direction); - - coerce(direction + '.line.color'); + var lineColor = coerce(direction + '.line.color'); coerce(direction + '.line.width', traceOut.line.width); - coerce(direction + '.fillcolor'); + coerce(direction + '.fillcolor', Color.addOpacity(lineColor, 0.5)); } diff --git a/src/traces/candlestick/hover.js b/src/traces/candlestick/hover.js new file mode 100644 index 00000000000..c558997665a --- /dev/null +++ b/src/traces/candlestick/hover.js @@ -0,0 +1,97 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Axes = require('../../plots/cartesian/axes'); +var Fx = require('../../components/fx'); +var Color = require('../../components/color'); +var fillHoverText = require('../scatter/fill_hover_text'); + +var DIRSYMBOL = { + increasing: '▲', + decreasing: '▼' +}; + +module.exports = function hoverPoints(pointData, xval, yval, hovermode) { + var cd = pointData.cd; + var xa = pointData.xa; + var ya = pointData.ya; + var trace = cd[0].trace; + var t = cd[0].t; + + var boxDelta = t.bdPos; + // if two candles are overlaying, let the narrowest one win + var pseudoDistance = Math.min(1, boxDelta / Math.abs(xa.r2c(xa.range[1]) - xa.r2c(xa.range[0]))); + var hoverPseudoDistance = pointData.maxHoverDistance - pseudoDistance; + var spikePseudoDistance = pointData.maxSpikeDistance - pseudoDistance; + + function dx(di) { + var pos = di.pos + t.bPos - xval; + return Fx.inbox(pos - t.wHover, pos + t.wHover, hoverPseudoDistance); + } + + function dy(di) { + return Fx.inbox(di.min - yval, di.max - yval, hoverPseudoDistance); + } + + function dxy(di) { return (dx(di) + dy(di)) / 2; } + var distfn = Fx.getDistanceFunction(hovermode, dx, dy, dxy); + Fx.getClosest(cd, distfn, pointData); + + // skip the rest (for this trace) if we didn't find a close point + if(pointData.index === false) return []; + + // we don't make a calcdata point if we're missing any piece (x/o/h/l/c) + // so we need to fix the index here to point to the data arrays + var cdIndex = pointData.index; + var di = cd[cdIndex]; + var i = pointData.index = di.i; + + var dir = di.candle; + var highEnd = (dir === 'increasing') ? 'close' : 'open'; + var lowEnd = (dir === 'increasing') ? 'open' : 'close'; + var container = trace[dir]; + var lc = container.line.color; + + if(Color.opacity(lc) && container.line.width) pointData.color = lc; + else pointData.color = container.fillcolor; + + pointData.x0 = xa.c2p(di.pos + t.bPos - boxDelta, true); + pointData.x1 = xa.c2p(di.pos + t.bPos + boxDelta, true); + + pointData.xLabelVal = di.pos; + + pointData.spikeDistance = dxy(di) * spikePseudoDistance / hoverPseudoDistance; + pointData.xSpike = xa.c2p(di.pos, true); + + function getLabelLine(attr) { + return t.labels[attr] + Axes.hoverLabelText(ya, trace[attr][i]); + } + + var textParts = [ + getLabelLine('open'), + getLabelLine('high'), + getLabelLine('low'), + getLabelLine('close') + ]; + fillHoverText(di, trace, textParts); + pointData.text = textParts.join('
'); + + // this puts the label at the midpoint of the box, ie + // halfway between open and close, not between high and low. + // TODO: the spike also links to this point, whereas previously + // it linked to close. Is one better? + pointData.y0 = ya.c2p(trace[lowEnd][i], true); + pointData.y1 = ya.c2p(trace[highEnd][i], true); + + // indicate increasing/decreasing in the "name" field + pointData.name += '
' + DIRSYMBOL[dir]; + + return [pointData]; +}; diff --git a/src/traces/candlestick/index.js b/src/traces/candlestick/index.js index dff5c003935..d22d8d8def7 100644 --- a/src/traces/candlestick/index.js +++ b/src/traces/candlestick/index.js @@ -8,13 +8,11 @@ 'use strict'; -var Registry = require('../../registry'); - module.exports = { moduleType: 'trace', name: 'candlestick', basePlotModule: require('../../plots/cartesian'), - categories: ['cartesian', 'showLegend', 'candlestick'], + categories: ['cartesian', 'showLegend', 'candlestick', 'boxLayout'], meta: { description: [ 'The candlestick is a style of financial chart describing', @@ -32,8 +30,13 @@ module.exports = { }, attributes: require('./attributes'), + layoutAttributes: require('../box/layout_attributes'), + supplyLayoutDefaults: require('../box/layout_defaults').supplyLayoutDefaults, + setPositions: require('../box/set_positions').setPositions, supplyDefaults: require('./defaults'), + calc: require('./calc'), + plot: require('../box/plot').plot, + style: require('../box/style'), + hoverPoints: require('./hover'), + selectPoints: require('./select') }; - -Registry.register(require('../box')); -Registry.register(require('./transform')); diff --git a/src/traces/candlestick/select.js b/src/traces/candlestick/select.js new file mode 100644 index 00000000000..739cee5f547 --- /dev/null +++ b/src/traces/candlestick/select.js @@ -0,0 +1,43 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +module.exports = function selectPoints(searchInfo, polygon) { + var cd = searchInfo.cd; + var xa = searchInfo.xaxis; + var ya = searchInfo.yaxis; + var selection = []; + var i; + var posOffset = cd[0].t.bPos; + + if(polygon === false) { + // clear selection + for(i = 0; i < cd.length; i++) { + cd[i].selected = 0; + } + } else { + for(i = 0; i < cd.length; i++) { + var di = cd[i]; + var y = (di.q1 + di.q3) / 2; + + if(polygon.contains([xa.c2p(di.pos + posOffset), ya.c2p(y)])) { + selection.push({ + pointNumber: di.i, + x: xa.c2d(di.pos), + y: ya.c2d(y) + }); + di.selected = 1; + } else { + di.selected = 0; + } + } + } + + return selection; +}; diff --git a/src/traces/candlestick/transform.js b/src/traces/candlestick/transform.js deleted file mode 100644 index 36b1e5de6c7..00000000000 --- a/src/traces/candlestick/transform.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var isNumeric = require('fast-isnumeric'); - -var Lib = require('../../lib'); -var helpers = require('../ohlc/helpers'); - -exports.moduleType = 'transform'; - -exports.name = 'candlestick'; - -exports.attributes = {}; - -exports.supplyDefaults = function(transformIn, traceOut, layout, traceIn) { - helpers.clearEphemeralTransformOpts(traceIn); - helpers.copyOHLC(transformIn, traceOut); - - return transformIn; -}; - -exports.transform = function transform(dataIn, state) { - var dataOut = []; - - for(var i = 0; i < dataIn.length; i++) { - var traceIn = dataIn[i]; - - if(traceIn.type !== 'candlestick') { - dataOut.push(traceIn); - continue; - } - - dataOut.push( - makeTrace(traceIn, state, 'increasing'), - makeTrace(traceIn, state, 'decreasing') - ); - } - - helpers.addRangeSlider(dataOut, state.layout); - - return dataOut; -}; - -function makeTrace(traceIn, state, direction) { - var traceOut = { - type: 'box', - boxpoints: false, - - visible: traceIn.visible, - hoverinfo: traceIn.hoverinfo, - opacity: traceIn.opacity, - xaxis: traceIn.xaxis, - yaxis: traceIn.yaxis, - - transforms: helpers.makeTransform(traceIn, state, direction), - _inputLength: traceIn._inputLength - }; - - // the rest of below may not have been coerced - - var directionOpts = traceIn[direction]; - - if(directionOpts) { - Lib.extendFlat(traceOut, { - - // to make autotype catch date axes soon!! - x: traceIn.x || [0], - xcalendar: traceIn.xcalendar, - - // concat low and high to get correct autorange - y: [].concat(traceIn.low).concat(traceIn.high), - - whiskerwidth: traceIn.whiskerwidth, - text: traceIn.text, - - name: directionOpts.name, - showlegend: directionOpts.showlegend, - line: directionOpts.line, - fillcolor: directionOpts.fillcolor - }); - } - - return traceOut; -} - -exports.calcTransform = function calcTransform(gd, trace, opts) { - var direction = opts.direction, - filterFn = helpers.getFilterFn(direction); - - var open = trace.open, - high = trace.high, - low = trace.low, - close = trace.close; - - var len = trace._inputLength, - x = [], - y = []; - - var appendX = trace._fullInput.x ? - function(i) { - var v = trace.x[i]; - x.push(v, v, v, v, v, v); - } : - function(i) { - x.push(i, i, i, i, i, i); - }; - - var appendY = function(o, h, l, c) { - y.push(l, o, c, c, c, h); - }; - - for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i]) && isNumeric(high[i]) && isNumeric(low[i])) { - appendX(i); - appendY(open[i], high[i], low[i], close[i]); - } - } - - trace.x = x; - trace.y = y; -}; diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js index eff64c4f05c..7fe8917f918 100644 --- a/src/traces/ohlc/helpers.js +++ b/src/traces/ohlc/helpers.js @@ -140,6 +140,7 @@ exports.addRangeSlider = function(data, layout) { } } + // TODO: shouldn't we add rangesliders to any x axes that these traces are on? if(hasOneVisibleTrace) { if(!layout.xaxis) layout.xaxis = {}; if(!layout.xaxis.rangeslider) layout.xaxis.rangeslider = {}; diff --git a/src/traces/violin/index.js b/src/traces/violin/index.js index c97355078d2..30fcaac7721 100644 --- a/src/traces/violin/index.js +++ b/src/traces/violin/index.js @@ -23,7 +23,7 @@ module.exports = { moduleType: 'trace', name: 'violin', basePlotModule: require('../../plots/cartesian'), - categories: ['cartesian', 'symbols', 'oriented', 'box-violin', 'showLegend'], + categories: ['cartesian', 'symbols', 'oriented', 'box-violin', 'showLegend', 'violinLayout'], meta: { description: [ 'In vertical (horizontal) violin plots,', diff --git a/src/traces/violin/plot.js b/src/traces/violin/plot.js index a0c670c3467..43fc6eba3f8 100644 --- a/src/traces/violin/plot.js +++ b/src/traces/violin/plot.js @@ -45,10 +45,14 @@ module.exports = function plot(gd, plotinfo, cd) { var sel = cd0.node3 = d3.select(this); var numViolins = fullLayout._numViolins; var group = (fullLayout.violinmode === 'group' && numViolins > 1); + var groupFraction = 1 - fullLayout.violingap; // violin max half width - var bdPos = t.bdPos = t.dPos * (1 - fullLayout.violingap) * (1 - fullLayout.violingroupgap) / (group ? numViolins : 1); + var bdPos = t.bdPos = t.dPos * groupFraction * (1 - fullLayout.violingroupgap) / (group ? numViolins : 1); // violin center offset - var bPos = t.bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numViolins) * (1 - fullLayout.violingap) : 0; + var bPos = t.bPos = group ? 2 * t.dPos * (-0.5 + (t.num + 0.5) / numViolins) * groupFraction : 0; + // half-width within which to accept hover for this violin + // always split the distance to the closest violin + t.wHover = t.dPos * (group ? groupFraction / numViolins : 1); if(trace.visible !== true || t.empty) { d3.select(this).remove(); diff --git a/test/jasmine/tests/plot_api_test.js b/test/jasmine/tests/plot_api_test.js index 96319a39fb2..218e9fc4fbc 100644 --- a/test/jasmine/tests/plot_api_test.js +++ b/test/jasmine/tests/plot_api_test.js @@ -2781,6 +2781,59 @@ describe('Test plot api', function() { .then(done); }); + // it('has the right internal state after altering candlesticks', function(done) { + // var trace = { + // type: 'candlestick', + // low: [1], + // open: [2], + // close: [3], + // high: [4] + // }; + // Plotly.newPlot(gd, [trace]) + // .then(function() { + // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); + // return Plotly.react(gd, [trace]); + // }) + // .then(function() { + // // the plot actually *looks* correct here, but this is the simplest + // // manifestation of https://github.com/plotly/plotly.js/issues/2510 + // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); + // }) + // .catch(failTest) + // .then(done); + // }); + + // it('can change data in candlesticks multiple times', function(done) { + // var trace = { + // type: 'candlestick', + // low: [1], + // open: [2], + // close: [3], + // high: [4] + // }; + // Plotly.newPlot(gd, [trace]) + // .then(function() { + // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); + + // trace.low = [0]; + // return Plotly.react(gd, [trace]); + // }) + // .then(function() { + // expect(gd._fullData[0].y).toEqual([0, 2, 3, 3, 3, 4]); + + // trace.low = [-1]; + // return Plotly.react(gd, [trace]); + // }) + // .then(function() { + // expect(gd._fullData[0].y).toEqual([-1, 2, 3, 3, 3, 4]); + + // trace.low = [0]; + // return Plotly.react(gd, [trace]); + // }) + // .catch(failTest) + // .then(done); + // }); + it('can change frames without redrawing', function(done) { var data = [{y: [1, 2, 3]}]; var layout = {}; From 84c36a91091aa5524e6b2a9f0788766b622146de Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Fri, 6 Apr 2018 01:17:25 -0400 Subject: [PATCH 02/24] refactor OHLC into a first-class trace type --- src/components/legend/draw.js | 12 +- src/components/legend/style.js | 33 ++- src/components/rangeslider/draw.js | 3 +- src/plot_api/helpers.js | 2 +- src/plots/cartesian/constants.js | 1 + src/plots/cartesian/index.js | 39 +-- src/traces/bar/plot.js | 8 +- src/traces/box/plot.js | 5 +- src/traces/box/style.js | 2 +- src/traces/candlestick/calc.js | 59 ++--- src/traces/candlestick/defaults.js | 3 - src/traces/candlestick/index.js | 4 +- src/traces/ohlc/attributes.js | 21 -- src/traces/ohlc/calc.js | 156 ++++++++++++ src/traces/ohlc/defaults.js | 8 +- src/traces/ohlc/direction_defaults.js | 24 -- src/traces/ohlc/helpers.js | 148 ------------ src/traces/{candlestick => ohlc}/hover.js | 29 ++- src/traces/ohlc/index.js | 12 +- src/traces/ohlc/ohlc_defaults.js | 12 +- src/traces/ohlc/plot.js | 66 +++++ src/traces/{candlestick => ohlc}/select.js | 8 +- src/traces/ohlc/style.js | 35 +++ src/traces/ohlc/transform.js | 268 --------------------- src/traces/scatter/plot.js | 9 +- src/traces/violin/plot.js | 3 +- 26 files changed, 382 insertions(+), 588 deletions(-) create mode 100644 src/traces/ohlc/calc.js delete mode 100644 src/traces/ohlc/direction_defaults.js delete mode 100644 src/traces/ohlc/helpers.js rename src/traces/{candlestick => ohlc}/hover.js (74%) create mode 100644 src/traces/ohlc/plot.js rename src/traces/{candlestick => ohlc}/select.js (87%) create mode 100644 src/traces/ohlc/style.js delete mode 100644 src/traces/ohlc/transform.js diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 954086490b9..fbedb04763f 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -384,20 +384,10 @@ function drawTexts(g, gd) { if(!this.text()) text = ' \u0020\u0020 '; - var transforms, direction; var fullInput = legendItem.trace._fullInput || {}; var update = {}; - // N.B. this block isn't super clean, - // is unfortunately untested at the moment, - // and only works for for 'ohlc', - // but should be generalized for other one-to-many transforms - if(fullInput.type === 'ohlc') { - transforms = legendItem.trace.transforms; - direction = transforms[transforms.length - 1].direction; - - update[direction + '.name'] = text; - } else if(Registry.hasTransform(fullInput, 'groupby')) { + if(Registry.hasTransform(fullInput, 'groupby')) { var groupbyIndices = Registry.getTransformIndices(fullInput, 'groupby'); var index = groupbyIndices[groupbyIndices.length - 1]; diff --git a/src/components/legend/style.js b/src/components/legend/style.js index 1eab5571214..fd022a9eb41 100644 --- a/src/components/legend/style.js +++ b/src/components/legend/style.js @@ -53,7 +53,8 @@ module.exports = function style(s, gd) { .each(stylePies) .each(styleLines) .each(stylePoints) - .each(styleCandles); + .each(styleCandles) + .each(styleOHLC); function styleLines(d) { var trace = d[0].trace; @@ -217,9 +218,8 @@ module.exports = function style(s, gd) { var trace = d[0].trace, pts = d3.select(this).select('g.legendpoints') .selectAll('path.legendcandle') - .data(Registry.traceIs(trace, 'candlestick') && trace.visible ? [d, d] : []); + .data(trace.type === 'candlestick' && trace.visible ? [d, d] : []); pts.enter().append('path').classed('legendcandle', true) - // if we want the median bar, prepend M6,0H-6 .attr('d', function(_, i) { if(i) return 'M-15,0H-8M-8,6V-6H8Z'; // increasing return 'M15,0H8M8,-6V6H-8Z'; // decreasing @@ -241,6 +241,33 @@ module.exports = function style(s, gd) { }); } + function styleOHLC(d) { + var trace = d[0].trace, + pts = d3.select(this).select('g.legendpoints') + .selectAll('path.legendohlc') + .data(trace.type === 'ohlc' && trace.visible ? [d, d] : []); + pts.enter().append('path').classed('legendohlc', true) + .attr('d', function(_, i) { + if(i) return 'M-15,0H0M-8,-6V0'; // increasing + return 'M15,0H0M8,6V0'; // decreasing + }) + .attr('transform', 'translate(20,0)') + .style('stroke-miterlimit', 1); + pts.exit().remove(); + pts.each(function(_, i) { + var container = trace[i ? 'increasing' : 'decreasing']; + var w = container.line.width, + p = d3.select(this); + + p.style('fill', 'none') + .call(Drawing.dashLine, container.line.dash, w); + + if(w) { + Color.stroke(p, container.line.color); + } + }); + } + function stylePies(d) { var trace = d[0].trace, pts = d3.select(this).select('g.legendpoints') diff --git a/src/components/rangeslider/draw.js b/src/components/rangeslider/draw.js index 8aff445e6a0..ea673113a2f 100644 --- a/src/components/rangeslider/draw.js +++ b/src/components/rangeslider/draw.js @@ -455,7 +455,8 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) { id: id, plotgroup: plotgroup, xaxis: xa, - yaxis: ya + yaxis: ya, + isRangePlot: true }; if(isMainPlot) mainplotinfo = plotinfo; diff --git a/src/plot_api/helpers.js b/src/plot_api/helpers.js index a5effdb94bc..bb274167f18 100644 --- a/src/plot_api/helpers.js +++ b/src/plot_api/helpers.js @@ -331,7 +331,7 @@ exports.cleanData = function(data, existingData) { } // fixes from converting finance from transforms to real trace types - if(trace.type === 'candlestick') { + if(trace.type === 'candlestick' || trace.type === 'ohlc') { var increasingName = cleanFinanceDir(trace.increasing); var decreasingName = cleanFinanceDir(trace.decreasing); diff --git a/src/plots/cartesian/constants.js b/src/plots/cartesian/constants.js index a134bd71cf5..59ac6f1b87f 100644 --- a/src/plots/cartesian/constants.js +++ b/src/plots/cartesian/constants.js @@ -68,6 +68,7 @@ module.exports = { 'carpetlayer', 'violinlayer', 'boxlayer', + 'ohlclayer', 'scatterlayer' ], diff --git a/src/plots/cartesian/index.js b/src/plots/cartesian/index.js index 2d454e4a68f..a7a742d6aa1 100644 --- a/src/plots/cartesian/index.js +++ b/src/plots/cartesian/index.js @@ -203,7 +203,7 @@ function plotOne(gd, plotinfo, cdSubplot, transitionOpts, makeOnCompleteCallback // remaining plot traces should also be able to do this. Once implemented, // we won't need this - which should sometimes be a big speedup. if(plotinfo.plot) { - plotinfo.plot.selectAll('g:not(.scatterlayer)').selectAll('g.trace').remove(); + plotinfo.plot.selectAll('g:not(.scatterlayer):not(.ohlclayer)').selectAll('g.trace').remove(); } // plot all traces for each module at once @@ -224,43 +224,50 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) var oldModules = oldFullLayout._modules || [], newModules = newFullLayout._modules || []; - var hadScatter, hasScatter, hadGl, hasGl, i, oldPlots, ids, subplotInfo, moduleName; + var hadScatter, hasScatter, hadOHLC, hasOHLC, hadGl, hasGl, i, oldPlots, ids, subplotInfo, moduleName; for(i = 0; i < oldModules.length; i++) { moduleName = oldModules[i].name; if(moduleName === 'scatter') hadScatter = true; else if(moduleName === 'scattergl') hadGl = true; + else if(moduleName === 'ohlc') hadOHLC = true; } for(i = 0; i < newModules.length; i++) { moduleName = newModules[i].name; if(moduleName === 'scatter') hasScatter = true; else if(moduleName === 'scattergl') hasGl = true; + else if(moduleName === 'ohlc') hasOHLC = true; } - if(hadScatter && !hasScatter) { - oldPlots = oldFullLayout._plots; + oldPlots = oldFullLayout._plots; + var layersToEmpty = []; + if(hadScatter && !hasScatter) layersToEmpty.push('g.scatterlayer'); + if(hadOHLC && !hasOHLC) layersToEmpty.push('g.ohlclayer'); + + if(layersToEmpty.length) { ids = Object.keys(oldPlots || {}); - for(i = 0; i < ids.length; i++) { - subplotInfo = oldPlots[ids[i]]; + for(var layeri = 0; layeri < layersToEmpty.length; layeri++) { + for(i = 0; i < ids.length; i++) { + subplotInfo = oldPlots[ids[i]]; - if(subplotInfo.plot) { - subplotInfo.plot.select('g.scatterlayer') - .selectAll('g.trace') - .remove(); + if(subplotInfo.plot) { + subplotInfo.plot.select(layersToEmpty[layeri]) + .selectAll('g.trace') + .remove(); + } } - } - oldFullLayout._infolayer.selectAll('g.rangeslider-container') - .select('g.scatterlayer') - .selectAll('g.trace') - .remove(); + oldFullLayout._infolayer.selectAll('g.rangeslider-container') + .select(layersToEmpty[layeri]) + .selectAll('g.trace') + .remove(); + } } if(hadGl && !hasGl) { - oldPlots = oldFullLayout._plots; ids = Object.keys(oldPlots || {}); for(i = 0; i < ids.length; i++) { diff --git a/src/traces/bar/plot.js b/src/traces/bar/plot.js index 30914fecb14..28f81a985d3 100644 --- a/src/traces/bar/plot.js +++ b/src/traces/bar/plot.js @@ -42,9 +42,11 @@ module.exports = function plot(gd, plotinfo, cdbar) { bartraces.enter().append('g') .attr('class', 'trace bars'); - bartraces.each(function(d) { - d[0].node3 = d3.select(this); - }); + if(!plotinfo.isRangePlot) { + bartraces.each(function(d) { + d[0].node3 = d3.select(this); + }); + } bartraces.append('g') .attr('class', 'points') diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index 46b531107db..a6690e031f5 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -32,7 +32,8 @@ function plot(gd, plotinfo, cdbox) { var cd0 = d[0]; var t = cd0.t; var trace = cd0.trace; - var sel = cd0.node3 = d3.select(this); + var sel = d3.select(this); + if(!plotinfo.isRangePlot) cd0.node3 = sel; var numBoxes = fullLayout._numBoxes; var groupFraction = (1 - fullLayout.boxgap); @@ -46,7 +47,7 @@ function plot(gd, plotinfo, cdbox) { var wdPos = bdPos * trace.whiskerwidth; if(trace.visible !== true || t.empty) { - d3.select(this).remove(); + sel.remove(); return; } diff --git a/src/traces/box/style.js b/src/traces/box/style.js index afcb8232b8d..aef404372b7 100644 --- a/src/traces/box/style.js +++ b/src/traces/box/style.js @@ -33,7 +33,7 @@ module.exports = function style(gd, cd) { if(trace.type === 'candlestick') { allBoxes.each(function(boxData) { var thisBox = d3.select(this); - var container = trace[boxData.candle]; // candle = 'increasing' or 'decreasing' + var container = trace[boxData.dir]; // dir = 'increasing' or 'decreasing' styleBox(thisBox, container.line.width, container.line.color, container.fillcolor); // TODO: custom selection style for candlesticks thisBox.style('opacity', trace.selectedpoints && !boxData.selected ? 0.3 : 1); diff --git a/src/traces/candlestick/calc.js b/src/traces/candlestick/calc.js index 515fd75a9f6..72933f236a3 100644 --- a/src/traces/candlestick/calc.js +++ b/src/traces/candlestick/calc.js @@ -9,65 +9,26 @@ 'use strict'; var Lib = require('../../lib'); -var _ = Lib._; var Axes = require('../../plots/cartesian/axes'); +var calcCommon = require('../ohlc/calc').calcCommon; + module.exports = function(gd, trace) { var fullLayout = gd._fullLayout; var xa = Axes.getFromId(gd, trace.xaxis); var ya = Axes.getFromId(gd, trace.yaxis); - var cd = []; var x = xa.makeCalcdata(trace, 'x'); - var o = ya.makeCalcdata(trace, 'open'); - var h = ya.makeCalcdata(trace, 'high'); - var l = ya.makeCalcdata(trace, 'low'); - var c = ya.makeCalcdata(trace, 'close'); - - var hasTextArray = Array.isArray(trace.text); - - for(var i = 0; i < x.length; i++) { - var xi = x[i]; - var oi = o[i]; - var hi = h[i]; - var li = l[i]; - var ci = c[i]; - - if(xi !== undefined && oi !== undefined && hi !== undefined && li !== undefined && ci !== undefined) { - var increasing = ci >= oi; - - var pt = { - pos: xi, - min: li, - q1: increasing ? oi : ci, - med: ci, - q3: increasing ? ci : oi, - max: hi, - i: i, - candle: increasing ? 'increasing' : 'decreasing' - }; - if(hasTextArray) pt.tx = trace.text[i]; - - cd.push(pt); - } - } - - Axes.expand(ya, l.concat(h), {padded: true}); + var cd = calcCommon(gd, trace, x, ya, ptFunc); if(cd.length) { - cd[0].t = { + Lib.extendFlat(cd[0].t, { num: fullLayout._numBoxes, dPos: Lib.distinctVals(x).minDiff / 2, posLetter: 'x', valLetter: 'y', - labels: { - open: _(gd, 'open:') + ' ', - high: _(gd, 'high:') + ' ', - low: _(gd, 'low:') + ' ', - close: _(gd, 'close:') + ' ' - } - }; + }); fullLayout._numBoxes++; return cd; @@ -75,3 +36,13 @@ module.exports = function(gd, trace) { return [{t: {empty: true}}]; } }; + +function ptFunc(o, h, l, c) { + return { + min: l, + q1: Math.min(o, c), + med: c, + q3: Math.max(o, c), + max: h, + }; +} diff --git a/src/traces/candlestick/defaults.js b/src/traces/candlestick/defaults.js index ad43f01516f..e00862ca43a 100644 --- a/src/traces/candlestick/defaults.js +++ b/src/traces/candlestick/defaults.js @@ -25,9 +25,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout return; } - // TODO: get rid of _inputLength and do this in ohlc_defaults once that's not a transform either - traceOut._length = len; - coerce('line.width'); handleDirection(traceIn, traceOut, coerce, 'increasing'); diff --git a/src/traces/candlestick/index.js b/src/traces/candlestick/index.js index d22d8d8def7..ada32475d8a 100644 --- a/src/traces/candlestick/index.js +++ b/src/traces/candlestick/index.js @@ -37,6 +37,6 @@ module.exports = { calc: require('./calc'), plot: require('../box/plot').plot, style: require('../box/style'), - hoverPoints: require('./hover'), - selectPoints: require('./select') + hoverPoints: require('../ohlc/hover'), + selectPoints: require('../ohlc/select') }; diff --git a/src/traces/ohlc/attributes.js b/src/traces/ohlc/attributes.js index 6cb5b7a77e5..e37213cbdc0 100644 --- a/src/traces/ohlc/attributes.js +++ b/src/traces/ohlc/attributes.js @@ -20,27 +20,6 @@ var lineAttrs = scatterAttrs.line; function directionAttrs(lineColorDefault) { return { - name: { - valType: 'string', - role: 'info', - editType: 'style', - description: [ - 'Sets the segment name.', - 'The segment name appear as the legend item and on hover.' - ].join(' ') - }, - - showlegend: { - valType: 'boolean', - role: 'info', - dflt: true, - editType: 'style', - description: [ - 'Determines whether or not an item corresponding to this', - 'segment is shown in the legend.' - ].join(' ') - }, - line: { color: extendFlat({}, lineAttrs.color, {dflt: lineColorDefault}), width: lineAttrs.width, diff --git a/src/traces/ohlc/calc.js b/src/traces/ohlc/calc.js new file mode 100644 index 00000000000..0a63f1dec57 --- /dev/null +++ b/src/traces/ohlc/calc.js @@ -0,0 +1,156 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Lib = require('../../lib'); +var _ = Lib._; +var Axes = require('../../plots/cartesian/axes'); + +function calc(gd, trace) { + var xa = Axes.getFromId(gd, trace.xaxis); + var ya = Axes.getFromId(gd, trace.yaxis); + + var tickLen = convertTickWidth(gd, xa, trace); + var minDiff = trace._minDiff; + delete trace._minDiff; + var x = trace._xcalc; + delete trace._xcalc; + + var cd = calcCommon(gd, trace, x, ya, ptFunc); + + Axes.expand(xa, x, {vpad: minDiff / 2}); + + if(cd.length) { + Lib.extendFlat(cd[0].t, { + wHover: minDiff / 2, + tickLen: tickLen + }); + return cd; + } else { + return [{t: {empty: true}}]; + } +} + +function ptFunc(o, h, l, c) { + return { + o: o, + h: h, + l: l, + c: c + }; +} + + +// shared between OHLC and candlestick +// ptFunc makes a calcdata point specific to each trace type, from oi, hi, li, ci +function calcCommon(gd, trace, x, ya, ptFunc) { + var o = ya.makeCalcdata(trace, 'open'); + var h = ya.makeCalcdata(trace, 'high'); + var l = ya.makeCalcdata(trace, 'low'); + var c = ya.makeCalcdata(trace, 'close'); + + var hasTextArray = Array.isArray(trace.text); + + // we're optimists - before we have any changing data, assume increasing + var increasing = true; + + var cd = []; + for(var i = 0; i < x.length; i++) { + var xi = x[i]; + var oi = o[i]; + var hi = h[i]; + var li = l[i]; + var ci = c[i]; + + if(xi !== undefined && oi !== undefined && hi !== undefined && li !== undefined && ci !== undefined) { + // increasing carries over from previous if ci===oi + increasing = (ci === oi) ? increasing : ci > oi; + + var pt = ptFunc(oi, hi, li, ci); + + pt.pos = xi; + pt.yc = (oi + ci) / 2; + pt.i = i; + pt.dir = increasing ? 'increasing' : 'decreasing'; + + if(hasTextArray) pt.tx = trace.text[i]; + + cd.push(pt); + } + } + + Axes.expand(ya, l.concat(h), {padded: true}); + + if(cd.length) { + cd[0].t = { + labels: { + open: _(gd, 'open:') + ' ', + high: _(gd, 'high:') + ' ', + low: _(gd, 'low:') + ' ', + close: _(gd, 'close:') + ' ' + } + }; + } + + return cd; +} + +/* + * find min x-coordinates difference of all traces + * attached to this x-axis and stash the result in _minDiff + * in all traces; when a trace uses this in its + * calc step it deletes _minDiff, so that next calc this is + * done again in case the data changed. + * also since we need it here, stash _xcalc on the trace + */ +function convertTickWidth(gd, xa, trace) { + var minDiff = trace._minDiff; + + if(!minDiff) { + var fullData = gd._fullData, + ohlcTracesOnThisXaxis = []; + + minDiff = Infinity; + + var i; + + for(i = 0; i < fullData.length; i++) { + var tracei = fullData[i]; + + if(tracei.type === 'ohlc' && + tracei.visible === true && + tracei.xaxis === xa._id + ) { + ohlcTracesOnThisXaxis.push(tracei); + + var xcalc = xa.makeCalcdata(tracei, 'x'); + tracei._xcalc = xcalc; + + var _minDiff = Lib.distinctVals(xcalc).minDiff; + if(_minDiff && isFinite(_minDiff)) { + minDiff = Math.min(minDiff, _minDiff); + } + } + } + + // if minDiff is still Infinity here, set it to 1 + if(minDiff === Infinity) minDiff = 1; + + for(i = 0; i < ohlcTracesOnThisXaxis.length; i++) { + ohlcTracesOnThisXaxis[i]._minDiff = minDiff; + } + } + + return minDiff * trace.tickwidth; +} + +module.exports = { + calc: calc, + calcCommon: calcCommon +}; diff --git a/src/traces/ohlc/defaults.js b/src/traces/ohlc/defaults.js index ee9a9948ce4..d8ddf1b03ce 100644 --- a/src/traces/ohlc/defaults.js +++ b/src/traces/ohlc/defaults.js @@ -11,13 +11,9 @@ var Lib = require('../../lib'); var handleOHLC = require('./ohlc_defaults'); -var handleDirectionDefaults = require('./direction_defaults'); var attributes = require('./attributes'); -var helpers = require('./helpers'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { - helpers.pushDummyTransformOpts(traceIn, traceOut); - function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } @@ -36,11 +32,11 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('tickwidth'); + + layout._requestRangeslider[traceOut.xaxis] = true; }; function handleDirection(traceIn, traceOut, coerce, direction) { - handleDirectionDefaults(traceIn, traceOut, coerce, direction); - coerce(direction + '.line.color'); coerce(direction + '.line.width', traceOut.line.width); coerce(direction + '.line.dash', traceOut.line.dash); diff --git a/src/traces/ohlc/direction_defaults.js b/src/traces/ohlc/direction_defaults.js deleted file mode 100644 index 4bed650bb69..00000000000 --- a/src/traces/ohlc/direction_defaults.js +++ /dev/null @@ -1,24 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - - -module.exports = function handleDirectionDefaults(traceIn, traceOut, coerce, direction) { - coerce(direction + '.showlegend'); - - // trace-wide *showlegend* overrides direction *showlegend* - if(traceIn.showlegend === false) { - traceOut[direction].showlegend = false; - } - - var nameDflt = traceOut.name + ' - ' + direction; - - coerce(direction + '.name', nameDflt); -}; diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js deleted file mode 100644 index 7fe8917f918..00000000000 --- a/src/traces/ohlc/helpers.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var isNumeric = require('fast-isnumeric'); - -var Lib = require('../../lib'); - -// This routine gets called during the trace supply-defaults step. -// -// This is a hacky way to make 'ohlc' and 'candlestick' trace types -// go through the transform machinery. -// -// Note that, we must mutate user data (here traceIn) as opposed -// to full data (here traceOut) as - at the moment - transform -// defaults (which are called after trace defaults) start -// from a clear transforms container. The mutations inflicted are -// cleared in exports.clearEphemeralTransformOpts. -exports.pushDummyTransformOpts = function(traceIn, traceOut) { - var transformOpts = { - - // give dummy transform the same type as trace - type: traceOut.type, - - // track ephemeral transforms in user data - _ephemeral: true - }; - - if(Array.isArray(traceIn.transforms)) { - traceIn.transforms.push(transformOpts); - } - else { - traceIn.transforms = [transformOpts]; - } -}; - -// This routine gets called during the transform supply-defaults step -// where it clears ephemeral transform opts in user data -// and effectively put back user date in its pre-supplyDefaults state. -exports.clearEphemeralTransformOpts = function(traceIn) { - var transformsIn = traceIn.transforms; - - if(!Array.isArray(transformsIn)) return; - - for(var i = 0; i < transformsIn.length; i++) { - if(transformsIn[i]._ephemeral) transformsIn.splice(i, 1); - } - - if(transformsIn.length === 0) delete traceIn.transforms; -}; - -// This routine gets called during the transform supply-defaults step -// where it passes 'ohlc' and 'candlestick' attributes -// (found the transform container via exports.makeTransform) -// to the traceOut container such that they can -// be compatible with filter and groupby transforms. -// -// Note that this routine only has an effect during the -// second round of transform defaults done on generated traces -exports.copyOHLC = function(container, traceOut) { - if(container.open) traceOut.open = container.open; - if(container.high) traceOut.high = container.high; - if(container.low) traceOut.low = container.low; - if(container.close) traceOut.close = container.close; -}; - -// This routine gets called during the applyTransform step. -// -// We need to track trace attributes and which direction -// ('increasing' or 'decreasing') -// the generated correspond to for the calcTransform step. -// -// To make sure that the attributes reach the calcTransform, -// store it in the transform opts object. -exports.makeTransform = function(traceIn, state, direction) { - var out = Lib.extendFlat([], traceIn.transforms); - - out[state.transformIndex] = { - type: traceIn.type, - direction: direction, - - // these are copied to traceOut during exports.copyOHLC - open: traceIn.open, - high: traceIn.high, - low: traceIn.low, - close: traceIn.close - }; - - return out; -}; - -exports.getFilterFn = function(direction) { - return new _getFilterFn(direction); -}; - -function _getFilterFn(direction) { - // we're optimists - before we have any changing data, assume increasing - var isPrevIncreasing = true; - var cPrev = null; - - function _isIncreasing(o, c) { - if(o === c) { - if(c > cPrev) { - isPrevIncreasing = true; // increasing - } else if(c < cPrev) { - isPrevIncreasing = false; // decreasing - } - // else isPrevIncreasing is not changed - } - else isPrevIncreasing = (o < c); - cPrev = c; - return isPrevIncreasing; - } - - function isIncreasing(o, c) { - return isNumeric(o) && isNumeric(c) && _isIncreasing(+o, +c); - } - - function isDecreasing(o, c) { - return isNumeric(o) && isNumeric(c) && !_isIncreasing(+o, +c); - } - - return direction === 'increasing' ? isIncreasing : isDecreasing; -} - -exports.addRangeSlider = function(data, layout) { - var hasOneVisibleTrace = false; - - for(var i = 0; i < data.length; i++) { - if(data[i].visible === true) { - hasOneVisibleTrace = true; - break; - } - } - - // TODO: shouldn't we add rangesliders to any x axes that these traces are on? - if(hasOneVisibleTrace) { - if(!layout.xaxis) layout.xaxis = {}; - if(!layout.xaxis.rangeslider) layout.xaxis.rangeslider = {}; - } -}; diff --git a/src/traces/candlestick/hover.js b/src/traces/ohlc/hover.js similarity index 74% rename from src/traces/candlestick/hover.js rename to src/traces/ohlc/hover.js index c558997665a..39d2700112e 100644 --- a/src/traces/candlestick/hover.js +++ b/src/traces/ohlc/hover.js @@ -25,15 +25,22 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var trace = cd[0].trace; var t = cd[0].t; - var boxDelta = t.bdPos; - // if two candles are overlaying, let the narrowest one win - var pseudoDistance = Math.min(1, boxDelta / Math.abs(xa.r2c(xa.range[1]) - xa.r2c(xa.range[0]))); + // potentially shift xval for grouped candlesticks + var centerShift = t.bPos || 0; + var x0 = xval - centerShift; + + // ohlc and candlestick call displayHalfWidth different things... + var displayHalfWidth = t.bdPos || t.tickLen; + var hoverHalfWidth = t.wHover; + + // if two items are overlaying, let the narrowest one win + var pseudoDistance = Math.min(1, displayHalfWidth / Math.abs(xa.r2c(xa.range[1]) - xa.r2c(xa.range[0]))); var hoverPseudoDistance = pointData.maxHoverDistance - pseudoDistance; var spikePseudoDistance = pointData.maxSpikeDistance - pseudoDistance; function dx(di) { - var pos = di.pos + t.bPos - xval; - return Fx.inbox(pos - t.wHover, pos + t.wHover, hoverPseudoDistance); + var pos = di.pos - x0; + return Fx.inbox(pos - hoverHalfWidth, pos + hoverHalfWidth, hoverPseudoDistance); } function dy(di) { @@ -53,17 +60,15 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var di = cd[cdIndex]; var i = pointData.index = di.i; - var dir = di.candle; - var highEnd = (dir === 'increasing') ? 'close' : 'open'; - var lowEnd = (dir === 'increasing') ? 'open' : 'close'; + var dir = di.dir; var container = trace[dir]; var lc = container.line.color; if(Color.opacity(lc) && container.line.width) pointData.color = lc; else pointData.color = container.fillcolor; - pointData.x0 = xa.c2p(di.pos + t.bPos - boxDelta, true); - pointData.x1 = xa.c2p(di.pos + t.bPos + boxDelta, true); + pointData.x0 = xa.c2p(di.pos + centerShift - displayHalfWidth, true); + pointData.x1 = xa.c2p(di.pos + centerShift + displayHalfWidth, true); pointData.xLabelVal = di.pos; @@ -87,10 +92,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { // halfway between open and close, not between high and low. // TODO: the spike also links to this point, whereas previously // it linked to close. Is one better? - pointData.y0 = ya.c2p(trace[lowEnd][i], true); - pointData.y1 = ya.c2p(trace[highEnd][i], true); + pointData.y0 = pointData.y1 = ya.c2p(di.yc, true); // indicate increasing/decreasing in the "name" field + // TODO: only shows up if name is displayed, ie multiple traces. pointData.name += '
' + DIRSYMBOL[dir]; return [pointData]; diff --git a/src/traces/ohlc/index.js b/src/traces/ohlc/index.js index d8d2f12f650..19846413aa0 100644 --- a/src/traces/ohlc/index.js +++ b/src/traces/ohlc/index.js @@ -8,8 +8,6 @@ 'use strict'; -var Registry = require('../../registry'); - module.exports = { moduleType: 'trace', name: 'ohlc', @@ -26,14 +24,16 @@ module.exports = { 'Sample points where the close value is higher (lower) then the open', 'value are called increasing (decreasing).', - 'By default, increasing candles are drawn in green whereas', + 'By default, increasing items are drawn in green whereas', 'decreasing are drawn in red.' ].join(' ') }, attributes: require('./attributes'), supplyDefaults: require('./defaults'), + calc: require('./calc').calc, + plot: require('./plot'), + style: require('./style'), + hoverPoints: require('./hover'), + selectPoints: require('./select') }; - -Registry.register(require('../scatter')); -Registry.register(require('./transform')); diff --git a/src/traces/ohlc/ohlc_defaults.js b/src/traces/ohlc/ohlc_defaults.js index 261e92b7922..65c9fe14e0d 100644 --- a/src/traces/ohlc/ohlc_defaults.js +++ b/src/traces/ohlc/ohlc_defaults.js @@ -13,11 +13,11 @@ var Registry = require('../../registry'); module.exports = function handleOHLC(traceIn, traceOut, coerce, layout) { - var x = coerce('x'), - open = coerce('open'), - high = coerce('high'), - low = coerce('low'), - close = coerce('close'); + var x = coerce('x'); + var open = coerce('open'); + var high = coerce('high'); + var low = coerce('low'); + var close = coerce('close'); var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); handleCalendarDefaults(traceIn, traceOut, ['x'], layout); @@ -28,7 +28,7 @@ module.exports = function handleOHLC(traceIn, traceOut, coerce, layout) { if(x) len = Math.min(len, x.length); - traceOut._inputLength = len; + traceOut._length = len; return len; }; diff --git a/src/traces/ohlc/plot.js b/src/traces/ohlc/plot.js new file mode 100644 index 00000000000..6a54b48a347 --- /dev/null +++ b/src/traces/ohlc/plot.js @@ -0,0 +1,66 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var d3 = require('d3'); + +var Lib = require('../../lib'); + +module.exports = function plot(gd, plotinfo, cdOHLC) { + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + + var ohlcLayer = plotinfo.plot.select('g.ohlclayer'); + + var traces = ohlcLayer.selectAll('g.trace') + .data(cdOHLC, function(d) { return d[0].trace.uid; }); + + traces.enter().append('g') + .attr('class', 'trace ohlc'); + + traces.exit().remove(); + + traces.order(); + + traces.each(function(d) { + var cd0 = d[0]; + var t = cd0.t; + var trace = cd0.trace; + var sel = d3.select(this); + if(!plotinfo.isRangePlot) cd0.node3 = sel; + + if(trace.visible !== true || t.empty) { + sel.remove(); + return; + } + + var tickLen = t.tickLen; + + var paths = sel.selectAll('path').data(Lib.identity); + + paths.enter().append('path'); + + paths.exit().remove(); + + paths.attr('d', function(d) { + var x = xa.c2p(d.pos, true); + var xo = xa.c2p(d.pos - tickLen, true); + var xc = xa.c2p(d.pos + tickLen, true); + + var yo = ya.c2p(d.o, true); + var yh = ya.c2p(d.h, true); + var yl = ya.c2p(d.l, true); + var yc = ya.c2p(d.c, true); + + return 'M' + xo + ',' + yo + 'H' + x + + 'M' + x + ',' + yh + 'V' + yl + + 'M' + xc + ',' + yc + 'H' + x; + }); + }); +}; diff --git a/src/traces/candlestick/select.js b/src/traces/ohlc/select.js similarity index 87% rename from src/traces/candlestick/select.js rename to src/traces/ohlc/select.js index 739cee5f547..29bed35028f 100644 --- a/src/traces/candlestick/select.js +++ b/src/traces/ohlc/select.js @@ -14,7 +14,8 @@ module.exports = function selectPoints(searchInfo, polygon) { var ya = searchInfo.yaxis; var selection = []; var i; - var posOffset = cd[0].t.bPos; + // for (potentially grouped) candlesticks + var posOffset = cd[0].t.bPos || 0; if(polygon === false) { // clear selection @@ -24,13 +25,12 @@ module.exports = function selectPoints(searchInfo, polygon) { } else { for(i = 0; i < cd.length; i++) { var di = cd[i]; - var y = (di.q1 + di.q3) / 2; - if(polygon.contains([xa.c2p(di.pos + posOffset), ya.c2p(y)])) { + if(polygon.contains([xa.c2p(di.pos + posOffset), ya.c2p(di.yc)])) { selection.push({ pointNumber: di.i, x: xa.c2d(di.pos), - y: ya.c2d(y) + y: ya.c2d(di.yc) }); di.selected = 1; } else { diff --git a/src/traces/ohlc/style.js b/src/traces/ohlc/style.js new file mode 100644 index 00000000000..db85aea96bb --- /dev/null +++ b/src/traces/ohlc/style.js @@ -0,0 +1,35 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var d3 = require('d3'); +var Drawing = require('../../components/drawing'); +var Color = require('../../components/color'); + +module.exports = function style(gd, cd) { + var s = cd ? cd[0].node3 : d3.select(gd).selectAll('g.ohlclayer').selectAll('g.trace'); + + s.style('opacity', function(d) { + return d[0].trace.opacity; + }); + + s.each(function(d) { + var trace = d[0].trace; + + d3.select(this).selectAll('path').each(function(di) { + var dirLine = trace[di.dir].line; + d3.select(this) + .style('fill', 'none') + .call(Color.stroke, dirLine.color) + .call(Drawing.dashLine, dirLine.dash, dirLine.width) + // TODO: custom selection style for OHLC + .style('opacity', trace.selectedpoints && !di.selected ? 0.3 : 1); + }); + }); +}; diff --git a/src/traces/ohlc/transform.js b/src/traces/ohlc/transform.js deleted file mode 100644 index af93b1d5946..00000000000 --- a/src/traces/ohlc/transform.js +++ /dev/null @@ -1,268 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var isNumeric = require('fast-isnumeric'); - -var Lib = require('../../lib'); -var _ = Lib._; -var helpers = require('./helpers'); -var Axes = require('../../plots/cartesian/axes'); -var axisIds = require('../../plots/cartesian/axis_ids'); - -exports.moduleType = 'transform'; - -exports.name = 'ohlc'; - -exports.attributes = {}; - -exports.supplyDefaults = function(transformIn, traceOut, layout, traceIn) { - helpers.clearEphemeralTransformOpts(traceIn); - helpers.copyOHLC(transformIn, traceOut); - - return transformIn; -}; - -exports.transform = function transform(dataIn, state) { - var dataOut = []; - - for(var i = 0; i < dataIn.length; i++) { - var traceIn = dataIn[i]; - - if(traceIn.type !== 'ohlc') { - dataOut.push(traceIn); - continue; - } - - dataOut.push( - makeTrace(traceIn, state, 'increasing'), - makeTrace(traceIn, state, 'decreasing') - ); - } - - helpers.addRangeSlider(dataOut, state.layout); - - return dataOut; -}; - -function makeTrace(traceIn, state, direction) { - var len = traceIn._inputLength; - var traceOut = { - type: 'scatter', - mode: 'lines', - connectgaps: false, - - visible: traceIn.visible, - opacity: traceIn.opacity, - xaxis: traceIn.xaxis, - yaxis: traceIn.yaxis, - - hoverinfo: makeHoverInfo(traceIn), - transforms: helpers.makeTransform(traceIn, state, direction), - _inputLength: len - }; - - // the rest of below may not have been coerced - - var directionOpts = traceIn[direction]; - - if(directionOpts) { - Lib.extendFlat(traceOut, { - - // to make autotype catch date axes soon!! - x: traceIn.x || [0], - xcalendar: traceIn.xcalendar, - - // concat low and high to get correct autorange - y: traceIn.low.slice(0, len).concat(traceIn.high.slice(0, len)), - - text: traceIn.text, - - name: directionOpts.name, - showlegend: directionOpts.showlegend, - line: directionOpts.line - }); - } - - return traceOut; -} - -// Let scatter hoverPoint format 'x' coordinates, if desired. -// -// Note that, this solution isn't perfect: it shows open and close -// values at slightly different 'x' coordinates then the rest of the -// segments, but is for more robust than calling `Axes.tickText` during -// calcTransform. -// -// A future iteration should perhaps try to add a hook for transforms in -// the hoverPoints handlers. -function makeHoverInfo(traceIn) { - var hoverinfo = traceIn.hoverinfo; - - if(hoverinfo === 'all') return 'x+text+name'; - - var parts = hoverinfo.split('+'), - indexOfY = parts.indexOf('y'), - indexOfText = parts.indexOf('text'); - - if(indexOfY !== -1) { - parts.splice(indexOfY, 1); - - if(indexOfText === -1) parts.push('text'); - } - - return parts.join('+'); -} - -exports.calcTransform = function calcTransform(gd, trace, opts) { - var direction = opts.direction, - filterFn = helpers.getFilterFn(direction); - - var xa = axisIds.getFromTrace(gd, trace, 'x'), - ya = axisIds.getFromTrace(gd, trace, 'y'), - tickWidth = convertTickWidth(gd, xa, trace); - - var open = trace.open, - high = trace.high, - low = trace.low, - close = trace.close, - textIn = trace.text; - - var openName = _(gd, 'open:') + ' '; - var highName = _(gd, 'high:') + ' '; - var lowName = _(gd, 'low:') + ' '; - var closeName = _(gd, 'close:') + ' '; - - var len = trace._inputLength, - x = [], - y = [], - textOut = []; - - var appendX; - if(trace._fullInput.x) { - appendX = function(i) { - var xi = trace.x[i], - xcalendar = trace.xcalendar, - xcalc = xa.d2c(xi, 0, xcalendar); - - x.push( - xa.c2d(xcalc - tickWidth, 0, xcalendar), - xi, xi, xi, xi, - xa.c2d(xcalc + tickWidth, 0, xcalendar), - null); - }; - } - else { - appendX = function(i) { - x.push( - i - tickWidth, - i, i, i, i, - i + tickWidth, - null); - }; - } - - var appendY = function(o, h, l, c) { - y.push(o, o, h, l, c, c, null); - }; - - var format = function(ax, val) { - return Axes.tickText(ax, ax.c2l(val), 'hover').text; - }; - - var hoverinfo = trace._fullInput.hoverinfo, - hoverParts = hoverinfo.split('+'), - hasAll = hoverinfo === 'all', - hasY = hasAll || hoverParts.indexOf('y') !== -1, - hasText = hasAll || hoverParts.indexOf('text') !== -1; - - var getTextItem = Array.isArray(textIn) ? - function(i) { return textIn[i] || ''; } : - function() { return textIn; }; - - var appendText = function(i, o, h, l, c) { - var t = []; - - if(hasY) { - t.push(openName + format(ya, o)); - t.push(highName + format(ya, h)); - t.push(lowName + format(ya, l)); - t.push(closeName + format(ya, c)); - } - - if(hasText) t.push(getTextItem(i)); - - var _t = t.join('
'); - - textOut.push(_t, _t, _t, _t, _t, _t, null); - }; - - for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i]) && isNumeric(high[i]) && isNumeric(low[i])) { - appendX(i); - appendY(open[i], high[i], low[i], close[i]); - appendText(i, open[i], high[i], low[i], close[i]); - } - } - - trace.x = x; - trace.y = y; - trace.text = textOut; - trace._length = x.length; -}; - -function convertTickWidth(gd, xa, trace) { - var fullInput = trace._fullInput, - tickWidth = fullInput.tickwidth, - minDiff = fullInput._minDiff; - - if(!minDiff) { - var fullData = gd._fullData, - ohlcTracesOnThisXaxis = []; - - minDiff = Infinity; - - // find min x-coordinates difference of all traces - // attached to this x-axis and stash the result - - var i; - - for(i = 0; i < fullData.length; i++) { - var _trace = fullData[i]._fullInput; - - if(_trace.type === 'ohlc' && - _trace.visible === true && - _trace.xaxis === xa._id - ) { - ohlcTracesOnThisXaxis.push(_trace); - - // - _trace.x may be undefined here, - // it is filled later in calcTransform - // - // - handle trace of length 1 separately. - - if(_trace.x && _trace.x.length > 1) { - var xcalc = Lib.simpleMap(_trace.x, xa.d2c, 0, trace.xcalendar), - _minDiff = Lib.distinctVals(xcalc).minDiff; - minDiff = Math.min(minDiff, _minDiff); - } - } - } - - // if minDiff is still Infinity here, set it to 1 - if(minDiff === Infinity) minDiff = 1; - - for(i = 0; i < ohlcTracesOnThisXaxis.length; i++) { - ohlcTracesOnThisXaxis[i]._minDiff = minDiff; - } - } - - return minDiff * tickWidth; -} diff --git a/src/traces/scatter/plot.js b/src/traces/scatter/plot.js index db0456edf8a..c9e92ee72e0 100644 --- a/src/traces/scatter/plot.js +++ b/src/traces/scatter/plot.js @@ -21,7 +21,7 @@ var linkTraces = require('./link_traces'); var polygonTester = require('../../lib/polygon').tester; module.exports = function plot(gd, plotinfo, cdscatter, transitionOpts, makeOnCompleteCallback) { - var i, uids, selection, join, onComplete; + var i, uids, join, onComplete; var scatterlayer = plotinfo.plot.select('g.scatterlayer'); @@ -30,9 +30,8 @@ module.exports = function plot(gd, plotinfo, cdscatter, transitionOpts, makeOnCo var isFullReplot = !transitionOpts; var hasTransition = !!transitionOpts && transitionOpts.duration > 0; - selection = scatterlayer.selectAll('g.trace'); - - join = selection.data(cdscatter, function(d) { return d[0].trace.uid; }); + join = scatterlayer.selectAll('g.trace') + .data(cdscatter, function(d) { return d[0].trace.uid; }); // Append new traces: join.enter().append('g') @@ -177,7 +176,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition if(ownFillDir !== 'x' && ownFillDir !== 'y') ownFillDir = ''; // store node for tweaking by selectPoints - cdscatter[0].node3 = tr; + if(!plotinfo.isRangePlot) cdscatter[0].node3 = tr; var prevRevpath = ''; var prevPolygons = []; diff --git a/src/traces/violin/plot.js b/src/traces/violin/plot.js index 43fc6eba3f8..4b89227cad6 100644 --- a/src/traces/violin/plot.js +++ b/src/traces/violin/plot.js @@ -42,7 +42,8 @@ module.exports = function plot(gd, plotinfo, cd) { var cd0 = d[0]; var t = cd0.t; var trace = cd0.trace; - var sel = cd0.node3 = d3.select(this); + var sel = d3.select(this); + if(!plotinfo.isRangePlot) cd0.node3 = sel; var numViolins = fullLayout._numViolins; var group = (fullLayout.violinmode === 'group' && numViolins > 1); var groupFraction = 1 - fullLayout.violingap; From 38705037992b0aaefb95d1b40ca67fa4860bab67 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 10 Apr 2018 10:26:31 -0400 Subject: [PATCH 03/24] update non-finance tests for finance refactor --- test/jasmine/tests/axes_test.js | 3 ++- test/jasmine/tests/box_test.js | 2 +- test/jasmine/tests/plot_api_test.js | 5 +---- test/jasmine/tests/range_slider_test.js | 27 +++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index dd95ea474b6..22c99aac4bc 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -183,7 +183,8 @@ describe('Test axes', function() { _has: Plots._hasPlotType, _basePlotModules: [], _dfltTitle: {x: 'x', y: 'y'}, - _subplots: {cartesian: ['xy'], xaxis: ['x'], yaxis: ['y']} + _subplots: {cartesian: ['xy'], xaxis: ['x'], yaxis: ['y']}, + _requestRangeslider: {} }; fullData = []; }); diff --git a/test/jasmine/tests/box_test.js b/test/jasmine/tests/box_test.js index a50e578ad1c..d2d76b5ac58 100644 --- a/test/jasmine/tests/box_test.js +++ b/test/jasmine/tests/box_test.js @@ -172,7 +172,7 @@ describe('Test box hover:', function() { return Plotly.plot(gd, fig).then(function() { mouseEvent('mousemove', pos[0], pos[1]); - assertHoverLabelContent(specs); + assertHoverLabelContent(specs, specs.desc); }); } diff --git a/test/jasmine/tests/plot_api_test.js b/test/jasmine/tests/plot_api_test.js index 218e9fc4fbc..f3cf5d14671 100644 --- a/test/jasmine/tests/plot_api_test.js +++ b/test/jasmine/tests/plot_api_test.js @@ -2963,10 +2963,7 @@ describe('Test plot api', function() { return Plotly.react(gd, mock); }) .then(function() { - // TODO: remove this exemption once we fix finance - if(mockSpec[0] !== 'finance_style') { - expect(fullJson()).toEqual(initialJson); - } + expect(fullJson()).toEqual(initialJson); countCalls({}); }) .catch(failTest) diff --git a/test/jasmine/tests/range_slider_test.js b/test/jasmine/tests/range_slider_test.js index 1b4fc6cd83d..abbad0f08f1 100644 --- a/test/jasmine/tests/range_slider_test.js +++ b/test/jasmine/tests/range_slider_test.js @@ -1,6 +1,7 @@ var Plotly = require('@lib/index'); var Lib = require('@src/lib'); var setConvert = require('@src/plots/cartesian/set_convert'); +var name2id = require('@src/plots/cartesian/axis_ids').name2id; var RangeSlider = require('@src/components/rangeslider'); var constants = require('@src/components/rangeslider/constants'); @@ -509,7 +510,11 @@ describe('Rangeslider handleDefaults function', function() { function _supply(layoutIn, layoutOut, axName) { setConvert(layoutOut[axName]); + layoutOut[axName]._id = name2id(axName); + if(!layoutOut._requestRangeslider) layoutOut._requestRangeslider = {}; RangeSlider.handleDefaults(layoutIn, layoutOut, axName); + // we don't care about this after it's done its job + delete layoutOut._requestRangeslider; } it('should not coerce anything if rangeslider isn\'t set', function() { @@ -519,6 +524,7 @@ describe('Rangeslider handleDefaults function', function() { _supply(layoutIn, layoutOut, 'xaxis'); expect(layoutIn).toEqual(expected); + expect(layoutOut.xaxis.rangeslider).toBeUndefined(); }); it('should not mutate layoutIn', function() { @@ -547,6 +553,27 @@ describe('Rangeslider handleDefaults function', function() { expect(layoutOut.xaxis.rangeslider).toEqual(expected); }); + it('should set defaults if rangeslider is requested', function() { + var layoutIn = { xaxis: {}}, + layoutOut = { xaxis: {}, _requestRangeslider: {x: true} }, + expected = { + visible: true, + autorange: true, + thickness: 0.15, + bgcolor: '#fff', + borderwidth: 0, + bordercolor: '#444', + _input: {} + }; + + _supply(layoutIn, layoutOut, 'xaxis'); + // in fact we DO mutate layoutIn - which we should probably try not to do, + // but that's a problem for another time. + // see https://github.com/plotly/plotly.js/issues/1473 + expect(layoutIn).toEqual({xaxis: {rangeslider: {}}}); + expect(layoutOut.xaxis.rangeslider).toEqual(expected); + }); + it('should set defaults if rangeslider.visible is true', function() { var layoutIn = { xaxis: { rangeslider: { visible: true }} }, layoutOut = { xaxis: { rangeslider: {}} }, From 4c46a73d0851ebbf262d462485670e51f46de114 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Fri, 13 Apr 2018 13:13:49 -0400 Subject: [PATCH 04/24] fix finance tests - with a couple of bugfixes too --- src/lib/coerce.js | 4 +- src/traces/ohlc/calc.js | 11 +- src/traces/ohlc/hover.js | 6 +- test/jasmine/tests/finance_test.js | 651 ++++++++++++----------------- 4 files changed, 279 insertions(+), 393 deletions(-) diff --git a/src/lib/coerce.js b/src/lib/coerce.js index 4b9411d7b25..10ba0129456 100644 --- a/src/lib/coerce.js +++ b/src/lib/coerce.js @@ -433,9 +433,7 @@ exports.coerceFont = function(coerce, attr, dfltObj) { */ exports.coerceHoverinfo = function(traceIn, traceOut, layoutOut) { var moduleAttrs = traceOut._module.attributes; - var attrs = moduleAttrs.hoverinfo ? - {hoverinfo: moduleAttrs.hoverinfo} : - baseTraceAttrs; + var attrs = moduleAttrs.hoverinfo ? moduleAttrs : baseTraceAttrs; var valObj = attrs.hoverinfo; var dflt; diff --git a/src/traces/ohlc/calc.js b/src/traces/ohlc/calc.js index 0a63f1dec57..600adea48f1 100644 --- a/src/traces/ohlc/calc.js +++ b/src/traces/ohlc/calc.js @@ -59,6 +59,7 @@ function calcCommon(gd, trace, x, ya, ptFunc) { // we're optimists - before we have any changing data, assume increasing var increasing = true; + var cPrev = null; var cd = []; for(var i = 0; i < x.length; i++) { @@ -69,8 +70,14 @@ function calcCommon(gd, trace, x, ya, ptFunc) { var ci = c[i]; if(xi !== undefined && oi !== undefined && hi !== undefined && li !== undefined && ci !== undefined) { - // increasing carries over from previous if ci===oi - increasing = (ci === oi) ? increasing : ci > oi; + if(ci === oi) { + // if open == close, look for a change from the previous close + if(cPrev !== null && ci !== cPrev) increasing = ci > cPrev; + // else (c === cPrev or cPrev is null) no change + } + else increasing = ci > oi; + + cPrev = ci; var pt = ptFunc(oi, hi, li, ci); diff --git a/src/traces/ohlc/hover.js b/src/traces/ohlc/hover.js index 39d2700112e..b7e546c168a 100644 --- a/src/traces/ohlc/hover.js +++ b/src/traces/ohlc/hover.js @@ -25,6 +25,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var trace = cd[0].trace; var t = cd[0].t; + var type = trace.type; + var minAttr = type === 'ohlc' ? 'l' : 'min'; + var maxAttr = type === 'ohlc' ? 'h' : 'max'; + // potentially shift xval for grouped candlesticks var centerShift = t.bPos || 0; var x0 = xval - centerShift; @@ -44,7 +48,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } function dy(di) { - return Fx.inbox(di.min - yval, di.max - yval, hoverPseudoDistance); + return Fx.inbox(di[minAttr] - yval, di[maxAttr] - yval, hoverPseudoDistance); } function dxy(di) { return (dx(di) + dy(di)) / 2; } diff --git a/test/jasmine/tests/finance_test.js b/test/jasmine/tests/finance_test.js index 770fe352dba..2b33641ea7d 100644 --- a/test/jasmine/tests/finance_test.js +++ b/test/jasmine/tests/finance_test.js @@ -6,6 +6,7 @@ var d3 = require('d3'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var supplyAllDefaults = require('../assets/supply_defaults'); +var failTest = require('../assets/fail_test'); var mock0 = { open: [33.01, 33.31, 33.50, 32.06, 34.12, 33.05, 33.31, 33.50], @@ -47,13 +48,8 @@ describe('finance charts defaults:', function() { var out = _supply([trace0, trace1]); expect(out.data.length).toEqual(2); - expect(out._fullData.length).toEqual(4); - - var directions = out._fullData.map(function(fullTrace) { - return fullTrace.transforms[0].direction; - }); - - expect(directions).toEqual(['increasing', 'decreasing', 'increasing', 'decreasing']); + // not sure this test is really necessary anymore, since these are real traces... + expect(out._fullData.length).toEqual(2); }); it('should not mutate user data', function() { @@ -98,7 +94,7 @@ describe('finance charts defaults:', function() { var out = _supply([trace0, trace1]); expect(out.data.length).toEqual(2); - expect(out._fullData.length).toEqual(4); + expect(out._fullData.length).toEqual(2); var transformTypesIn = out.data.map(function(trace) { return trace.transforms.map(function(opts) { @@ -114,21 +110,20 @@ describe('finance charts defaults:', function() { }); }); - // dummy 'ohlc' and 'candlestick' transforms are pushed at the end - // of the 'transforms' array container - - expect(transformTypesOut).toEqual([ - ['filter', 'ohlc'], ['filter', 'ohlc'], - ['filter', 'candlestick'], ['filter', 'candlestick'] - ]); + expect(transformTypesOut).toEqual([ ['filter'], ['filter'] ]); }); - it('should slice data array according to minimum supplied length', function() { + it('should not slice data arrays but record minimum supplied length', function() { - function assertDataLength(fullTrace, len) { + function assertDataLength(trace, fullTrace, len) { expect(fullTrace.visible).toBe(true); - expect(fullTrace._inputLength).toBe(len); + expect(fullTrace._length).toBe(len); + + expect(fullTrace.open).toBe(trace.open); + expect(fullTrace.close).toBe(trace.close); + expect(fullTrace.high).toBe(trace.high); + expect(fullTrace.low).toBe(trace.low); } var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc' }); @@ -139,15 +134,11 @@ describe('finance charts defaults:', function() { var out = _supply([trace0, trace1]); - assertDataLength(out._fullData[0], 5); - assertDataLength(out._fullData[1], 5); - assertDataLength(out._fullData[2], 4); - assertDataLength(out._fullData[3], 4); + assertDataLength(trace0, out._fullData[0], 5); + assertDataLength(trace1, out._fullData[1], 4); expect(out._fullData[0]._fullInput.x).toBeUndefined(); - expect(out._fullData[1]._fullInput.x).toBeUndefined(); - expect(out._fullData[2]._fullInput.x).toBeDefined(); - expect(out._fullData[3]._fullInput.x).toBeDefined(); + expect(out._fullData[1]._fullInput.x).toBeDefined(); }); it('should set visible to *false* when minimum supplied length is 0', function() { @@ -160,13 +151,13 @@ describe('finance charts defaults:', function() { var out = _supply([trace0, trace1]); expect(out.data.length).toEqual(2); - expect(out._fullData.length).toEqual(4); + expect(out._fullData.length).toEqual(2); var visibilities = out._fullData.map(function(fullTrace) { return fullTrace.visible; }); - expect(visibilities).toEqual([false, false, false, false]); + expect(visibilities).toEqual([false, false]); }); it('direction *showlegend* should be inherited from trace-wide *showlegend*', function() { @@ -188,10 +179,10 @@ describe('finance charts defaults:', function() { return fullTrace.showlegend; }); - expect(visibilities).toEqual([false, false, false, false]); + expect(visibilities).toEqual([false, false]); }); - it('direction *name* should be inherited from trace-wide *name*', function() { + it('direction *name* should be ignored if there\'s a trace-wide *name*', function() { var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc', name: 'Company A' @@ -211,10 +202,8 @@ describe('finance charts defaults:', function() { }); expect(names).toEqual([ - 'Company A - increasing', - 'Company A - decreasing', - 'B - UP', - 'B - DOWN' + 'Company A', + 'Company B' ]); }); @@ -238,11 +227,9 @@ describe('finance charts defaults:', function() { }); expect(names).toEqual([ - 'trace 0 - increasing', - 'trace 0 - decreasing', + 'trace 0', 'trace 1', - 'trace 2 - increasing', - 'trace 2 - decreasing', + 'trace 2', 'trace 3' ]); }); @@ -267,22 +254,14 @@ describe('finance charts defaults:', function() { var out = _supply([trace0, trace1]); - var fullData = out._fullData; - var fullInput = fullData.map(function(fullTrace) { return fullTrace._fullInput; }); - - assertLine(fullInput[0].increasing, 1, 'dash'); - assertLine(fullInput[0].decreasing, 1, 'dot'); - assertLine(fullInput[2].increasing, 0); - assertLine(fullInput[2].decreasing, 3); - - assertLine(fullData[0], 1, 'dash'); - assertLine(fullData[1], 1, 'dot'); - assertLine(fullData[2], 0); - assertLine(fullData[3], 3); + assertLine(fullData[0].increasing, 1, 'dash'); + assertLine(fullData[0].decreasing, 1, 'dot'); + assertLine(fullData[1].increasing, 0); + assertLine(fullData[1].decreasing, 3); }); - it('trace-wide *visible* should be passed to generated traces', function() { + it('trace-wide *visible* should work', function() { var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc', visible: 'legendonly' @@ -301,7 +280,7 @@ describe('finance charts defaults:', function() { // only three items here as visible: false traces are not transformed - expect(visibilities).toEqual(['legendonly', 'legendonly', false]); + expect(visibilities).toEqual(['legendonly', false]); }); it('should add a few layout settings by default', function() { @@ -362,7 +341,7 @@ describe('finance charts defaults:', function() { out._fullData.forEach(function(fullTrace, i) { - expect(fullTrace.xcalendar).toBe(i < 2 ? 'hebrew' : 'julian'); + expect(fullTrace.xcalendar).toBe(i < 1 ? 'hebrew' : 'julian'); }); }); @@ -374,14 +353,14 @@ describe('finance charts defaults:', function() { }); }); -describe('finance charts calc transforms:', function() { +describe('finance charts calc', function() { 'use strict'; function calcDatatoTrace(calcTrace) { return calcTrace[0].trace; } - function _calcRaw(data, layout) { + function _calcGd(data, layout) { var gd = { data: data, layout: layout || {} @@ -389,7 +368,19 @@ describe('finance charts calc transforms:', function() { supplyAllDefaults(gd); Plots.doCalcdata(gd); - return gd.calcdata; + gd.calcdata.forEach(function(cd) { + // fill in some stuff that happens during setPositions or plot + if(cd[0].trace.type === 'candlestick') { + var diff = cd[1].pos - cd[0].pos; + cd[0].t.wHover = diff / 2; + cd[0].t.bdPos = diff / 4; + } + }); + return gd; + } + + function _calcRaw(data, layout) { + return _calcGd(data, layout).calcdata; } function _calc(data, layout) { @@ -408,6 +399,10 @@ describe('finance charts calc transforms:', function() { trace.close.push(1, 1, 1, 'close'); } + function mapGet(array, attr) { + return array.map(function(di) { return di[attr]; }); + } + it('should fill when *x* is not present', function() { var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc', @@ -419,84 +414,79 @@ describe('finance charts calc transforms:', function() { }); addJunk(trace1); - var out = _calc([trace0, trace1]); + var out = _calcRaw([trace0, trace1]); + var indices = [0, 1, 2, 3, 4, 5, 6, 7]; + var i = 'increasing'; + var d = 'decreasing'; + var directions = [i, d, d, i, d, i, d, i]; - expect(out[0].x).toEqual([ - -0.3, 0, 0, 0, 0, 0.3, null, - 2.7, 3, 3, 3, 3, 3.3, null, - 4.7, 5, 5, 5, 5, 5.3, null, - 6.7, 7, 7, 7, 7, 7.3, null - ]); - expect(out[1].x).toEqual([ - 0.7, 1, 1, 1, 1, 1.3, null, - 1.7, 2, 2, 2, 2, 2.3, null, - 3.7, 4, 4, 4, 4, 4.3, null, - 5.7, 6, 6, 6, 6, 6.3, null - ]); - expect(out[2].x).toEqual([ - 0, 0, 0, 0, 0, 0, - 3, 3, 3, 3, 3, 3, - 5, 5, 5, 5, 5, 5, - 7, 7, 7, 7, 7, 7 - ]); - expect(out[3].x).toEqual([ - 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, - 6, 6, 6, 6, 6, 6 - ]); + expect(mapGet(out[0], 'pos')).toEqual(indices); + expect(mapGet(out[0], 'dir')).toEqual(directions); + expect(mapGet(out[1], 'pos')).toEqual(indices); + expect(mapGet(out[1], 'dir')).toEqual(directions); }); - it('should fill *text* for OHLC hover labels', function() { - var trace0 = Lib.extendDeep({}, mock0, { - type: 'ohlc', - text: ['A', 'B', 'C', 'D'] - }); - - var trace1 = Lib.extendDeep({}, mock1, { - type: 'ohlc', - text: 'IMPORTANT', - hoverinfo: 'x+text', - xaxis: 'x2' - }); + ['ohlc', 'candlestick'].forEach(function(type) { + it('generates correct hover text for ' + type, function() { + var trace0 = Lib.extendDeep({}, mock0, { + type: type, + text: ['A', 'B', 'C', 'D'] + }); - var trace2 = Lib.extendDeep({}, mock1, { - type: 'ohlc', - hoverinfo: 'y', - xaxis: 'x2' - }); + var trace1 = Lib.extendDeep({}, mock1, { + type: type, + text: 'IMPORTANT', + hoverinfo: 'x+text', + xaxis: 'x2' + }); - var trace3 = Lib.extendDeep({}, mock0, { - type: 'ohlc', - hoverinfo: 'x', + var gd = _calcGd([trace0, trace1]); + var calcdata = gd.calcdata; + var tracesOut = calcdata.map(calcDatatoTrace); + + var _hover = tracesOut[0]._module.hoverPoints; + function hoverOn(curveNum, x, y) { + var pointData = { + cd: calcdata[curveNum], + xa: gd._fullLayout[tracesOut[curveNum].xaxis === 'x2' ? 'xaxis2' : 'xaxis'], + ya: gd._fullLayout.yaxis, + maxHoverDistance: 20, + maxSpikeDistance: 20, + distance: Infinity, + spikeDistance: Infinity, + index: false + }; + + var pts = _hover(pointData, x, y, 'closest'); + return pts[0]; + } + + expect(tracesOut[0].hoverinfo).toBe('all'); + expect(mapGet(calcdata[0], 'tx')).toEqual([ + 'A', 'B', 'C', 'D', undefined, undefined, undefined, undefined + ]); + expect(hoverOn(0, 0, 33)).toEqual(jasmine.objectContaining({ + text: 'open: 33.01
high: 34.2
low: 31.7
close: 34.1
A', + color: tracesOut[0].increasing.line.color + })); + expect(hoverOn(0, 1, 33)).toEqual(jasmine.objectContaining({ + text: 'open: 33.31
high: 34.37
low: 30.75
close: 31.93
B', + color: tracesOut[0].decreasing.line.color + })); + + expect(tracesOut[1].hoverinfo).toBe('x+text'); + expect(mapGet(calcdata[1], 'tx')).toEqual([ + undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined + ]); + expect(hoverOn(1, calcdata[1][0].pos, 33)).toEqual(jasmine.objectContaining({ + text: 'open: 33.01
high: 34.2
low: 31.7
close: 34.1
IMPORTANT', + color: tracesOut[1].increasing.line.color + })); + expect(hoverOn(1, calcdata[1][1].pos, 33)).toEqual(jasmine.objectContaining({ + text: 'open: 33.31
high: 34.37
low: 30.75
close: 31.93
IMPORTANT', + color: tracesOut[1].decreasing.line.color + })); }); - - var out = _calc([trace0, trace1, trace2, trace3]); - - expect(out[0].hoverinfo).toEqual('x+text+name'); - expect(out[0].text[0]) - .toEqual('open: 33.01
high: 34.2
low: 31.7
close: 34.1
A'); - expect(out[0].hoverinfo).toEqual('x+text+name'); - expect(out[1].text[0]) - .toEqual('open: 33.31
high: 34.37
low: 30.75
close: 31.93
B'); - - expect(out[2].hoverinfo).toEqual('x+text'); - expect(out[2].text[0]).toEqual('IMPORTANT'); - - expect(out[3].hoverinfo).toEqual('x+text'); - expect(out[3].text[0]).toEqual('IMPORTANT'); - - expect(out[4].hoverinfo).toEqual('text'); - expect(out[4].text[0]) - .toEqual('open: 33.01
high: 34.2
low: 31.7
close: 34.1'); - expect(out[5].hoverinfo).toEqual('text'); - expect(out[5].text[0]) - .toEqual('open: 33.31
high: 34.37
low: 30.75
close: 31.93'); - - expect(out[6].hoverinfo).toEqual('x'); - expect(out[6].text[0]).toEqual(''); - expect(out[7].hoverinfo).toEqual('x'); - expect(out[7].text[0]).toEqual(''); }); it('should work with *filter* transforms', function() { @@ -523,42 +513,21 @@ describe('finance charts calc transforms:', function() { var out = _calc([trace0, trace1]); - expect(out.length).toEqual(4); + expect(out.length).toEqual(2); expect(out[0].x).toEqual([ - '2016-08-31 22:48', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01 01:12', null, - '2016-09-05 22:48', '2016-09-06', '2016-09-06', '2016-09-06', '2016-09-06', '2016-09-06 01:12', null, - '2016-09-09 22:48', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10 01:12', null - ]); - expect(out[0].y).toEqual([ - 33.01, 33.01, 34.2, 31.7, 34.1, 34.1, null, - 33.05, 33.05, 33.25, 32.75, 33.1, 33.1, null, - 33.5, 33.5, 34.62, 32.87, 33.7, 33.7, null - ]); - expect(out[1].x).toEqual([ - '2016-09-01 22:48', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02 01:12', null, - '2016-09-02 22:48', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03 01:12', null, - '2016-09-04 22:48', '2016-09-05', '2016-09-05', '2016-09-05', '2016-09-05', '2016-09-05 01:12', null, - '2016-09-06 22:48', '2016-09-07', '2016-09-07', '2016-09-07', '2016-09-07', '2016-09-07 01:12', null + '2016-09-01', '2016-09-02', '2016-09-03', '2016-09-05', '2016-09-06', '2016-09-07', '2016-09-10' ]); - expect(out[1].y).toEqual([ - 33.31, 33.31, 34.37, 30.75, 31.93, 31.93, null, - 33.5, 33.5, 33.62, 32.87, 33.37, 33.37, null, - 34.12, 34.12, 35.18, 30.81, 31.18, 31.18, null, - 33.31, 33.31, 35.37, 32.75, 32.93, 32.93, null + expect(out[0].open).toEqual([ + 33.01, 33.31, 33.50, 34.12, 33.05, 33.31, 33.50 ]); - expect(out[2].x).toEqual([ - '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', - '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10' + expect(out[1].x).toEqual([ + '2016-09-01', '2016-09-10' ]); - expect(out[2].y).toEqual([ - 31.7, 33.01, 34.1, 34.1, 34.1, 34.2, - 32.87, 33.5, 33.7, 33.7, 33.7, 34.62 + expect(out[1].close).toEqual([ + 34.10, 33.70 ]); - - expect(out[3].x).toEqual([]); - expect(out[3].y).toEqual([]); }); it('should work with *groupby* transforms (ohlc)', function() { @@ -575,35 +544,23 @@ describe('finance charts calc transforms:', function() { var out = _calc([trace0]); - expect(out[0].name).toEqual('trace 0 - increasing'); + expect(out.length).toBe(2); + + expect(out[0].name).toBe('b'); expect(out[0].x).toEqual([ - '2016-08-31 22:48', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01 01:12', null + '2016-09-01', '2016-09-02', '2016-09-03' ]); - expect(out[0].y).toEqual([ - 33.01, 33.01, 34.2, 31.7, 34.1, 34.1, null, + expect(out[0].open).toEqual([ + 33.01, 33.31, 33.5 ]); - expect(out[1].name).toEqual('trace 0 - decreasing'); + expect(out[1].name).toBe('a'); expect(out[1].x).toEqual([ - '2016-09-01 22:48', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02 01:12', null, - '2016-09-02 22:48', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03 01:12', null - ]); - expect(out[1].y).toEqual([ - 33.31, 33.31, 34.37, 30.75, 31.93, 31.93, null, - 33.5, 33.5, 33.62, 32.87, 33.37, 33.37, null + '2016-09-04' ]); - - expect(out[2].name).toEqual('trace 0 - increasing'); - expect(out[2].x).toEqual([ - '2016-09-03 22:48', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04 01:12', null - ]); - expect(out[2].y).toEqual([ - 32.06, 32.06, 34.25, 31.62, 33.18, 33.18, null + expect(out[1].open).toEqual([ + 32.06 ]); - - expect(out[3].name).toEqual('trace 0 - decreasing'); - expect(out[3].x).toEqual([]); - expect(out[3].y).toEqual([]); }); it('should work with *groupby* transforms (candlestick)', function() { @@ -619,109 +576,64 @@ describe('finance charts calc transforms:', function() { var out = _calc([trace0]); - expect(out[0].name).toEqual('trace 0 - increasing'); + expect(out[0].name).toEqual('a'); expect(out[0].x).toEqual([ - '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', - '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04' + '2016-09-01', '2016-09-04' ]); - expect(out[0].y).toEqual([ - 31.7, 33.01, 34.1, 34.1, 34.1, 34.2, - 31.62, 32.06, 33.18, 33.18, 33.18, 34.25 + expect(out[0].open).toEqual([ + 33.01, 32.06 ]); - expect(out[1].name).toEqual('trace 0 - decreasing'); - expect(out[1].x).toEqual([]); - expect(out[1].y).toEqual([]); - - expect(out[2].name).toEqual('trace 0 - increasing'); - expect(out[2].x).toEqual([]); - expect(out[2].y).toEqual([]); - - expect(out[3].name).toEqual('trace 0 - decreasing'); - expect(out[3].x).toEqual([ - '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', - '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03' + expect(out[1].name).toEqual('b'); + expect(out[1].x).toEqual([ + '2016-09-02', '2016-09-03' ]); - expect(out[3].y).toEqual([ - 30.75, 33.31, 31.93, 31.93, 31.93, 34.37, - 32.87, 33.5, 33.37, 33.37, 33.37, 33.62 + expect(out[1].open).toEqual([ + 33.31, 33.5 ]); }); it('should use the smallest trace minimum x difference to convert *tickwidth* to data coords for all traces attached to a given x-axis', function() { var trace0 = Lib.extendDeep({}, mock1, { - type: 'ohlc', - tickwidth: 0.5 + type: 'ohlc' }); var trace1 = Lib.extendDeep({}, mock1, { type: 'ohlc', - tickwidth: 0.5 + // shift time coordinates by 10 hours + x: mock1.x.map(function(d) { return d + ' 10:00'; }) }); - // shift time coordinates by 10 hours - trace1.x = trace1.x.map(function(d) { - return d + ' 10:00'; - }); - - var out = _calc([trace0, trace1]); - - expect(out[0].x).toEqual([ - '2016-08-31 12:00', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01', '2016-09-01 12:00', null, - '2016-09-03 12:00', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04', '2016-09-04 12:00', null, - '2016-09-05 12:00', '2016-09-06', '2016-09-06', '2016-09-06', '2016-09-06', '2016-09-06 12:00', null, - '2016-09-09 12:00', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10', '2016-09-10 12:00', null - ]); - - expect(out[1].x).toEqual([ - '2016-09-01 12:00', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02', '2016-09-02 12:00', null, - '2016-09-02 12:00', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03', '2016-09-03 12:00', null, - '2016-09-04 12:00', '2016-09-05', '2016-09-05', '2016-09-05', '2016-09-05', '2016-09-05 12:00', null, - '2016-09-06 12:00', '2016-09-07', '2016-09-07', '2016-09-07', '2016-09-07', '2016-09-07 12:00', null - ]); - - expect(out[2].x).toEqual([ - '2016-08-31 22:00', '2016-09-01 10:00', '2016-09-01 10:00', '2016-09-01 10:00', '2016-09-01 10:00', '2016-09-01 22:00', null, - '2016-09-03 22:00', '2016-09-04 10:00', '2016-09-04 10:00', '2016-09-04 10:00', '2016-09-04 10:00', '2016-09-04 22:00', null, - '2016-09-05 22:00', '2016-09-06 10:00', '2016-09-06 10:00', '2016-09-06 10:00', '2016-09-06 10:00', '2016-09-06 22:00', null, - '2016-09-09 22:00', '2016-09-10 10:00', '2016-09-10 10:00', '2016-09-10 10:00', '2016-09-10 10:00', '2016-09-10 22:00', null - ]); + var out = _calcRaw([trace0, trace1]); - expect(out[3].x).toEqual([ - '2016-09-01 22:00', '2016-09-02 10:00', '2016-09-02 10:00', '2016-09-02 10:00', '2016-09-02 10:00', '2016-09-02 22:00', null, - '2016-09-02 22:00', '2016-09-03 10:00', '2016-09-03 10:00', '2016-09-03 10:00', '2016-09-03 10:00', '2016-09-03 22:00', null, - '2016-09-04 22:00', '2016-09-05 10:00', '2016-09-05 10:00', '2016-09-05 10:00', '2016-09-05 10:00', '2016-09-05 22:00', null, - '2016-09-06 22:00', '2016-09-07 10:00', '2016-09-07 10:00', '2016-09-07 10:00', '2016-09-07 10:00', '2016-09-07 22:00', null - ]); + var oneDay = 1000 * 3600 * 24; + expect(out[0][0].t.tickLen).toBeCloseTo(oneDay * 0.3, 0); + expect(out[0][0].t.wHover).toBeCloseTo(oneDay * 0.5, 0); + expect(out[1][0].t.tickLen).toBe(out[0][0].t.tickLen); + expect(out[1][0].t.wHover).toBe(out[0][0].t.wHover); }); - it('should fallback to a minimum x difference of 0.5 in one-item traces', function() { - var trace0 = Lib.extendDeep({}, mock1, { + it('should fallback to a spacing of 1 in one-item traces', function() { + var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc', - tickwidth: 0.5 + x: ['2016-01-01'] }); - trace0.x = [ '2016-01-01' ]; var trace1 = Lib.extendDeep({}, mock0, { type: 'ohlc', - tickwidth: 0.5 + x: [10], + xaxis: 'x2' }); - trace1.x = [ 10 ]; - - var out = _calc([trace0, trace1]); - - var x0 = Lib.simpleMap(out[0].x, Lib.dateTime2ms); - expect(x0[x0.length - 2] - x0[0]).toEqual(1); - var x2 = Lib.simpleMap(out[2].x, Lib.dateTime2ms); - expect(x2[x2.length - 2] - x2[0]).toEqual(1); - - expect(out[1].x).toEqual([]); - expect(out[3].x).toEqual([]); + var out = _calcRaw([trace0, trace1]); + expect(out[0][0].t.tickLen).toBeCloseTo(0.3, 5); + expect(out[0][0].t.wHover).toBeCloseTo(0.5, 5); + expect(out[1][0].t.tickLen).toBeCloseTo(0.3, 5); + expect(out[1][0].t.wHover).toBeCloseTo(0.5, 5); }); it('should handle cases where \'open\' and \'close\' entries are equal', function() { - var out = _calc([{ + var out = _calcRaw([{ type: 'ohlc', open: [0, 1, 0, 2, 1, 1, 2, 2], high: [3, 3, 3, 3, 3, 3, 3, 3], @@ -736,36 +648,30 @@ describe('finance charts calc transforms:', function() { close: [0, 1, 0, 2] }]); - expect(out[0].x).toEqual([ - 0, 0, 0, 0, 0, 0, null, - 1, 1, 1, 1, 1, 1, null, - 6, 6, 6, 6, 6, 6, null, - 7, 7, 7, 7, 7, 7, null - ]); - expect(out[1].x).toEqual([ - 2, 2, 2, 2, 2, 2, null, - 3, 3, 3, 3, 3, 3, null, - 4, 4, 4, 4, 4, 4, null, - 5, 5, 5, 5, 5, 5, null + expect(mapGet(out[0], 'dir')).toEqual([ + 'increasing', 'increasing', 'decreasing', 'decreasing', + 'decreasing', 'decreasing', 'increasing', 'increasing' ]); - expect(out[2].x).toEqual([ - 0, 0, 0, 0, 0, 0, - 3, 3, 3, 3, 3, 3 - ]); - expect(out[3].x).toEqual([ - 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2 + expect(mapGet(out[1], 'dir')).toEqual([ + 'increasing', 'decreasing', 'decreasing', 'increasing' ]); }); - it('should not include box hover labels prefix in candlestick calcdata', function() { - var trace0 = Lib.extendDeep({}, mock0, { - type: 'candlestick', - }); - var out = _calcRaw([trace0]); + it('should include finance hover labels prefix in calcdata', function() { + ['candlestick', 'ohlc'].forEach(function(type) { + var trace0 = Lib.extendDeep({}, mock0, { + type: type, + }); + var out = _calcRaw([trace0]); - expect(out[0][0].t.labels).toBeUndefined(); + expect(out[0][0].t.labels).toEqual({ + open: 'open: ', + high: 'high: ', + low: 'low: ', + close: 'close: ' + }); + }); }); }); @@ -783,8 +689,8 @@ describe('finance charts updates:', function() { destroyGraphDiv(); }); - function countScatterTraces() { - return d3.select('g.cartesianlayer').selectAll('g.trace.scatter').size(); + function countOHLCTraces() { + return d3.select('g.cartesianlayer').selectAll('g.trace.ohlc').size(); } function countBoxTraces() { @@ -801,18 +707,18 @@ describe('finance charts updates:', function() { var path0; Plotly.plot(gd, [trace0]).then(function() { - expect(gd.calcdata[0][0].x).toEqual(-0.3); - expect(gd.calcdata[0][0].y).toEqual(33.01); + expect(gd.calcdata[0][0].t.tickLen).toBeCloseTo(0.3, 5); + expect(gd.calcdata[0][0].o).toEqual(33.01); return Plotly.restyle(gd, 'tickwidth', 0.5); }) .then(function() { - expect(gd.calcdata[0][0].x).toEqual(-0.5); + expect(gd.calcdata[0][0].t.tickLen).toBeCloseTo(0.5, 5); return Plotly.restyle(gd, 'open', [[0, 30.75, 32.87, 31.62, 30.81, 32.75, 32.75, 32.87]]); }) .then(function() { - expect(gd.calcdata[0][0].y).toEqual(0); + expect(gd.calcdata[0][0].o).toEqual(0); return Plotly.restyle(gd, { type: 'candlestick', @@ -821,15 +727,15 @@ describe('finance charts updates:', function() { }) .then(function() { path0 = d3.select('path.box').attr('d'); + expect(path0).toBeDefined(); return Plotly.restyle(gd, 'whiskerwidth', 0.2); }) .then(function() { expect(d3.select('path.box').attr('d')).not.toEqual(path0); - - done(); - }); - + }) + .catch(failTest) + .then(done); }); it('should be able to toggle visibility', function(done) { @@ -839,47 +745,47 @@ describe('finance charts updates:', function() { ]; Plotly.plot(gd, data).then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); return Plotly.restyle(gd, 'visible', false); }) .then(function() { - expect(countScatterTraces()).toEqual(0); + expect(countOHLCTraces()).toEqual(0); expect(countBoxTraces()).toEqual(0); return Plotly.restyle(gd, 'visible', 'legendonly', [1]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); + expect(countOHLCTraces()).toEqual(0); expect(countBoxTraces()).toEqual(0); return Plotly.restyle(gd, 'visible', true, [1]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(1); return Plotly.restyle(gd, 'visible', true, [0]); }) .then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); return Plotly.restyle(gd, 'visible', 'legendonly', [0]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(1); return Plotly.restyle(gd, 'visible', true); }) .then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); - - done(); - }); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); + }) + .catch(failTest) + .then(done); }); it('Plotly.relayout should work', function(done) { @@ -892,9 +798,9 @@ describe('finance charts updates:', function() { }) .then(function() { expect(countRangeSliders()).toEqual(0); - - done(); - }); + }) + .catch(failTest) + .then(done); }); @@ -904,13 +810,9 @@ describe('finance charts updates:', function() { Lib.extendDeep({}, mock0, { type: 'candlestick' }), ]; - // ohlc have 7 calc pts per 'x' coords - Plotly.plot(gd, data).then(function() { - expect(gd.calcdata[0].length).toEqual(28); - expect(gd.calcdata[1].length).toEqual(28); - expect(gd.calcdata[2].length).toEqual(4); - expect(gd.calcdata[3].length).toEqual(4); + expect(gd.calcdata[0].length).toEqual(8); + expect(gd.calcdata[1].length).toEqual(8); return Plotly.extendTraces(gd, { open: [[ 34, 35 ]], @@ -920,10 +822,8 @@ describe('finance charts updates:', function() { }, [1]); }) .then(function() { - expect(gd.calcdata[0].length).toEqual(28); - expect(gd.calcdata[1].length).toEqual(28); - expect(gd.calcdata[2].length).toEqual(6); - expect(gd.calcdata[3].length).toEqual(4); + expect(gd.calcdata[0].length).toEqual(8); + expect(gd.calcdata[1].length).toEqual(10); return Plotly.extendTraces(gd, { open: [[ 34, 35 ]], @@ -933,13 +833,11 @@ describe('finance charts updates:', function() { }, [0]); }) .then(function() { - expect(gd.calcdata[0].length).toEqual(42); - expect(gd.calcdata[1].length).toEqual(28); - expect(gd.calcdata[2].length).toEqual(6); - expect(gd.calcdata[3].length).toEqual(4); - - done(); - }); + expect(gd.calcdata[0].length).toEqual(10); + expect(gd.calcdata[1].length).toEqual(10); + }) + .catch(failTest) + .then(done); }); it('Plotly.deleteTraces / addTraces should work', function(done) { @@ -949,19 +847,19 @@ describe('finance charts updates:', function() { ]; Plotly.plot(gd, data).then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); return Plotly.deleteTraces(gd, [1]); }) .then(function() { - expect(countScatterTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(1); expect(countBoxTraces()).toEqual(0); return Plotly.deleteTraces(gd, [0]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); + expect(countOHLCTraces()).toEqual(0); expect(countBoxTraces()).toEqual(0); var trace = Lib.extendDeep({}, mock0, { type: 'candlestick' }); @@ -969,68 +867,66 @@ describe('finance charts updates:', function() { return Plotly.addTraces(gd, [trace]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(1); var trace = Lib.extendDeep({}, mock0, { type: 'ohlc' }); return Plotly.addTraces(gd, [trace]); }) .then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); - - done(); - }); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); + }) + .catch(failTest) + .then(done); }); it('Plotly.addTraces + Plotly.relayout should update candlestick box position values', function(done) { - function assertBoxPosFields(dPos) { - expect(gd.calcdata.length).toEqual(dPos.length); + function assertBoxPosFields(bPos) { + expect(gd.calcdata.length).toEqual(bPos.length); gd.calcdata.forEach(function(calcTrace, i) { - if(dPos[i] === undefined) { - expect(calcTrace[0].t.dPos).toBeUndefined(); - } - else { - expect(calcTrace[0].t.dPos).toEqual(dPos[i]); - } + expect(calcTrace[0].t.bPos).toBeCloseTo(bPos[i], 0); }); } var trace0 = { type: 'candlestick', - x: ['2011-01-01'], - open: [0], - high: [3], - low: [1], - close: [3] + x: ['2011-01-01', '2011-01-02'], + open: [1, 2], + high: [3, 4], + low: [0, 1], + close: [2, 3] }; - Plotly.plot(gd, [trace0]).then(function() { - assertBoxPosFields([0.5, undefined]); + Plotly.plot(gd, [trace0], {boxmode: 'group'}) + .then(function() { + assertBoxPosFields([0]); - return Plotly.addTraces(gd, {}); + return Plotly.addTraces(gd, [Lib.extendDeep({}, trace0)]); }) .then(function() { + assertBoxPosFields([-15120000, 15120000]); + var update = { type: 'candlestick', - x: [['2011-02-02']], - open: [[0]], - high: [[3]], - low: [[1]], - close: [[3]] + x: [['2011-01-01', '2011-01-05'], ['2011-01-01', '2011-01-03']], + open: [[1, 0]], + high: [[3, 2]], + low: [[0, -1]], + close: [[2, 1]] }; return Plotly.restyle(gd, update); }) .then(function() { - assertBoxPosFields([0.5, undefined, 0.5, undefined]); - - done(); - }); + assertBoxPosFields([-30240000, 30240000]); + }) + .catch(failTest) + .then(done); }); it('Plotly.plot with data-less trace and adding with Plotly.restyle', function(done) { @@ -1041,7 +937,7 @@ describe('finance charts updates:', function() { ]; Plotly.plot(gd, data).then(function() { - expect(countScatterTraces()).toEqual(0); + expect(countOHLCTraces()).toEqual(0); expect(countBoxTraces()).toEqual(0); expect(countRangeSliders()).toEqual(0); @@ -1053,8 +949,8 @@ describe('finance charts updates:', function() { }, [0]); }) .then(function() { - expect(countScatterTraces()).toEqual(0); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(0); + expect(countBoxTraces()).toEqual(1); expect(countRangeSliders()).toEqual(1); return Plotly.restyle(gd, { @@ -1065,16 +961,18 @@ describe('finance charts updates:', function() { }, [1]); }) .then(function() { - expect(countScatterTraces()).toEqual(2); - expect(countBoxTraces()).toEqual(2); + expect(countOHLCTraces()).toEqual(1); + expect(countBoxTraces()).toEqual(1); expect(countRangeSliders()).toEqual(1); }) + .catch(failTest) .then(done); }); }); describe('finance charts *special* handlers:', function() { + // not special anymore - just test that they work as normal afterEach(destroyGraphDiv); @@ -1112,7 +1010,7 @@ describe('finance charts *special* handlers:', function() { .then(function(gd) { return new Promise(function(resolve) { gd.once('plotly_restyle', function(eventData) { - expect(eventData[0]['increasing.name']).toEqual('0'); + expect(eventData[0].name).toEqual('0'); expect(eventData[1]).toEqual([0]); delayedResolve(resolve); }); @@ -1123,36 +1021,15 @@ describe('finance charts *special* handlers:', function() { .then(function(gd) { return new Promise(function(resolve) { gd.once('plotly_restyle', function(eventData) { - expect(eventData[0]['decreasing.name']).toEqual('1'); - expect(eventData[1]).toEqual([0]); - delayedResolve(resolve); - }); - - editText(1, '1'); - }); - }) - .then(function(gd) { - return new Promise(function(resolve) { - gd.once('plotly_restyle', function(eventData) { - expect(eventData[0]['decreasing.name']).toEqual('2'); + expect(eventData[0].name).toEqual('1'); expect(eventData[1]).toEqual([1]); delayedResolve(resolve); }); - editText(3, '2'); - }); - }) - .then(function(gd) { - return new Promise(function(resolve) { - gd.once('plotly_restyle', function(eventData) { - expect(eventData[0]['increasing.name']).toEqual('3'); - expect(eventData[1]).toEqual([1]); - delayedResolve(resolve); - }); - - editText(2, '3'); + editText(1, '1'); }); }) + .catch(failTest) .then(done); }); From 94c4560eb78e66f3c51912da547cfa27d66b7f5b Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Fri, 13 Apr 2018 13:14:28 -0400 Subject: [PATCH 05/24] fix #2004 (or more precisely test that it was already fixed) --- test/jasmine/tests/finance_test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/jasmine/tests/finance_test.js b/test/jasmine/tests/finance_test.js index 2b33641ea7d..91e3207344a 100644 --- a/test/jasmine/tests/finance_test.js +++ b/test/jasmine/tests/finance_test.js @@ -613,6 +613,20 @@ describe('finance charts calc', function() { expect(out[1][0].t.wHover).toBe(out[0][0].t.wHover); }); + it('works with category x data', function() { + // see https://github.com/plotly/plotly.js/issues/2004 + // fixed automatically as part of the refactor to a non-transform trace + var trace0 = Lib.extendDeep({}, mock0, { + type: 'ohlc', + x: ['a', 'b', 'c', 'd', 'e'] + }); + + var out = _calcRaw([trace0]); + + expect(out[0][0].t.tickLen).toBeCloseTo(0.3, 5); + expect(out[0][0].t.wHover).toBeCloseTo(0.5, 5); + }); + it('should fallback to a spacing of 1 in one-item traces', function() { var trace0 = Lib.extendDeep({}, mock0, { type: 'ohlc', From 3509b99223cf17d3770b5e56f8fbed0deae863cb Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Fri, 13 Apr 2018 16:45:07 -0400 Subject: [PATCH 06/24] fix and test finance hover labels - including test for #1807 --- src/components/fx/hover.js | 14 +- src/traces/ohlc/hover.js | 23 ++-- test/jasmine/tests/hover_label_test.js | 178 ++++++++++++++++++------- 3 files changed, 150 insertions(+), 65 deletions(-) diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index c7db8a13d7f..109985e2fba 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -819,13 +819,6 @@ function createHoverText(hoverData, opts, gd) { } } - // used by other modules (initially just ternary) that - // manage their own hoverinfo independent of cleanPoint - // the rest of this will still apply, so such modules - // can still put things in (x|y|z)Label, text, and name - // and hoverinfo will still determine their visibility - if(d.extraText !== undefined) text += d.extraText; - if(d.zLabel !== undefined) { if(d.xLabel !== undefined) text += 'x: ' + d.xLabel + '
'; if(d.yLabel !== undefined) text += 'y: ' + d.yLabel + '
'; @@ -844,6 +837,13 @@ function createHoverText(hoverData, opts, gd) { text += (text ? '
' : '') + d.text; } + // used by other modules (initially just ternary) that + // manage their own hoverinfo independent of cleanPoint + // the rest of this will still apply, so such modules + // can still put things in (x|y|z)Label, text, and name + // and hoverinfo will still determine their visibility + if(d.extraText !== undefined) text += (text ? '
' : '') + d.extraText; + // if 'text' is empty at this point, // put 'name' in main label and don't show secondary label if(text === '') { diff --git a/src/traces/ohlc/hover.js b/src/traces/ohlc/hover.js index b7e546c168a..9a249237055 100644 --- a/src/traces/ohlc/hover.js +++ b/src/traces/ohlc/hover.js @@ -83,14 +83,23 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return t.labels[attr] + Axes.hoverLabelText(ya, trace[attr][i]); } - var textParts = [ + var hoverinfo = trace.hoverinfo; + var hoverParts = hoverinfo.split('+'); + var isAll = hoverinfo === 'all'; + var hasY = isAll || hoverParts.indexOf('y') !== -1; + var hasText = isAll || hoverParts.indexOf('text') !== -1; + + var textParts = hasY ? [ getLabelLine('open'), getLabelLine('high'), getLabelLine('low'), - getLabelLine('close') - ]; - fillHoverText(di, trace, textParts); - pointData.text = textParts.join('
'); + getLabelLine('close') + ' ' + DIRSYMBOL[dir] + ] : []; + if(hasText) fillHoverText(di, trace, textParts); + + // don't make .yLabelVal or .text, since we're managing hoverinfo + // put it all in .extraText + pointData.extraText = textParts.join('
'); // this puts the label at the midpoint of the box, ie // halfway between open and close, not between high and low. @@ -98,9 +107,5 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { // it linked to close. Is one better? pointData.y0 = pointData.y1 = ya.c2p(di.yc, true); - // indicate increasing/decreasing in the "name" field - // TODO: only shows up if name is displayed, ie multiple traces. - pointData.name += '
' + DIRSYMBOL[dir]; - return [pointData]; }; diff --git a/test/jasmine/tests/hover_label_test.js b/test/jasmine/tests/hover_label_test.js index 1ad54ea3b6c..87907aea7bd 100644 --- a/test/jasmine/tests/hover_label_test.js +++ b/test/jasmine/tests/hover_label_test.js @@ -12,7 +12,7 @@ var mouseEvent = require('../assets/mouse_event'); var click = require('../assets/click'); var delay = require('../assets/delay'); var doubleClick = require('../assets/double_click'); -var fail = require('../assets/fail_test'); +var failTest = require('../assets/fail_test'); var customAssertions = require('../assets/custom_assertions'); var assertHoverLabelStyle = customAssertions.assertHoverLabelStyle; @@ -512,7 +512,7 @@ describe('hover info', function() { name: 'one' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -548,7 +548,7 @@ describe('hover info', function() { name: 'one' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -587,7 +587,7 @@ describe('hover info', function() { }); }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -623,7 +623,7 @@ describe('hover info', function() { name: 'one' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -693,7 +693,7 @@ describe('hover info', function() { assertHoverLabelStyle(d3.select(this), styles[i]); }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -731,7 +731,7 @@ describe('hover info', function() { name: 'one' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -769,7 +769,7 @@ describe('hover info', function() { name: 'one' }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -791,7 +791,7 @@ describe('hover info', function() { axis: '2' }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -833,7 +833,7 @@ describe('hover info', function() { expect(pt.xaxis).toBe(gd._fullLayout.xaxis); expect(pt.yaxis).toBe(gd._fullLayout.yaxis); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -858,7 +858,7 @@ describe('hover info', function() { axis: '3.3' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -886,7 +886,7 @@ describe('hover info', function() { axis: 'soup - nuts' }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -912,7 +912,7 @@ describe('hover info', function() { nums: 'x: 3 - 5\ny: 4 - 6\nz: 3' }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -936,11 +936,114 @@ describe('hover info', function() { nums: 'x: 3.3\ny: 4.2\nz: 3' }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); + ['candlestick', 'ohlc'].forEach(function(type) { + describe(type + ' hoverinfo', function() { + var gd; + + function financeMock(traceUpdates, layoutUpdates) { + return { + data: [Lib.extendFlat({}, { + type: type, + x: ['2011-01-01', '2011-01-02', '2011-01-03'], + open: [1, 2, 3], + high: [3, 4, 5], + low: [0, 1, 2], + close: [0, 3, 2] + }, traceUpdates || {})], + layout: Lib.extendDeep({}, { + width: 400, + height: 400, + margin: {l: 50, r: 50, t: 50, b: 50} + }, layoutUpdates || {}) + }; + } + + beforeEach(function() { + gd = createGraphDiv(); + }); + + it('has the right basic and event behavior', function(done) { + var pts; + Plotly.plot(gd, financeMock({ + customdata: [11, 22, 33] + })) + .then(function() { + gd.on('plotly_hover', function(e) { pts = e.points; }); + + _hoverNatural(gd, 150, 150); + assertHoverLabelContent({ + nums: 'open: 2\nhigh: 4\nlow: 1\nclose: 3 ▲', + axis: 'Jan 2, 2011' + }); + }) + .then(function() { + expect(pts).toBeDefined(); + expect(pts.length).toBe(1); + expect(pts[0]).toEqual(jasmine.objectContaining({ + x: '2011-01-02', + open: 2, + high: 4, + low: 1, + close: 3, + customdata: 22, + curveNumber: 0, + pointNumber: 1, + data: gd.data[0], + fullData: gd._fullData[0], + xaxis: gd._fullLayout.xaxis, + yaxis: gd._fullLayout.yaxis + })); + + return Plotly.relayout(gd, {hovermode: 'closest'}); + }) + .then(function() { + _hoverNatural(gd, 150, 150); + assertHoverLabelContent({ + nums: 'Jan 2, 2011\nopen: 2\nhigh: 4\nlow: 1\nclose: 3 ▲' + }); + }) + .catch(failTest) + .then(done); + }); + + it('shows text iff text is in hoverinfo', function(done) { + Plotly.plot(gd, financeMock({text: ['A', 'B', 'C']})) + .then(function() { + _hover(gd, 150, 150); + assertHoverLabelContent({ + nums: 'open: 2\nhigh: 4\nlow: 1\nclose: 3 ▲\nB', + axis: 'Jan 2, 2011' + }); + + return Plotly.restyle(gd, {hoverinfo: 'x+text'}); + }) + .then(function() { + _hover(gd, 150, 150); + assertHoverLabelContent({ + nums: 'B', + axis: 'Jan 2, 2011' + }); + + return Plotly.restyle(gd, {hoverinfo: 'x+y'}); + }) + .then(function() { + _hover(gd, 150, 150); + assertHoverLabelContent({ + nums: 'open: 2\nhigh: 4\nlow: 1\nclose: 3 ▲', + axis: 'Jan 2, 2011' + }); + }) + .catch(failTest) + .then(done); + }); + }); + }); + describe('hoverformat', function() { var data = [{ x: [1, 2, 3], @@ -1043,7 +1146,7 @@ describe('hover info', function() { .then(function() { expect(hoverHandler).not.toHaveBeenCalled(); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1070,7 +1173,7 @@ describe('hover info', function() { .then(function() { expect(hoverHandler).toHaveBeenCalledTimes(1); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -1107,7 +1210,7 @@ describe('hover info', function() { expect(labelCount()).toBe(7); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1410,7 +1513,7 @@ describe('hover on many lines+bars', function() { expect(d3.select(gd).selectAll('g.hovertext').size()).toBe(2); expect(d3.select(gd).selectAll('g.axistext').size()).toBe(1); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -1559,7 +1662,7 @@ describe('hover on fill', function() { // gives same results w/o closing point assertLabelsCorrect([200, 200], [73.75, 250], 'trace 0'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1596,7 +1699,7 @@ describe('hover on fill', function() { // then make sure we can still select a *different* item afterward assertLabelsCorrect([237, 218], [266.75, 265], 'trace 1'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1622,7 +1725,7 @@ describe('hover on fill', function() { // hover on the cartesian trace in the corner assertLabelsCorrect([363, 122], [363, 122], 'trace 38'); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -1696,7 +1799,9 @@ describe('hover updates', function() { }).then(function() { // Assert label restored: assertLabelsCorrect(null, [103, 100], 'trace 10.5', 'animation/update 3'); - }).catch(fail).then(done); + }) + .catch(failTest) + .then(done); }); it('should not trigger infinite loop of plotly_unhover events', function(done) { @@ -1951,7 +2056,7 @@ describe('Test hover label custom styling:', function() { text: [13, 'Arial', 'rgb(255, 255, 255)'] }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -2007,36 +2112,11 @@ describe('Test hover label custom styling:', function() { text: [11, 'Gravitas', 'rgb(255, 0, 0)'] }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); -describe('ohlc hover interactions', function() { - var data = [{ - type: 'candlestick', - x: ['2011-01-01', '2012-01-01'], - open: [2, 2], - high: [3, 3], - low: [0, 0], - close: [3, 3], - }]; - - beforeEach(function() { - this.gd = createGraphDiv(); - }); - - afterEach(destroyGraphDiv); - - // See: https://github.com/plotly/plotly.js/issues/1807 - it('should not fail in appendArrayPointValue', function() { - Plotly.plot(this.gd, data); - mouseEvent('mousemove', 203, 213); - - expect(d3.select('.hovertext').size()).toBe(1); - }); -}); - describe('hover distance', function() { 'use strict'; From 2849ff9c920b69d66aa372ef3bbd075db9560a09 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Sun, 15 Apr 2018 23:30:09 -0400 Subject: [PATCH 07/24] test finance trace select --- test/jasmine/tests/select_test.js | 117 +++++++++++++++++++++++------- 1 file changed, 92 insertions(+), 25 deletions(-) diff --git a/test/jasmine/tests/select_test.js b/test/jasmine/tests/select_test.js index aef6ca104b3..aa3cd37dafc 100644 --- a/test/jasmine/tests/select_test.js +++ b/test/jasmine/tests/select_test.js @@ -6,7 +6,7 @@ var doubleClick = require('../assets/double_click'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); -var fail = require('../assets/fail_test'); +var failTest = require('../assets/fail_test'); var mouseEvent = require('../assets/mouse_event'); var touchEvent = require('../assets/touch_event'); @@ -190,7 +190,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(doubleClickData).toBe(null, 'with the correct deselect data'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -282,7 +282,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(doubleClickData).toBe(null, 'with the correct deselect data'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -336,7 +336,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(doubleClickData).toBe(null, 'with the correct deselect data'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -355,7 +355,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(gd.data[0].selectedpoints).toBeUndefined(); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -374,7 +374,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(gd._fullData[0].selectedpoints).toBeUndefined(); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -408,7 +408,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { expect(doubleClickData).toBe(null, 'with the correct deselect data'); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -488,7 +488,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { checkPointCount(0, '(multiple invisible traces lasso)'); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -527,7 +527,7 @@ describe('@flaky Test select box and lasso in general:', function() { expect(selectedData.points[0].x).toBe(0); expect(selectedData.points[0].y).toBe(0); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -549,7 +549,7 @@ describe('@flaky Test select box and lasso in general:', function() { .then(function() { assertSelectionNodes(0, 0); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -730,7 +730,7 @@ describe('@flaky Test select box and lasso per trace:', function() { LASSOEVENTS, 'scatterternary lasso after relayout' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -766,7 +766,7 @@ describe('@flaky Test select box and lasso per trace:', function() { null, LASSOEVENTS, 'scattercarpet lasso' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -823,7 +823,7 @@ describe('@flaky Test select box and lasso per trace:', function() { [[370, 120], [500, 200]], null, null, NOEVENTS, 'scattermapbox pan' ); }) - .catch(fail) + .catch(failTest) .then(done); }, LONG_TIMEOUT_INTERVAL); @@ -889,7 +889,7 @@ describe('@flaky Test select box and lasso per trace:', function() { [[370, 120], [500, 200]], null, null, NOEVENTS, 'scattergeo pan' ); }) - .catch(fail) + .catch(failTest) .then(done); }, LONG_TIMEOUT_INTERVAL); @@ -927,7 +927,7 @@ describe('@flaky Test select box and lasso per trace:', function() { LASSOEVENTS, 'scatterpolar lasso' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -990,7 +990,7 @@ describe('@flaky Test select box and lasso per trace:', function() { [[370, 120], [500, 200]], null, [280, 190], NOEVENTS, 'choropleth pan' ); }) - .catch(fail) + .catch(failTest) .then(done); }, LONG_TIMEOUT_INTERVAL); @@ -1063,7 +1063,7 @@ describe('@flaky Test select box and lasso per trace:', function() { null, BOXEVENTS, 'bar select' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1123,7 +1123,7 @@ describe('@flaky Test select box and lasso per trace:', function() { null, BOXEVENTS, 'date/category select' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1172,7 +1172,7 @@ describe('@flaky Test select box and lasso per trace:', function() { null, BOXEVENTS, 'histogram select' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1236,7 +1236,7 @@ describe('@flaky Test select box and lasso per trace:', function() { null, BOXEVENTS, 'box select' ); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1299,10 +1299,77 @@ describe('@flaky Test select box and lasso per trace:', function() { null, BOXEVENTS, 'violin select' ); }) - .catch(fail) + .catch(failTest) .then(done); }); + ['ohlc', 'candlestick'].forEach(function(type) { + it('should work for ' + type + ' traces', function(done) { + var assertPoints = makeAssertPoints(['curveNumber', 'x', 'open', 'high', 'low', 'close']); + var assertSelectedPoints = makeAssertSelectedPoints(); + var assertRanges = makeAssertRanges(); + var assertLassoPoints = makeAssertLassoPoints(); + var l0 = 275; + var lv0 = '2011-01-03 18:00'; + var r0 = 325; + var rv0 = '2011-01-04 06:00'; + var l1 = 75; + var lv1 = '2011-01-01 18:00'; + var r1 = 125; + var rv1 = '2011-01-02 06:00'; + var t = 75; + var tv = 8; + var b = 325; + var bv = -2; + + Plotly.newPlot(gd, [{ + type: type, + x: ['2011-01-02', '2011-01-03', '2011-01-04'], + open: [1, 2, 3], + high: [3, 4, 5], + low: [0, 1, 2], + close: [0, 3, 2] + }], { + width: 400, + height: 400, + margin: {l: 50, r: 50, t: 50, b: 50}, + yaxis: {range: [-3, 9]}, + xaxis: {rangeslider: {visible: false}}, + dragmode: 'lasso' + }) + .then(function() { + return _run( + [[l0, t], [l0, b], [r0, b], [r0, t], [l0, t]], + function() { + assertPoints([[0, '2011-01-04', 3, 5, 2, 2]]); + assertSelectedPoints([[2]]); + assertLassoPoints([ + [lv0, lv0, rv0, rv0, lv0], + [tv, bv, bv, tv, tv] + ]); + }, + null, LASSOEVENTS, type + ' lasso' + ); + }) + .then(function() { + return Plotly.relayout(gd, 'dragmode', 'select'); + }) + .then(function() { + return _run( + [[l1, t], [r1, b]], + function() { + assertPoints([[0, '2011-01-02', 1, 3, 0, 0]]); + assertSelectedPoints([[0]]); + assertRanges([[lv1, rv1], [bv, tv]]); + }, + null, BOXEVENTS, type + ' select' + ); + }) + .catch(failTest) + .then(done); + }); + }); + it('should work on traces with enabled transforms', function(done) { var assertSelectedPoints = makeAssertSelectedPoints(); @@ -1342,7 +1409,7 @@ describe('@flaky Test select box and lasso per trace:', function() { BOXEVENTS, 'transformed trace select (all points selected)' ); }) - .catch(fail) + .catch(failTest) .then(done); }); }); @@ -1399,7 +1466,7 @@ describe('Test that selections persist:', function() { style: [0.2, 1, 0.2] }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1445,7 +1512,7 @@ describe('Test that selections persist:', function() { style: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 1, 1, 1], }); }) - .catch(fail) + .catch(failTest) .then(done); }); @@ -1487,7 +1554,7 @@ describe('Test that selections persist:', function() { style: [0.2, 1, 0.2, 0.2, 0.2], }); }) - .catch(fail) + .catch(failTest) .then(done); }); }); From be2b523dc513bb2034e5242d419c12d834e5afd0 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Sun, 15 Apr 2018 23:54:08 -0400 Subject: [PATCH 08/24] :hocho: hover test in finance_test - hover_label_test covers it better --- test/jasmine/tests/finance_test.js | 63 ------------------------------ 1 file changed, 63 deletions(-) diff --git a/test/jasmine/tests/finance_test.js b/test/jasmine/tests/finance_test.js index 91e3207344a..7d0f4c85a76 100644 --- a/test/jasmine/tests/finance_test.js +++ b/test/jasmine/tests/finance_test.js @@ -426,69 +426,6 @@ describe('finance charts calc', function() { expect(mapGet(out[1], 'dir')).toEqual(directions); }); - ['ohlc', 'candlestick'].forEach(function(type) { - it('generates correct hover text for ' + type, function() { - var trace0 = Lib.extendDeep({}, mock0, { - type: type, - text: ['A', 'B', 'C', 'D'] - }); - - var trace1 = Lib.extendDeep({}, mock1, { - type: type, - text: 'IMPORTANT', - hoverinfo: 'x+text', - xaxis: 'x2' - }); - - var gd = _calcGd([trace0, trace1]); - var calcdata = gd.calcdata; - var tracesOut = calcdata.map(calcDatatoTrace); - - var _hover = tracesOut[0]._module.hoverPoints; - function hoverOn(curveNum, x, y) { - var pointData = { - cd: calcdata[curveNum], - xa: gd._fullLayout[tracesOut[curveNum].xaxis === 'x2' ? 'xaxis2' : 'xaxis'], - ya: gd._fullLayout.yaxis, - maxHoverDistance: 20, - maxSpikeDistance: 20, - distance: Infinity, - spikeDistance: Infinity, - index: false - }; - - var pts = _hover(pointData, x, y, 'closest'); - return pts[0]; - } - - expect(tracesOut[0].hoverinfo).toBe('all'); - expect(mapGet(calcdata[0], 'tx')).toEqual([ - 'A', 'B', 'C', 'D', undefined, undefined, undefined, undefined - ]); - expect(hoverOn(0, 0, 33)).toEqual(jasmine.objectContaining({ - text: 'open: 33.01
high: 34.2
low: 31.7
close: 34.1
A', - color: tracesOut[0].increasing.line.color - })); - expect(hoverOn(0, 1, 33)).toEqual(jasmine.objectContaining({ - text: 'open: 33.31
high: 34.37
low: 30.75
close: 31.93
B', - color: tracesOut[0].decreasing.line.color - })); - - expect(tracesOut[1].hoverinfo).toBe('x+text'); - expect(mapGet(calcdata[1], 'tx')).toEqual([ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined - ]); - expect(hoverOn(1, calcdata[1][0].pos, 33)).toEqual(jasmine.objectContaining({ - text: 'open: 33.01
high: 34.2
low: 31.7
close: 34.1
IMPORTANT', - color: tracesOut[1].increasing.line.color - })); - expect(hoverOn(1, calcdata[1][1].pos, 33)).toEqual(jasmine.objectContaining({ - text: 'open: 33.31
high: 34.37
low: 30.75
close: 31.93
IMPORTANT', - color: tracesOut[1].decreasing.line.color - })); - }); - }); - it('should work with *filter* transforms', function() { var trace0 = Lib.extendDeep({}, mock1, { type: 'ohlc', From 5b6a7d5066d1f856db68edad0e89640812ee3725 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Sun, 15 Apr 2018 23:57:23 -0400 Subject: [PATCH 09/24] fix prereqs for transform_multi_test --- test/jasmine/tests/transform_multi_test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/jasmine/tests/transform_multi_test.js b/test/jasmine/tests/transform_multi_test.js index d322679b8a4..9ad0c331c87 100644 --- a/test/jasmine/tests/transform_multi_test.js +++ b/test/jasmine/tests/transform_multi_test.js @@ -17,7 +17,8 @@ var mockFullLayout = { _modules: [], _basePlotModules: [], _has: function() {}, - _dfltTitle: {x: 'xxx', y: 'yyy'} + _dfltTitle: {x: 'xxx', y: 'yyy'}, + _requestRangeslider: {} }; From 121d171f0e94d5d25201b06d8623ad173dfa4f9a Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 09:41:16 -0400 Subject: [PATCH 10/24] update finance bundle tests --- test/jasmine/bundle_tests/finance_test.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/jasmine/bundle_tests/finance_test.js b/test/jasmine/bundle_tests/finance_test.js index b56e10e14b6..33f26511b92 100644 --- a/test/jasmine/bundle_tests/finance_test.js +++ b/test/jasmine/bundle_tests/finance_test.js @@ -13,16 +13,18 @@ describe('Bundle with finance trace type', function() { var mock = require('@mocks/finance_style.json'); - it('should register the correct trace modules for the generated traces', function() { + it('should not register transforms anymore', function() { var transformModules = Object.keys(Plotly.Plots.transformsRegistry); - expect(transformModules).toEqual(['ohlc', 'candlestick']); + expect(transformModules).toEqual([]); }); it('should register the correct trace modules for the generated traces', function() { var traceModules = Object.keys(Plotly.Plots.modules); - expect(traceModules).toEqual(['scatter', 'box', 'ohlc', 'candlestick']); + // scatter is registered no matter what + // ohlc uses some parts of box by direct require but does not need to register it. + expect(traceModules).toEqual(['scatter', 'ohlc', 'candlestick']); }); it('should graph ohlc and candlestick traces', function(done) { @@ -30,8 +32,8 @@ describe('Bundle with finance trace type', function() { Plotly.plot(createGraphDiv(), mock.data, mock.layout).then(function() { var gSubplot = d3.select('g.cartesianlayer'); - expect(gSubplot.selectAll('g.trace.scatter').size()).toEqual(2); - expect(gSubplot.selectAll('g.trace.boxes').size()).toEqual(2); + expect(gSubplot.selectAll('g.trace.ohlc').size()).toEqual(1); + expect(gSubplot.selectAll('g.trace.boxes').size()).toEqual(1); destroyGraphDiv(); done(); From ad1d8f0e0654250763b99e01b9b70552134712a3 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 09:54:41 -0400 Subject: [PATCH 11/24] update finance mocks - notice I added a legend to finance_style, so we test ohlc legend drawing - also notice that I changed ohlc line drawing to not overdraw. Directions were chosen to optimize dashes: - the ticks are drawn starting from the outside toward the middle - the main line is drawn top-to-bottom, so in principle you might not actually see the low value, but that was the case before anyway, there's really no way around this with dashes... --- .../baselines/candlestick_double-y-axis.png | Bin 79304 -> 86332 bytes .../candlestick_rangeslider_thai.png | Bin 80804 -> 87895 bytes test/image/baselines/finance_style.png | Bin 24418 -> 31268 bytes test/image/baselines/ohlc_first.png | Bin 41010 -> 37297 bytes test/image/mocks/finance_style.json | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/test/image/baselines/candlestick_double-y-axis.png b/test/image/baselines/candlestick_double-y-axis.png index f423ad6fd0fc1238648b0d265cc4ffecfcad9c58..7db85e0a0c8d593f8c5706787521d2a3afd6aebd 100644 GIT binary patch literal 86332 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 literal 79304 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 diff --git a/test/image/baselines/candlestick_rangeslider_thai.png b/test/image/baselines/candlestick_rangeslider_thai.png index 76894bfb9de5541c34e3cfddb208702f16e57b4c..901883613cd6e7021644e4dbd9e84aee4c4d90f7 100644 GIT binary patch literal 87895 zcmeFZXH-*dyDqAN(nN&NrAP}PEeO&Pgir#Zqx2FGkluS02oj{%C`D3mHKl9aW5 zra%p4A~<&@oY%1z?67W;=dU7+;vy;J8p-(sg1x3cZ=Eck0e=qCm!6WjT#_@M~4O)>oZ0l{8hIe)Kj!Y=m0W{BC&Hw@OZZKFDW zK(N=s=bbG0>&GN+Q6wtF=h!D$#s4+Y|7)V>Sn2;Y(R022|6CMhR#Ek~zWiX_nBL>* z7aDJ@=uuhX#!}q5&fWzA7S9}YlJ2*=AFl>>*F3pD66Xm0v2~dOeV@n`dS37VDFp{_ zr@S5D&-$kNo@5JkO~BhD*fp`$jIR3SSz(`k|Js9yC7S8J@N-98Ceg;ewxiu*u7o}N z8d{tu<>O@bL?dqcrEnQZQJU8$nov2qA{x879fDke?vHC9zW?sFIHAf{j`OH#4%l_* z$rPtRAP~_pF$&7cSK8v4pQ;Of#GBcko*e&Ku{e#<$P~+c^M>T_-@n+q!BPSH>!q(* z`Qhhejt3m_s66YoRMM1#afi3lN5V15PYZrVtun#xw>_DU`6Qll63cvinTN z#>T&QzG(%Lr1Z(1GEvC<4%>M@S?@cyUcb>M(kBxU9)5|Mj&3eqdi~R#5z~mLf_20g z3}&<`Sh~)8C2D^DA@i>a-g9!z*MtjbOvu|@I5w4KB7vMpPRU=F%XD|McI&YF_xl|S zH650mX0eB;t*vgMe7nA!KR+TU3dYzJqN3G%V4Kv?Sv%iJZ@RX)8&6OzQKkTCcmSW5lUa=&n3;H&4f_=cAs3r;Gn*# z|3aGI(Pn#pz6u4oYK7W4i-mE6luN$F-p6TQ?qGppPygXGx}(LUDtUAA_Wa>zEOnqr zvbA1gaiSfz%D^>H-Mi^%OZ}}`J*|jcFI+=|9B&S_(n|jM^O1d2XMV!nnABA2!I2U5 zLu@ny)b2&_hru2+oq4oPcRHJ_tQmps+vIbiQ4a!GZ$v|f2qLJ&yrFc>>xLF;wwka= zki}qK<|ASIeuxpaN<5{Y@fkOT?9TP!QWNgZ>+YC1lck<#5xI&_aw<8OzUC_W{h4{< ze!M$kjgO|RJ=*Fnl-0uLaGi(yKJfxTGcJM{;OTjtxTwK%#lPh5C{MA zs(fK#0W0Rrc(Pa1{1M&x{Ep-A^3Y?l_jY}I^-nr+XfmDq_qo2nKc1c(_7`cfB6DPn zRCJwU&RJY67qDrLP$O*YuMm!5*8_SbUgx48Ssxv*Lsd=>Qn@6Ou0uB(wy$+{bv1}N zJ3Bey@fb*@B9FI0mPs+WH-eJ)L zxr#*i_VyLk1dXKs9@fG_z*={#*Y0w0mx^7c!Q3y(3WxBgYHN0WTu3)@1CI3a-Mg

!crSGoIt&Zi5QD*f%Y*6TxqHG^VmcUiv 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 literal 80804 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 H5BK{&J4OmW diff --git a/test/image/baselines/finance_style.png b/test/image/baselines/finance_style.png index ac72e76f013ada91c5a587adb24af0e2349a3b24..123a4429c652f339767b802ae27247fd15deac02 100644 GIT binary patch literal 31268 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 literal 24418 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 Lsc%XT($4%1riw1M diff --git a/test/image/baselines/ohlc_first.png b/test/image/baselines/ohlc_first.png index ddac6bf2b507c9b625d0a71b33221486a86faa8a..8615422ad20dadd026de621c76f723a7d328f99a 100644 GIT binary patch literal 37297 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 IZ&^J0AEf_T?f?J) diff --git a/test/image/mocks/finance_style.json b/test/image/mocks/finance_style.json index 7adc4f2bdd6..a0064291587 100644 --- a/test/image/mocks/finance_style.json +++ b/test/image/mocks/finance_style.json @@ -268,7 +268,7 @@ "calendar": "islamic", "title": "Islamic dates" }, - "showlegend": false, + "showlegend": true, "height": 450, "width": 1100, "autosize": true From 2554482ebd84961ec5538cf163eff8dbd2e6a770 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 11:00:43 -0400 Subject: [PATCH 12/24] fix lf/uf vs min/max logic for box/violin/candlestick --- src/traces/box/plot.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index a6690e031f5..042c7363d10 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -127,8 +127,16 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { valAxis.c2p(d.med, true), Math.min(q1, q3) + 1, Math.max(q1, q3) - 1 ); - var lf = valAxis.c2p(trace.boxpoints ? d.lf : d.min, true); - var uf = valAxis.c2p(trace.boxpoints ? d.uf : d.max, true); + + // for compatibility with box, violin, and candlestick + // perhaps we should put this into cd0.t instead so it's more explicit, + // but what we have now is: + // - box always has d.lf, but boxpoints can be anything + // - violin has d.lf and should always use it (boxpoints is undefined) + // - candlestick has only min/max + var useExtremes = (d.lf === undefined) || (trace.boxpoints === false); + var lf = valAxis.c2p(useExtremes ? d.min : d.lf, true); + var uf = valAxis.c2p(useExtremes ? d.max : d.uf, true); var ln = valAxis.c2p(d.ln, true); var un = valAxis.c2p(d.un, true); From 0d80a21458b31a2d8ec3c6a04428cc6fe8fdd949 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 11:13:38 -0400 Subject: [PATCH 13/24] fix #2510 - or rather, revive the test that the refactor fixed this --- test/jasmine/tests/plot_api_test.js | 98 ++++++++++++++--------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/test/jasmine/tests/plot_api_test.js b/test/jasmine/tests/plot_api_test.js index f3cf5d14671..ae26f13385d 100644 --- a/test/jasmine/tests/plot_api_test.js +++ b/test/jasmine/tests/plot_api_test.js @@ -2781,58 +2781,52 @@ describe('Test plot api', function() { .then(done); }); - // it('has the right internal state after altering candlesticks', function(done) { - // var trace = { - // type: 'candlestick', - // low: [1], - // open: [2], - // close: [3], - // high: [4] - // }; - // Plotly.newPlot(gd, [trace]) - // .then(function() { - // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); - // return Plotly.react(gd, [trace]); - // }) - // .then(function() { - // // the plot actually *looks* correct here, but this is the simplest - // // manifestation of https://github.com/plotly/plotly.js/issues/2510 - // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); - // }) - // .catch(failTest) - // .then(done); - // }); - - // it('can change data in candlesticks multiple times', function(done) { - // var trace = { - // type: 'candlestick', - // low: [1], - // open: [2], - // close: [3], - // high: [4] - // }; - // Plotly.newPlot(gd, [trace]) - // .then(function() { - // expect(gd._fullData[0].y).toEqual([1, 2, 3, 3, 3, 4]); - - // trace.low = [0]; - // return Plotly.react(gd, [trace]); - // }) - // .then(function() { - // expect(gd._fullData[0].y).toEqual([0, 2, 3, 3, 3, 4]); - - // trace.low = [-1]; - // return Plotly.react(gd, [trace]); - // }) - // .then(function() { - // expect(gd._fullData[0].y).toEqual([-1, 2, 3, 3, 3, 4]); - - // trace.low = [0]; - // return Plotly.react(gd, [trace]); - // }) - // .catch(failTest) - // .then(done); - // }); + it('can change data in candlesticks multiple times', function(done) { + // test that we've fixed the original issue in + // https://github.com/plotly/plotly.js/issues/2510 + + function assertCalc(open, high, low, close) { + expect(gd.calcdata[0][0]).toEqual(jasmine.objectContaining({ + min: low, + max: high, + med: close, + q1: Math.min(open, close), + q3: Math.max(open, close), + dir: close >= open ? 'increasing' : 'decreasing' + })); + } + var trace = { + type: 'candlestick', + low: [1], + open: [2], + close: [3], + high: [4] + }; + Plotly.newPlot(gd, [trace]) + .then(function() { + assertCalc(2, 4, 1, 3); + + trace.low = [0]; + return Plotly.react(gd, [trace]); + }) + .then(function() { + assertCalc(2, 4, 0, 3); + + trace.low = [-1]; + return Plotly.react(gd, [trace]); + }) + .then(function() { + assertCalc(2, 4, -1, 3); + + trace.close = [1]; + return Plotly.react(gd, [trace]); + }) + .then(function() { + assertCalc(2, 4, -1, 1); + }) + .catch(failTest) + .then(done); + }); it('can change frames without redrawing', function(done) { var data = [{y: [1, 2, 3]}]; From 82677ac8745ca56da740302977533dffcd5521b6 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 12:53:55 -0400 Subject: [PATCH 14/24] tweak and test cleanData for finance traces removing direction names & showlegend, and picking a composite name --- src/plot_api/helpers.js | 25 ++++++--- test/jasmine/tests/plot_api_test.js | 84 +++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 6 deletions(-) diff --git a/src/plot_api/helpers.js b/src/plot_api/helpers.js index bb274167f18..b0912b31020 100644 --- a/src/plot_api/helpers.js +++ b/src/plot_api/helpers.js @@ -332,15 +332,21 @@ exports.cleanData = function(data, existingData) { // fixes from converting finance from transforms to real trace types if(trace.type === 'candlestick' || trace.type === 'ohlc') { + var increasingShowlegend = (trace.increasing || {}).showlegend !== false; + var decreasingShowlegend = (trace.decreasing || {}).showlegend !== false; var increasingName = cleanFinanceDir(trace.increasing); var decreasingName = cleanFinanceDir(trace.decreasing); // now figure out something smart to do with the separate direction // names we removed - if(increasingName && decreasingName) { + if((increasingName !== false) && (decreasingName !== false)) { // both sub-names existed: base name previously had no effect // so ignore it and try to find a shared part of the sub-names - var newName = commonPrefix(increasingName, decreasingName); + + var newName = commonPrefix( + increasingName, decreasingName, + increasingShowlegend, decreasingShowlegend + ); // if no common part, leave whatever name was (or wasn't) there if(newName) trace.name = newName; } @@ -409,17 +415,24 @@ exports.cleanData = function(data, existingData) { }; function cleanFinanceDir(dirContainer) { - if(!Lib.isPlainObject(dirContainer)) return ''; + if(!Lib.isPlainObject(dirContainer)) return false; - var dirName = (dirContainer.showlegend === false) ? '' : dirContainer.name; + var dirName = dirContainer.name; delete dirContainer.name; delete dirContainer.showlegend; - return dirName; + return (typeof dirName === 'string' || typeof dirName === 'number') && String(dirName); } -function commonPrefix(name1, name2) { +function commonPrefix(name1, name2, show1, show2) { + // if only one is shown in the legend, use that + if(show1 && !show2) return name1; + if(show2 && !show1) return name2; + + // if both or neither are in the legend, check if one is blank (or whitespace) + // and use the other one + // note that hover labels can still use the name even if the legend doesn't if(!name1.trim()) return name2; if(!name2.trim()) return name1; diff --git a/test/jasmine/tests/plot_api_test.js b/test/jasmine/tests/plot_api_test.js index ae26f13385d..21891a4354d 100644 --- a/test/jasmine/tests/plot_api_test.js +++ b/test/jasmine/tests/plot_api_test.js @@ -2276,6 +2276,90 @@ describe('Test plot api', function() { expect(gd.layout.shapes[2].yref).toEqual('y'); }); + + it('removes direction names and showlegend from finance traces', function() { + var data = [{ + type: 'ohlc', open: [1], high: [3], low: [0], close: [2], + increasing: { + showlegend: true, + name: 'Yeti goes up' + }, + decreasing: { + showlegend: 'legendonly', + name: 'Yeti goes down' + }, + name: 'Snowman' + }, { + type: 'candlestick', open: [1], high: [3], low: [0], close: [2], + increasing: { + name: 'Bigfoot' + }, + decreasing: { + showlegend: false, + name: 'Biggerfoot' + }, + name: 'Nobody' + }, { + type: 'ohlc', open: [1], high: [3], low: [0], close: [2], + increasing: { + name: 'Batman' + }, + decreasing: { + showlegend: true + }, + name: 'Robin' + }, { + type: 'candlestick', open: [1], high: [3], low: [0], close: [2], + increasing: { + showlegend: false, + }, + decreasing: { + name: 'Fred' + } + }, { + type: 'ohlc', open: [1], high: [3], low: [0], close: [2], + increasing: { + showlegend: false, + name: 'Gruyere heating up' + }, + decreasing: { + showlegend: false, + name: 'Gruyere cooling off' + }, + name: 'Emmenthaler' + }]; + + Plotly.plot(gd, data); + + // Even if both showlegends are false, leave trace.showlegend out + // My rationale for this is that legends are sufficiently different + // now that it's worthwhile resetting their existence to default + gd.data.forEach(function(trace) { + expect(trace.increasing.name).toBeUndefined(); + expect(trace.increasing.showlegend).toBeUndefined(); + expect(trace.decreasing.name).toBeUndefined(); + expect(trace.decreasing.showlegend).toBeUndefined(); + }); + + // Both directions have names: ignore trace.name, as it + // had no effect on the output previously + // Ideally 'Yeti goes' would be smart enough to truncate + // at 'Yeti' but I don't see how to do that... + expect(gd.data[0].name).toBe('Yeti goes'); + // One direction has empty or hidden name so use the other + // Note that even '' in both names would render trace.name impact-less + expect(gd.data[1].name).toBe('Bigfoot'); + + // One direction has a name but trace.name is there too: + // just use trace.name + expect(gd.data[2].name).toBe('Robin'); + + // No trace.name, only one direction name: use the direction name + expect(gd.data[3].name).toBe('Fred'); + + // both names exist but hidden from the legend: still look for common prefix + expect(gd.data[4].name).toBe('Gruyere'); + }); }); describe('Plotly.newPlot', function() { From 71fa112bd5ec727338158f573c7d81d6a86930b1 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 16:30:35 -0400 Subject: [PATCH 15/24] remove plotSchema change from before we decided to refactor finance to real traces --- src/plot_api/plot_schema.js | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/plot_api/plot_schema.js b/src/plot_api/plot_schema.js index f1d6f171e4c..45bd087d01e 100644 --- a/src/plot_api/plot_schema.js +++ b/src/plot_api/plot_schema.js @@ -252,12 +252,11 @@ exports.findArrayAttributes = function(trace) { exports.getTraceValObject = function(trace, parts) { var head = parts[0]; var i = 1; // index to start recursing from - var transforms = trace.transforms; - if(!Array.isArray(transforms) || !transforms.length) transforms = false; var moduleAttrs, valObject; if(head === 'transforms') { - if(!transforms) return false; + var transforms = trace.transforms; + if(!Array.isArray(transforms) || !transforms.length) return false; var tNum = parts[1]; if(!isIndex(tNum) || tNum >= transforms.length) { return false; @@ -287,22 +286,8 @@ exports.getTraceValObject = function(trace, parts) { } } - // next look in the global attributes + // finally look in the global attributes if(!valObject) valObject = baseAttributes[head]; - - // finally check if we have a transform matching the original trace type - if(!valObject && transforms) { - var inputType = trace._input.type; - if(inputType && inputType !== trace.type) { - for(var j = 0; j < transforms.length; j++) { - if(transforms[j].type === inputType) { - moduleAttrs = ((Registry.modules[inputType] || {})._module || {}).attributes; - valObject = moduleAttrs && moduleAttrs[head]; - if(valObject) break; - } - } - } - } } return recurseIntoValObject(valObject, parts, i); From 0b7541e34d63ce74cddb5d243a652b2df0430b70 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 18:08:30 -0400 Subject: [PATCH 16/24] fix for box & candlestick together on one subplot also an image test for #2004 category OHLC and candlestick using box layout attrs --- src/plots/cartesian/index.js | 10 ++- src/plots/get_data.js | 36 +++++++-- src/traces/parcoords/base_plot.js | 2 +- src/traces/sankey/base_plot.js | 2 +- src/traces/table/base_plot.js | 2 +- .../baselines/finance_subplots_categories.png | Bin 0 -> 44755 bytes .../mocks/finance_subplots_categories.json | 73 ++++++++++++++++++ 7 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 test/image/baselines/finance_subplots_categories.png create mode 100644 test/image/mocks/finance_subplots_categories.json diff --git a/src/plots/cartesian/index.js b/src/plots/cartesian/index.js index a7a742d6aa1..f7862640aa3 100644 --- a/src/plots/cartesian/index.js +++ b/src/plots/cartesian/index.js @@ -211,12 +211,16 @@ function plotOne(gd, plotinfo, cdSubplot, transitionOpts, makeOnCompleteCallback var _module = modules[j]; // skip over non-cartesian trace modules - if(_module.basePlotModule.name !== 'cartesian') continue; + if(!_module.plot || _module.basePlotModule.name !== 'cartesian') continue; // plot all traces of this type on this subplot at once - var cdModule = getModuleCalcData(cdSubplot, _module); + var cdModuleAndOthers = getModuleCalcData(cdSubplot, _module); + var cdModule = cdModuleAndOthers[0]; + // don't need to search the found traces again - in fact we need to NOT + // so that if two modules share the same plotter we don't double-plot + cdSubplot = cdModuleAndOthers[1]; - if(_module.plot) _module.plot(gd, plotinfo, cdModule, transitionOpts, makeOnCompleteCallback); + _module.plot(gd, plotinfo, cdModule, transitionOpts, makeOnCompleteCallback); } } diff --git a/src/plots/get_data.js b/src/plots/get_data.js index 763fb255d30..e06ca4608c3 100644 --- a/src/plots/get_data.js +++ b/src/plots/get_data.js @@ -12,11 +12,11 @@ var Registry = require('../registry'); var SUBPLOT_PATTERN = require('./cartesian/constants').SUBPLOT_PATTERN; /** - * Get calcdata traces(s) associated with a given subplot + * Get calcdata trace(s) associated with a given subplot * - * @param {array} calcData (as in gd.calcdata) - * @param {string} type subplot type - * @param {string} subplotId subplot id to look for + * @param {array} calcData: as in gd.calcdata + * @param {string} type: subplot type + * @param {string} subplotId: subplot id to look for * * @return {array} array of calcdata traces */ @@ -36,20 +36,40 @@ exports.getSubplotCalcData = function(calcData, type, subplotId) { return subplotCalcData; }; - +/** + * Get calcdata trace(s) that can be plotted with a given module + * NOTE: this isn't necessarily just exactly matching trace type, + * if multiple trace types use the same plotting routine, they will be + * collected here. + * In order to not plot the same thing multiple times, we return two arrays, + * the calcdata we *will* plot with this module, and the ones we *won't* + * + * @param {array} calcdata: as in gd.calcdata + * @param {object|string} typeOrModule: the plotting module, or its name + * + * @return {array[array]} [foundCalcdata, remainingCalcdata] + */ exports.getModuleCalcData = function(calcdata, typeOrModule) { var moduleCalcData = []; + var remainingCalcData = []; var _module = typeof typeOrModule === 'string' ? Registry.getModule(typeOrModule) : typeOrModule; - if(!_module) return moduleCalcData; + if(!_module) return [moduleCalcData, calcdata]; for(var i = 0; i < calcdata.length; i++) { var cd = calcdata[i]; var trace = cd[0].trace; + if(trace.visible !== true) continue; - if((trace._module === _module) && (trace.visible === true)) moduleCalcData.push(cd); + // we use this to find data to plot - so if there's a .plot + if(trace._module.plot === _module.plot) { + moduleCalcData.push(cd); + } + else { + remainingCalcData.push(cd); + } } - return moduleCalcData; + return [moduleCalcData, remainingCalcData]; }; /** diff --git a/src/traces/parcoords/base_plot.js b/src/traces/parcoords/base_plot.js index 25fbfd48b29..f50461e77c3 100644 --- a/src/traces/parcoords/base_plot.js +++ b/src/traces/parcoords/base_plot.js @@ -18,7 +18,7 @@ var PARCOORDS = 'parcoords'; exports.name = PARCOORDS; exports.plot = function(gd) { - var calcData = getModuleCalcData(gd.calcdata, PARCOORDS); + var calcData = getModuleCalcData(gd.calcdata, PARCOORDS)[0]; if(calcData.length) parcoordsPlot(gd, calcData); }; diff --git a/src/traces/sankey/base_plot.js b/src/traces/sankey/base_plot.js index 5c1afc1dbb0..5aaac032417 100644 --- a/src/traces/sankey/base_plot.js +++ b/src/traces/sankey/base_plot.js @@ -22,7 +22,7 @@ exports.baseLayoutAttrOverrides = overrideAll({ }, 'plot', 'nested'); exports.plot = function(gd) { - var calcData = getModuleCalcData(gd.calcdata, SANKEY); + var calcData = getModuleCalcData(gd.calcdata, SANKEY)[0]; plot(gd, calcData); }; diff --git a/src/traces/table/base_plot.js b/src/traces/table/base_plot.js index 9004d109f5f..6e074e8cc44 100644 --- a/src/traces/table/base_plot.js +++ b/src/traces/table/base_plot.js @@ -16,7 +16,7 @@ var TABLE = 'table'; exports.name = TABLE; exports.plot = function(gd) { - var calcData = getModuleCalcData(gd.calcdata, TABLE); + var calcData = getModuleCalcData(gd.calcdata, TABLE)[0]; if(calcData.length) tablePlot(gd, calcData); }; diff --git a/test/image/baselines/finance_subplots_categories.png b/test/image/baselines/finance_subplots_categories.png new file mode 100644 index 0000000000000000000000000000000000000000..737202f324156080e3abed4895192e11d7bc0408 GIT binary patch literal 44755 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 Date: Mon, 16 Apr 2018 19:01:52 -0400 Subject: [PATCH 17/24] change to shorter dash in finance_style mock so it doesn't look like quite such a dumb feature --- test/image/baselines/finance_style.png | Bin 31268 -> 31280 bytes test/image/mocks/finance_style.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/test/image/baselines/finance_style.png b/test/image/baselines/finance_style.png index 123a4429c652f339767b802ae27247fd15deac02..a969a040c7eca12e0f3f39698b6be42657e756e6 100644 GIT binary patch literal 31280 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 diff --git a/test/image/mocks/finance_style.json b/test/image/mocks/finance_style.json index a0064291587..b0f274298a3 100644 --- a/test/image/mocks/finance_style.json +++ b/test/image/mocks/finance_style.json @@ -121,7 +121,7 @@ "decreasing": { "line": { "color": "rgb(128, 128, 128)", - "dash": "dash" + "dash": "dot" } }, "line": { From d64fab68bcde681186e47b48b537e614cd67dcc6 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 19:02:45 -0400 Subject: [PATCH 18/24] remove TODO that's been OK'd as is --- src/traces/ohlc/hover.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/traces/ohlc/hover.js b/src/traces/ohlc/hover.js index 9a249237055..ef4ff08d7ac 100644 --- a/src/traces/ohlc/hover.js +++ b/src/traces/ohlc/hover.js @@ -101,10 +101,8 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { // put it all in .extraText pointData.extraText = textParts.join('
'); - // this puts the label at the midpoint of the box, ie + // this puts the label *and the spike* at the midpoint of the box, ie // halfway between open and close, not between high and low. - // TODO: the spike also links to this point, whereas previously - // it linked to close. Is one better? pointData.y0 = pointData.y1 = ya.c2p(di.yc, true); return [pointData]; From dc016858219587070e633f32b248ae5497e384b4 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Mon, 16 Apr 2018 19:25:01 -0400 Subject: [PATCH 19/24] undefined -> BADNUM in ohlc/calc --- src/traces/ohlc/calc.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/traces/ohlc/calc.js b/src/traces/ohlc/calc.js index 600adea48f1..c4ee2adc070 100644 --- a/src/traces/ohlc/calc.js +++ b/src/traces/ohlc/calc.js @@ -11,6 +11,7 @@ var Lib = require('../../lib'); var _ = Lib._; var Axes = require('../../plots/cartesian/axes'); +var BADNUM = require('../../constants/numerical').BADNUM; function calc(gd, trace) { var xa = Axes.getFromId(gd, trace.xaxis); @@ -69,7 +70,7 @@ function calcCommon(gd, trace, x, ya, ptFunc) { var li = l[i]; var ci = c[i]; - if(xi !== undefined && oi !== undefined && hi !== undefined && li !== undefined && ci !== undefined) { + if(xi !== BADNUM && oi !== BADNUM && hi !== BADNUM && li !== BADNUM && ci !== BADNUM) { if(ci === oi) { // if open == close, look for a change from the previous close if(cPrev !== null && ci !== cPrev) increasing = ci > cPrev; From 302d1e6b128a583ec9ae3b345035abcb1be49f52 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Apr 2018 08:40:10 -0400 Subject: [PATCH 20/24] update new getModuleCalcData callers to new API --- src/traces/pie/base_plot.js | 2 +- src/traces/splom/base_plot.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/pie/base_plot.js b/src/traces/pie/base_plot.js index b6dc4549031..7bcb8e4462c 100644 --- a/src/traces/pie/base_plot.js +++ b/src/traces/pie/base_plot.js @@ -15,7 +15,7 @@ exports.name = 'pie'; exports.plot = function(gd) { var Pie = Registry.getModule('pie'); - var cdPie = getModuleCalcData(gd.calcdata, Pie); + var cdPie = getModuleCalcData(gd.calcdata, Pie)[0]; if(cdPie.length) Pie.plot(gd, cdPie); }; diff --git a/src/traces/splom/base_plot.js b/src/traces/splom/base_plot.js index 73fbc59d11f..10b062e2c38 100644 --- a/src/traces/splom/base_plot.js +++ b/src/traces/splom/base_plot.js @@ -22,7 +22,7 @@ var SPLOM = 'splom'; function plot(gd) { var fullLayout = gd._fullLayout; var _module = Registry.getModule(SPLOM); - var splomCalcData = getModuleCalcData(gd.calcdata, _module); + var splomCalcData = getModuleCalcData(gd.calcdata, _module)[0]; prepareRegl(gd, ['ANGLE_instanced_arrays', 'OES_element_index_uint']); From f498bd04e0541a4b6de7f7785d752fd6f1bb6481 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Apr 2018 10:11:21 -0400 Subject: [PATCH 21/24] set to null instead of delete in ohlc/calc --- src/traces/ohlc/calc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/ohlc/calc.js b/src/traces/ohlc/calc.js index c4ee2adc070..42de0e1a086 100644 --- a/src/traces/ohlc/calc.js +++ b/src/traces/ohlc/calc.js @@ -19,9 +19,9 @@ function calc(gd, trace) { var tickLen = convertTickWidth(gd, xa, trace); var minDiff = trace._minDiff; - delete trace._minDiff; + trace._minDiff = null; var x = trace._xcalc; - delete trace._xcalc; + trace._xcalc = null; var cd = calcCommon(gd, trace, x, ya, ptFunc); From c77a8a319ccfc6aeff044e48cee561e281dec21a Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Apr 2018 10:11:53 -0400 Subject: [PATCH 22/24] test that selection applies to plot, not rangeslider --- test/jasmine/tests/select_test.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/test/jasmine/tests/select_test.js b/test/jasmine/tests/select_test.js index aa3cd37dafc..440687b88ed 100644 --- a/test/jasmine/tests/select_test.js +++ b/test/jasmine/tests/select_test.js @@ -1304,7 +1304,7 @@ describe('@flaky Test select box and lasso per trace:', function() { }); ['ohlc', 'candlestick'].forEach(function(type) { - it('should work for ' + type + ' traces', function(done) { + fit('should work for ' + type + ' traces', function(done) { var assertPoints = makeAssertPoints(['curveNumber', 'x', 'open', 'high', 'low', 'close']); var assertSelectedPoints = makeAssertSelectedPoints(); var assertRanges = makeAssertRanges(); @@ -1318,9 +1318,18 @@ describe('@flaky Test select box and lasso per trace:', function() { var r1 = 125; var rv1 = '2011-01-02 06:00'; var t = 75; - var tv = 8; - var b = 325; - var bv = -2; + var tv = 7.565; + var b = 225; + var bv = -1.048; + + function countUnSelectedPaths(selector) { + var unselected = 0; + d3.select(gd).selectAll(selector).each(function() { + var opacity = this.style.opacity; + if(opacity < 1) unselected++; + }); + return unselected; + } Plotly.newPlot(gd, [{ type: type, @@ -1334,7 +1343,6 @@ describe('@flaky Test select box and lasso per trace:', function() { height: 400, margin: {l: 50, r: 50, t: 50, b: 50}, yaxis: {range: [-3, 9]}, - xaxis: {rangeslider: {visible: false}}, dragmode: 'lasso' }) .then(function() { @@ -1347,6 +1355,8 @@ describe('@flaky Test select box and lasso per trace:', function() { [lv0, lv0, rv0, rv0, lv0], [tv, bv, bv, tv, tv] ]); + expect(countUnSelectedPaths('.cartesianlayer .trace path')).toBe(2); + expect(countUnSelectedPaths('.rangeslider-rangeplot .trace path')).toBe(0); }, null, LASSOEVENTS, type + ' lasso' ); From 3f432531f59e73b2b36b1aad498c286f4efee53a Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Apr 2018 10:26:10 -0400 Subject: [PATCH 23/24] :hocho: fit --- test/jasmine/tests/select_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/select_test.js b/test/jasmine/tests/select_test.js index 440687b88ed..992a54b5f3a 100644 --- a/test/jasmine/tests/select_test.js +++ b/test/jasmine/tests/select_test.js @@ -1304,7 +1304,7 @@ describe('@flaky Test select box and lasso per trace:', function() { }); ['ohlc', 'candlestick'].forEach(function(type) { - fit('should work for ' + type + ' traces', function(done) { + it('should work for ' + type + ' traces', function(done) { var assertPoints = makeAssertPoints(['curveNumber', 'x', 'open', 'high', 'low', 'close']); var assertSelectedPoints = makeAssertSelectedPoints(); var assertRanges = makeAssertRanges(); From 13204a9be522b20ec030b25f1a35d0e763281776 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Apr 2018 10:41:46 -0400 Subject: [PATCH 24/24] mark polar drag test flaky --- test/jasmine/tests/polar_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/polar_test.js b/test/jasmine/tests/polar_test.js index ac5304d72a7..32ca0d61b6b 100644 --- a/test/jasmine/tests/polar_test.js +++ b/test/jasmine/tests/polar_test.js @@ -798,7 +798,7 @@ describe('Test polar interactions:', function() { .then(done); }); - it('should response to drag interactions on plot area', function(done) { + it('@flaky should respond to drag interactions on plot area', function(done) { var fig = Lib.extendDeep({}, require('@mocks/polar_scatter.json')); // to avoid dragging on hover labels