@@ -19,38 +19,36 @@ export function linearish(scale) {
19
19
scale . nice = function ( count ) {
20
20
if ( count == null ) count = 10 ;
21
21
22
- var d = domain ( ) ,
23
- i0 = 0 ,
24
- i1 = d . length - 1 ,
25
- start = d [ i0 ] ,
26
- stop = d [ i1 ] ,
27
- step ;
22
+ var d = domain ( ) ;
23
+ var i0 = 0 ;
24
+ var i1 = d . length - 1 ;
25
+ var start = d [ i0 ] ;
26
+ var stop = d [ i1 ] ;
27
+ var prestep ;
28
+ var step ;
29
+ var maxIter = 10 ;
28
30
29
31
if ( stop < start ) {
30
32
step = start , start = stop , stop = step ;
31
33
step = i0 , i0 = i1 , i1 = step ;
32
34
}
33
-
34
- step = tickIncrement ( start , stop , count ) ;
35
-
36
- if ( step > 0 ) {
37
- start = Math . floor ( start / step ) * step ;
38
- stop = Math . ceil ( stop / step ) * step ;
35
+
36
+ while ( maxIter -- > 0 ) {
39
37
step = tickIncrement ( start , stop , count ) ;
40
- } else if ( step < 0 ) {
41
- start = Math . ceil ( start * step ) / step ;
42
- stop = Math . floor ( stop * step ) / step ;
43
- step = tickIncrement ( start , stop , count ) ;
44
- }
45
-
46
- if ( step > 0 ) {
47
- d [ i0 ] = Math . floor ( start / step ) * step ;
48
- d [ i1 ] = Math . ceil ( stop / step ) * step ;
49
- domain ( d ) ;
50
- } else if ( step < 0 ) {
51
- d [ i0 ] = Math . ceil ( start * step ) / step ;
52
- d [ i1 ] = Math . floor ( stop * step ) / step ;
53
- domain ( d ) ;
38
+ if ( step === prestep ) {
39
+ d [ i0 ] = start
40
+ d [ i1 ] = stop
41
+ return domain ( d ) ;
42
+ } else if ( step > 0 ) {
43
+ start = Math . floor ( start / step ) * step ;
44
+ stop = Math . ceil ( stop / step ) * step ;
45
+ } else if ( step < 0 ) {
46
+ start = Math . ceil ( start * step ) / step ;
47
+ stop = Math . floor ( stop * step ) / step ;
48
+ } else {
49
+ break ;
50
+ }
51
+ prestep = step ;
54
52
}
55
53
56
54
return scale ;
0 commit comments