1111var isNumeric = require ( 'fast-isnumeric' ) ;
1212
1313var Axes = require ( '../../plots/cartesian/axes' ) ;
14+ var alignPeriod = require ( '../../plots/cartesian/align_period' ) ;
1415var Lib = require ( '../../lib' ) ;
1516
1617var BADNUM = require ( '../../constants/numerical' ) . BADNUM ;
@@ -29,19 +30,24 @@ module.exports = function calc(gd, trace) {
2930 var valAxis , valLetter ;
3031 var posAxis , posLetter ;
3132
33+ var hasPeriod ;
3234 if ( trace . orientation === 'h' ) {
3335 valAxis = xa ;
3436 valLetter = 'x' ;
3537 posAxis = ya ;
3638 posLetter = 'y' ;
39+ hasPeriod = ! ! trace . yperiodalignment ;
3740 } else {
3841 valAxis = ya ;
3942 valLetter = 'y' ;
4043 posAxis = xa ;
4144 posLetter = 'x' ;
45+ hasPeriod = ! ! trace . xperiodalignment ;
4246 }
4347
44- var posArray = getPos ( trace , posLetter , posAxis , fullLayout [ numKey ] ) ;
48+ var allPosArrays = getPosArrays ( trace , posLetter , posAxis , fullLayout [ numKey ] ) ;
49+ var posArray = allPosArrays [ 0 ] ;
50+ var origPos = allPosArrays [ 1 ] ;
4551 var dv = Lib . distinctVals ( posArray ) ;
4652 var posDistinct = dv . vals ;
4753 var dPos = dv . minDiff / 2 ;
@@ -77,6 +83,9 @@ module.exports = function calc(gd, trace) {
7783
7884 cdi = { } ;
7985 cdi . pos = cdi [ posLetter ] = posi ;
86+ if ( hasPeriod && origPos ) {
87+ cdi . orig_p = origPos [ i ] ; // used by hover
88+ }
8089
8190 cdi . q1 = d2c ( 'q1' ) ;
8291 cdi . med = d2c ( 'median' ) ;
@@ -303,13 +312,15 @@ module.exports = function calc(gd, trace) {
303312// so if you want one box
304313// per trace, set x0 (y0) to the x (y) value or category for this trace
305314// (or set x (y) to a constant array matching y (x))
306- function getPos ( trace , posLetter , posAxis , num ) {
315+ function getPosArrays ( trace , posLetter , posAxis , num ) {
307316 var hasPosArray = posLetter in trace ;
308317 var hasPos0 = posLetter + '0' in trace ;
309318 var hasPosStep = 'd' + posLetter in trace ;
310319
311320 if ( hasPosArray || ( hasPos0 && hasPosStep ) ) {
312- return posAxis . makeCalcdata ( trace , posLetter ) ;
321+ var origPos = posAxis . makeCalcdata ( trace , posLetter ) ;
322+ var pos = alignPeriod ( trace , posAxis , posLetter , origPos ) ;
323+ return [ pos , origPos ] ;
313324 }
314325
315326 var pos0 ;
@@ -337,7 +348,7 @@ function getPos(trace, posLetter, posAxis, num) {
337348 var out = new Array ( len ) ;
338349 for ( var i = 0 ; i < len ; i ++ ) out [ i ] = pos0c ;
339350
340- return out ;
351+ return [ out ] ;
341352}
342353
343354function makeBins ( x , dx ) {
0 commit comments