@@ -24,16 +24,19 @@ var getBinSpanLabelRound = require('./bin_label_vals');
24
24
function calc ( gd , trace ) {
25
25
var pos = [ ] ;
26
26
var size = [ ] ;
27
- var pa = Axes . getFromId ( gd , trace . orientation === 'h' ? trace . yaxis : trace . xaxis ) ;
28
- var mainData = trace . orientation === 'h' ? 'y' : 'x' ;
27
+ var isHorizontal = trace . orientation === 'h' ;
28
+ var pa = Axes . getFromId ( gd , isHorizontal ? trace . yaxis : trace . xaxis ) ;
29
+ var mainData = isHorizontal ? 'y' : 'x' ;
29
30
var counterData = { x : 'y' , y : 'x' } [ mainData ] ;
30
31
var calendar = trace [ mainData + 'calendar' ] ;
32
+ var hasPeriod = trace [ mainData + 'periodalignment' ] ;
31
33
var cumulativeSpec = trace . cumulative ;
32
34
var i ;
33
35
34
36
var binsAndPos = calcAllAutoBins ( gd , trace , pa , mainData ) ;
35
37
var binSpec = binsAndPos [ 0 ] ;
36
38
var pos0 = binsAndPos [ 1 ] ;
39
+ var origPos = binsAndPos [ 2 ] ;
37
40
38
41
var nonuniformBins = typeof binSpec . size === 'string' ;
39
42
var binEdges = [ ] ;
@@ -186,13 +189,21 @@ function calc(gd, trace) {
186
189
b : 0
187
190
} ;
188
191
192
+ if ( hasPeriod ) {
193
+ cdi . orig_p = origPos [ i ] ;
194
+ }
195
+
189
196
// setup hover and event data fields,
190
197
// N.B. pts and "hover" positions ph0/ph1 don't seem to make much sense
191
198
// for cumulative distributions
192
199
if ( ! cumulativeSpec . enabled ) {
193
200
cdi . pts = inputPoints [ i ] ;
194
201
if ( uniqueValsPerBin ) {
195
- cdi . ph0 = cdi . ph1 = ( inputPoints [ i ] . length ) ? pos0 [ inputPoints [ i ] [ 0 ] ] : pos [ i ] ;
202
+ if ( hasPeriod ) {
203
+ cdi . ph0 = cdi . ph1 = cdi . pts . length ? origPos [ cdi . pts [ 0 ] ] : cdi . orig_p ;
204
+ } else {
205
+ cdi . ph0 = cdi . ph1 = cdi . pts . length ? pos0 [ cdi . pts [ 0 ] ] : cdi . p ;
206
+ }
196
207
} else {
197
208
// Defer evaluation of ph(0|1) in crossTraceCalc
198
209
trace . _computePh = true ;
@@ -234,7 +245,7 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
234
245
var groupName = trace [ '_' + mainData + 'bingroup' ] ;
235
246
var binOpts = fullLayout . _histogramBinOpts [ groupName ] ;
236
247
var isOverlay = fullLayout . barmode === 'overlay' ;
237
- var i , traces , tracei , calendar , pos0 , autoVals , cumulativeSpec ;
248
+ var i , traces , tracei , calendar , pos0 , origPos , autoVals , cumulativeSpec ;
238
249
239
250
var r2c = function ( v ) { return pa . r2c ( v , 0 , calendar ) ; } ;
240
251
var c2r = function ( v ) { return pa . c2r ( v , 0 , calendar ) ; } ;
@@ -273,8 +284,8 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
273
284
274
285
if ( tracei . visible ) {
275
286
var mainDatai = binOpts . dirs [ i ] ;
276
- pos0 = pa . makeCalcdata ( tracei , mainDatai ) ;
277
- pos0 = alignPeriod ( trace , pa , mainData , pos0 ) ;
287
+ origPos = pa . makeCalcdata ( tracei , mainDatai ) ;
288
+ pos0 = alignPeriod ( trace , pa , mainData , origPos ) ;
278
289
tracei [ '_' + mainDatai + 'pos0' ] = pos0 ;
279
290
280
291
allPos = Lib . concat ( allPos , pos0 ) ;
@@ -323,7 +334,7 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
323
334
// Several single-valued histograms! Stop infinite recursion,
324
335
// just return an extra flag that tells handleSingleValueOverlays
325
336
// to sort out this trace too
326
- if ( _overlayEdgeCase ) return [ newBinSpec , pos0 , true ] ;
337
+ if ( _overlayEdgeCase ) return [ newBinSpec , pos0 , origPos , true ] ;
327
338
328
339
newBinSpec = handleSingleValueOverlays ( gd , trace , pa , mainData , binAttr ) ;
329
340
}
@@ -410,7 +421,7 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
410
421
delete trace [ autoBinAttr ] ;
411
422
}
412
423
413
- return [ traceBinOptsCalc , pos0 ] ;
424
+ return [ traceBinOptsCalc , pos0 , origPos , false ] ;
414
425
}
415
426
416
427
/*
@@ -444,7 +455,7 @@ function handleSingleValueOverlays(gd, trace, pa, mainData, binAttr) {
444
455
} else {
445
456
var resulti = calcAllAutoBins ( gd , tracei , pa , mainData , true ) ;
446
457
var binSpeci = resulti [ 0 ] ;
447
- var isSingleValued = resulti [ 2 ] ;
458
+ var isSingleValued = resulti [ 3 ] ;
448
459
449
460
// so we can use this result when we get to tracei in the normal
450
461
// course of events, mark it as done and put _pos0 back
0 commit comments