@@ -20,31 +20,33 @@ function transformExpn(x) {
2020 return - Math . exp ( - x ) ;
2121}
2222
23- function pow10 ( x ) {
24- return isFinite ( x ) ? + ( "1e" + x ) : x < 0 ? 0 : x ;
23+ function pow10 ( x , k ) {
24+ return isFinite ( x ) ? + ( k + "e" + x ) : x < 0 ? 0 : x ;
25+ }
26+
27+ function exp ( x , k ) {
28+ return Math . exp ( x ) * k ;
2529}
2630
2731function powp ( base ) {
2832 return base === 10 ? pow10
29- : base === Math . E ? Math . exp
30- : function ( x ) { return Math . pow ( base , x ) ; } ;
33+ : base === Math . E ? exp
34+ : ( x , k ) => Math . pow ( base , x ) * k ;
3135}
3236
3337function logp ( base ) {
3438 return base === Math . E ? Math . log
3539 : base === 10 && Math . log10
3640 || base === 2 && Math . log2
37- || ( base = Math . log ( base ) , function ( x ) { return Math . log ( x ) / base ; } ) ;
41+ || ( base = Math . log ( base ) , ( x ) => Math . log ( x ) / base ) ;
3842}
3943
4044function reflect ( f ) {
41- return function ( x ) {
42- return - f ( - x ) ;
43- } ;
45+ return ( x , k ) => - f ( - x , k ) ;
4446}
4547
4648export function loggish ( transform ) {
47- var scale = transform ( transformLog , transformExp ) ,
49+ let scale = transform ( transformLog , transformExp ) ,
4850 domain = scale . domain ,
4951 base = 10 ,
5052 logs ,
@@ -69,17 +71,16 @@ export function loggish(transform) {
6971 return arguments . length ? ( domain ( _ ) , rescale ( ) ) : domain ( ) ;
7072 } ;
7173
72- scale . ticks = function ( count ) {
73- var d = domain ( ) ,
74+ scale . ticks = count => {
75+ let d = domain ( ) ,
7476 u = d [ 0 ] ,
7577 v = d [ d . length - 1 ] ,
76- r ;
78+ r = v < u ;
7779
78- if ( r = v < u ) i = u , u = v , v = i ;
80+ if ( r ) ( [ u , v ] = [ v , u ] ) ;
7981
80- var i = logs ( u ) ,
82+ let i = logs ( u ) ,
8183 j = logs ( v ) ,
82- p ,
8384 k ,
8485 t ,
8586 n = count == null ? 10 : + count ,
@@ -88,59 +89,54 @@ export function loggish(transform) {
8889 if ( ! ( base % 1 ) && j - i < n ) {
8990 i = Math . floor ( i ) , j = Math . ceil ( j ) ;
9091 if ( u > 0 ) for ( ; i <= j ; ++ i ) {
91- for ( k = 1 , p = pows ( i ) ; k < base ; ++ k ) {
92- t = p * k ;
92+ for ( k = 1 ; k < base ; ++ k ) {
93+ t = pows ( i , k ) ;
9394 if ( t < u ) continue ;
9495 if ( t > v ) break ;
9596 z . push ( t ) ;
9697 }
9798 } else for ( ; i <= j ; ++ i ) {
98- for ( k = base - 1 , p = pows ( i ) ; k >= 1 ; -- k ) {
99- t = p * k ;
99+ for ( k = base - 1 ; k >= 1 ; -- k ) {
100+ t = pows ( i , k ) ;
100101 if ( t < u ) continue ;
101102 if ( t > v ) break ;
102103 z . push ( t ) ;
103104 }
104105 }
105106 if ( z . length * 2 < n ) z = ticks ( u , v , n ) ;
106107 } else {
107- z = ticks ( i , j , Math . min ( j - i , n ) ) . map ( pows ) ;
108+ z = ticks ( i , j , Math . min ( j - i , n ) ) . map ( i => pows ( i , 1 ) ) ;
108109 }
109110
110111 return r ? z . reverse ( ) : z ;
111112 } ;
112113
113- scale . tickFormat = function ( count , specifier ) {
114+ scale . tickFormat = ( count , specifier ) => {
114115 if ( specifier == null ) specifier = base === 10 ? ".0e" : "," ;
115116 if ( typeof specifier !== "function" ) specifier = format ( specifier ) ;
116117 if ( count === Infinity ) return specifier ;
117118 if ( count == null ) count = 10 ;
118- var k = Math . max ( 1 , base * count / scale . ticks ( ) . length ) ; // TODO fast estimate?
119- return function ( d ) {
120- var i = d / pows ( Math . round ( logs ( d ) ) ) ;
119+ let k = Math . max ( 1 , base * count / scale . ticks ( ) . length ) ; // TODO fast estimate?
120+ return d => {
121+ let i = d / pows ( Math . round ( logs ( d ) ) , 1 ) ;
121122 if ( i * base < base - 0.5 ) i *= base ;
122123 return i <= k ? specifier ( d ) : "" ;
123124 } ;
124125 } ;
125126
126- scale . nice = function ( ) {
127+ scale . nice = ( ) => {
127128 return domain ( nice ( domain ( ) , {
128- floor : function ( x ) { return pows ( Math . floor ( logs ( x ) ) ) ; } ,
129- ceil : function ( x ) { return pows ( Math . ceil ( logs ( x ) ) ) ; }
129+ floor : x => pows ( Math . floor ( logs ( x ) ) , 1 ) ,
130+ ceil : x => pows ( Math . ceil ( logs ( x ) ) , 1 )
130131 } ) ) ;
131132 } ;
132133
133134 return scale ;
134135}
135136
136137export default function log ( ) {
137- var scale = loggish ( transformer ( ) ) . domain ( [ 1 , 10 ] ) ;
138-
139- scale . copy = function ( ) {
140- return copy ( scale , log ( ) ) . base ( scale . base ( ) ) ;
141- } ;
142-
138+ const scale = loggish ( transformer ( ) ) . domain ( [ 1 , 10 ] ) ;
139+ scale . copy = ( ) => copy ( scale , log ( ) ) . base ( scale . base ( ) ) ;
143140 initRange . apply ( scale , arguments ) ;
144-
145141 return scale ;
146142}
0 commit comments