@@ -723,70 +723,65 @@ module.exports = function setConvert(ax, fullLayout) {
723723
724724 if ( brk . enabled ) {
725725 if ( brk . bounds ) {
726+ var t0 = r0 ;
727+ var t1 = r1 ;
726728 if ( brk . pattern ) {
727- bnds = Lib . simpleMap ( brk . bounds , cleanNumber ) ;
728-
729- // r0 value as date
730- var r0Date = new Date ( r0 ) ;
731- // r0 value for break pattern
732- var r0Pattern ;
733- // delta between r0 and first break in break pattern values
734- var r0PatternDelta ;
735- // delta between break bounds in ms
736- var bndDelta ;
737- // step in ms between rangebreaks
738- var step ;
739- // tracker to position bounds
740- var t ;
741-
742- switch ( brk . pattern ) {
743- case WEEKDAY_PATTERN :
744- b0 = bnds [ 0 ] ;
745- b1 = bnds [ 1 ] ;
746- r0Pattern = r0Date . getUTCDay ( ) ;
747- r0PatternDelta = b0 - r0Pattern ;
748- bndDelta = ( b1 >= b0 ? b1 - b0 : ( b1 + 7 ) - b0 ) * ONEDAY ;
749- step = 7 * ONEDAY ;
750-
751- t = r0 + r0PatternDelta * ONEDAY -
752- r0Date . getUTCHours ( ) * ONEHOUR -
753- r0Date . getUTCMinutes ( ) * ONEMIN -
754- r0Date . getUTCSeconds ( ) * ONESEC -
755- r0Date . getUTCMilliseconds ( ) ;
756- break ;
757- case HOUR_PATTERN :
758- b0 = bnds [ 0 ] ;
759- b1 = bnds [ 1 ] ;
760- r0Pattern = r0Date . getUTCHours ( ) ;
761- r0PatternDelta = b0 - r0Pattern ;
762- bndDelta = ( b1 >= b0 ? b1 - b0 : ( b1 + 24 ) - b0 ) * ONEHOUR ;
763- step = ONEDAY ;
764-
765- t = r0 + r0PatternDelta * ONEHOUR -
766- r0Date . getUTCMinutes ( ) * ONEMIN -
767- r0Date . getUTCSeconds ( ) * ONESEC -
768- r0Date . getUTCMilliseconds ( ) ;
769- break ;
770- }
729+ // to remove decimal (most often found in auto ranges)
730+ t0 = Math . floor ( t0 ) ;
731+ }
771732
772- while ( t <= r1 ) {
773- // TODO we need to remove decimal (most often found
774- // in auto ranges) for this to work correctly,
775- // should this be Math.floor, Math.ceil or
776- // Math.round ??
777- addBreak ( Math . floor ( t ) , Math . floor ( t + bndDelta ) ) ;
778- t += step ;
779- }
780- } else {
781- bnds = Lib . simpleMap ( brk . bounds , ax . r2l ) ;
782- if ( bnds [ 0 ] <= bnds [ 1 ] ) {
783- b0 = bnds [ 0 ] ;
784- b1 = bnds [ 1 ] ;
785- } else {
786- b0 = bnds [ 1 ] ;
787- b1 = bnds [ 0 ] ;
788- }
789- addBreak ( b0 , b1 ) ;
733+ bnds = Lib . simpleMap ( brk . bounds , brk . pattern ? cleanNumber : ax . r2l ) ;
734+ b0 = bnds [ 0 ] ;
735+ b1 = bnds [ 1 ] ;
736+
737+ // r0 value as date
738+ var t0Date = new Date ( t0 ) ;
739+ // r0 value for break pattern
740+ var bndDelta ;
741+ // step in ms between rangebreaks
742+ var step ;
743+
744+ switch ( brk . pattern ) {
745+ case WEEKDAY_PATTERN :
746+ step = 7 * ONEDAY ;
747+
748+ bndDelta = (
749+ ( b1 < b0 ? 7 : 0 ) +
750+ ( b1 - b0 )
751+ ) * ONEDAY ;
752+
753+ t0 += b0 * ONEDAY - (
754+ t0Date . getUTCDay ( ) * ONEDAY +
755+ t0Date . getUTCHours ( ) * ONEHOUR +
756+ t0Date . getUTCMinutes ( ) * ONEMIN +
757+ t0Date . getUTCSeconds ( ) * ONESEC +
758+ t0Date . getUTCMilliseconds ( )
759+ ) ;
760+ break ;
761+ case HOUR_PATTERN :
762+ step = ONEDAY ;
763+
764+ bndDelta = (
765+ ( b1 < b0 ? 24 : 0 ) +
766+ ( b1 - b0 )
767+ ) * ONEHOUR ;
768+
769+ t0 += b0 * ONEHOUR - (
770+ t0Date . getUTCHours ( ) * ONEHOUR +
771+ t0Date . getUTCMinutes ( ) * ONEMIN +
772+ t0Date . getUTCSeconds ( ) * ONESEC +
773+ t0Date . getUTCMilliseconds ( )
774+ ) ;
775+ break ;
776+ default :
777+ t0 = Math . min ( bnds [ 0 ] , bnds [ 1 ] ) ;
778+ t1 = Math . max ( bnds [ 0 ] , bnds [ 1 ] ) ;
779+ step = t1 - t0 ;
780+ bndDelta = step ;
781+ }
782+
783+ for ( var t = t0 ; t < t1 ; t += step ) {
784+ addBreak ( t , t + bndDelta ) ;
790785 }
791786 } else {
792787 var vals = Lib . simpleMap ( brk . values , ax . d2c ) ;
0 commit comments