11class Gradient {
2- constructor ( gradients = '' , maxNum = 10 , colors = [ '' , '' ] , intervals = [ ] ) {
2+ constructor ( gradients = "" , maxNum = 10 , colors = [ "" , "" ] , intervals = [ ] ) {
3+ const setColors = ( props ) => {
4+ if ( props . length < 2 ) {
5+ throw new Error (
6+ `setGradient should have more than ${ props . length } color`
7+ ) ;
8+ } else {
9+ let increment = maxNum / ( props . length - 1 ) ;
10+ let firstGradient = new GradientColor ( ) ;
11+ let lower = 0 ;
12+ let upper = 0 + increment ;
13+ firstGradient . setGradient ( props [ 0 ] , props [ 1 ] ) ;
14+ firstGradient . setMidpoint ( lower , upper ) ;
15+ gradients = [ firstGradient ] ;
16+ intervals = [
17+ {
18+ lower,
19+ upper,
20+ } ,
21+ ] ;
322
4- const setColors = props => {
5- if ( props . length < 2 ) {
6- throw new Error ( `setGradient should have more than ${ props . length } color` ) ;
7- } else {
8- let increment = maxNum / ( props . length - 1 ) ;
9- let firstGradient = new GradientColor ( ) ;
10- let lower = 0 ;
11- let upper = 0 + increment ;
12- firstGradient . setGradient ( props [ 0 ] , props [ 1 ] ) ;
13- firstGradient . setMidpoint ( lower , upper ) ;
14- gradients = [ firstGradient ] ;
15- intervals = [ {
16- lower,
17- upper
18- } ] ;
19-
20- for ( let i = 1 ; i < props . length - 1 ; i ++ ) {
21- let gradientColor = new GradientColor ( ) ;
22- let lower = 0 + increment * i ;
23- let upper = 0 + increment * ( i + 1 ) ;
24- gradientColor . setGradient ( props [ i ] , props [ i + 1 ] ) ;
25- gradientColor . setMidpoint ( lower , upper ) ;
26- gradients [ i ] = gradientColor ;
27- intervals [ i ] = {
28- lower,
29- upper
30- } ;
31- }
32- colors = props ;
33- }
23+ for ( let i = 1 ; i < props . length - 1 ; i ++ ) {
24+ let gradientColor = new GradientColor ( ) ;
25+ let lower = 0 + increment * i ;
26+ let upper = 0 + increment * ( i + 1 ) ;
27+ gradientColor . setGradient ( props [ i ] , props [ i + 1 ] ) ;
28+ gradientColor . setMidpoint ( lower , upper ) ;
29+ gradients [ i ] = gradientColor ;
30+ intervals [ i ] = {
31+ lower,
32+ upper,
33+ } ;
3434 }
35+ colors = props ;
36+ }
37+ } ;
3538
36- this . setGradient = ( ...props ) => {
37- setColors ( props ) ;
38- return this ;
39- }
39+ this . setGradient = ( ...props ) => {
40+ setColors ( props ) ;
41+ return this ;
42+ } ;
4043
41- this . getArray = ( ) => {
42- let gradientArray = [ ] ;
43- for ( let j = 0 ; j < intervals . length ; j ++ ) {
44- const interval = intervals [ j ] ;
45- const start = interval . lower === 0 ? 1 : Math . ceil ( interval . lower ) ;
46- const end = interval . upper === maxNum ? interval . upper + 1 : Math . ceil ( interval . upper ) ;
47- for ( let i = start ; i < end ; i ++ ) {
48- gradientArray . push ( gradients [ j ] . getColor ( i ) )
49- }
50- }
51- return gradientArray ;
44+ this . getArray = ( ) => {
45+ let gradientArray = [ ] ;
46+ for ( let j = 0 ; j < intervals . length ; j ++ ) {
47+ const interval = intervals [ j ] ;
48+ const start = interval . lower === 0 ? 1 : Math . ceil ( interval . lower ) ;
49+ const end =
50+ interval . upper === maxNum
51+ ? interval . upper + 1
52+ : Math . ceil ( interval . upper ) ;
53+ for ( let i = start ; i < end ; i ++ ) {
54+ gradientArray . push ( gradients [ j ] . getColor ( i ) ) ;
5255 }
56+ }
57+ return gradientArray ;
58+ } ;
5359
54- this . getColor = props => {
55- if ( isNaN ( props ) ) {
56- throw new TypeError ( `getColor should be a number` ) ;
57- } else if ( props <= 0 ) {
58- throw new TypeError ( `getColor should be greater than ${ props } ` ) ;
59- } else {
60- let segment = ( maxNum - 0 ) / ( gradients . length ) ;
61- let index = Math . min ( Math . floor ( ( Math . max ( props , 0 ) - 0 ) / segment ) , gradients . length - 1 ) ;
62- return gradients [ index ] . getColor ( props ) ;
63- }
64- }
60+ this . getColor = ( props ) => {
61+ if ( isNaN ( props ) ) {
62+ throw new TypeError ( `getColor should be a number` ) ;
63+ } else if ( props <= 0 ) {
64+ throw new TypeError ( `getColor should be greater than ${ props } ` ) ;
65+ } else {
66+ let segment = ( maxNum - 0 ) / gradients . length ;
67+ let index = Math . min (
68+ Math . floor ( ( Math . max ( props , 0 ) - 0 ) / segment ) ,
69+ gradients . length - 1
70+ ) ;
71+ return gradients [ index ] . getColor ( props ) ;
72+ }
73+ } ;
6574
66- this . setMidpoint = ( maxNumber ) => {
67- if ( ! isNaN ( maxNumber ) && maxNumber >= 0 ) {
68- maxNum = maxNumber ;
69- setColors ( colors ) ;
70- } else if ( maxNumber <= 0 ) {
71- throw new RangeError ( `midPoint should be greater than ${ maxNumber } ` ) ;
72- } else {
73- throw new RangeError ( ' midPoint should be a number' ) ;
74- }
75- return this ;
76- }
77- }
75+ this . setMidpoint = ( maxNumber ) => {
76+ if ( ! isNaN ( maxNumber ) && maxNumber >= 0 ) {
77+ maxNum = maxNumber ;
78+ setColors ( colors ) ;
79+ } else if ( maxNumber <= 0 ) {
80+ throw new RangeError ( `midPoint should be greater than ${ maxNumber } ` ) ;
81+ } else {
82+ throw new RangeError ( " midPoint should be a number" ) ;
83+ }
84+ return this ;
85+ } ;
86+ }
7887}
7988
8089class GradientColor {
81- constructor ( startColor = '' , endColor = '' , minNum = 0 , maxNum = 10 ) {
82- this . setGradient = ( colorStart , colorEnd ) => {
83- startColor = getHexColor ( colorStart ) ;
84- endColor = getHexColor ( colorEnd ) ;
85- }
90+ constructor ( startColor = "" , endColor = "" , minNum = 0 , maxNum = 10 ) {
91+ this . setGradient = ( colorStart , colorEnd ) => {
92+ startColor = getHexColor ( colorStart ) ;
93+ endColor = getHexColor ( colorEnd ) ;
94+ } ;
8695
87- this . setMidpoint = ( minNumber , maxNumber ) => {
88- minNum = minNumber ;
89- maxNum = maxNumber ;
90- }
96+ this . setMidpoint = ( minNumber , maxNumber ) => {
97+ minNum = minNumber ;
98+ maxNum = maxNumber ;
99+ } ;
91100
92- this . getColor = props => {
93- if ( props ) {
94- return '#' + generateHex ( props , startColor . substring ( 0 , 2 ) , endColor . substring ( 0 , 2 ) ) +
95- generateHex ( props , startColor . substring ( 2 , 4 ) , endColor . substring ( 2 , 4 ) ) +
96- generateHex ( props , startColor . substring ( 4 , 6 ) , endColor . substring ( 4 , 6 ) ) ;
97- }
98- }
101+ this . getColor = ( props ) => {
102+ if ( props ) {
103+ return (
104+ "#" +
105+ generateHex (
106+ props ,
107+ startColor . substring ( 0 , 2 ) ,
108+ endColor . substring ( 0 , 2 )
109+ ) +
110+ generateHex (
111+ props ,
112+ startColor . substring ( 2 , 4 ) ,
113+ endColor . substring ( 2 , 4 )
114+ ) +
115+ generateHex (
116+ props ,
117+ startColor . substring ( 4 , 6 ) ,
118+ endColor . substring ( 4 , 6 )
119+ )
120+ ) ;
121+ }
122+ } ;
99123
100- const generateHex = ( number , start , end ) => {
101- if ( number < minNum ) {
102- number = minNum ;
103- } else if ( number > maxNum ) {
104- number = maxNum ;
105- }
124+ const generateHex = ( number , start , end ) => {
125+ if ( number < minNum ) {
126+ number = minNum ;
127+ } else if ( number > maxNum ) {
128+ number = maxNum ;
129+ }
106130
107- let midPoint = maxNum - minNum ;
108- let startBase = parseInt ( start , 16 ) ;
109- let endBase = parseInt ( end , 16 ) ;
110- let average = ( endBase - startBase ) / midPoint ;
111- let finalBase = Math . round ( average * ( number - minNum ) + startBase ) ;
112- let balancedFinalBase = finalBase < 16 ? "0" + finalBase . toString ( 16 ) : finalBase . toString ( 16 ) ;
113- return balancedFinalBase ;
114- }
131+ let midPoint = maxNum - minNum ;
132+ let startBase = parseInt ( start , 16 ) ;
133+ let endBase = parseInt ( end , 16 ) ;
134+ let average = ( endBase - startBase ) / midPoint ;
135+ let finalBase = Math . round ( average * ( number - minNum ) + startBase ) ;
136+ let balancedFinalBase =
137+ finalBase < 16 ? "0" + finalBase . toString ( 16 ) : finalBase . toString ( 16 ) ;
138+ return balancedFinalBase ;
139+ } ;
115140
116- const getHexColor = props => {
117- return props . substring ( props . length - 6 , props . length ) ;
118- }
119- }
141+ const getHexColor = ( props ) => {
142+ return props . substring ( props . length - 6 , props . length ) ;
143+ } ;
144+ }
120145}
121146
122- module . exports = Gradient ;
147+ const colorGradient = new Gradient ( ) ;
148+
149+ module . exports = colorGradient ;
0 commit comments