Skip to content

Commit a17e221

Browse files
authored
Merge pull request #7 from Saspect-IO/feature/allow-color-gradient-capability-to-exceed-current-max-limit-2
add intervals array, to track upper/maxNum and lower/minNum for each …
2 parents 11c28a6 + 47144c1 commit a17e221

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/index.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
class Gradient {
2-
constructor(gradients = '', maxNum = 10, colors = ['', '']) {
2+
constructor(gradients = '', maxNum = 10, colors = ['', ''], intervals = []) {
33

44
const setColors = props => {
55
if (props.length < 2) {
66
throw new Error(`setGradient should have more than ${props.length} color`);
77
} else {
88
let increment = maxNum / (props.length - 1);
99
let firstGradient = new GradientColor();
10+
let lower = 0;
11+
let upper = 0 + increment;
1012
firstGradient.setGradient(props[0], props[1]);
11-
firstGradient.setMidpoint(0, 0 + increment);
13+
firstGradient.setMidpoint(lower, upper);
1214
gradients = [firstGradient];
15+
intervals = [{
16+
lower,
17+
upper
18+
}];
1319

1420
for (let i = 1; i < props.length - 1; i++) {
1521
let gradientColor = new GradientColor();
22+
let lower = 0 + increment * i;
23+
let upper = 0 + increment * (i + 1);
1624
gradientColor.setGradient(props[i], props[i + 1]);
17-
gradientColor.setMidpoint(0 + increment * i, 0 + increment * (i + 1));
25+
gradientColor.setMidpoint(lower, upper);
1826
gradients[i] = gradientColor;
27+
intervals[i] = {
28+
lower,
29+
upper
30+
};
1931
}
2032
colors = props;
2133
}
@@ -28,8 +40,13 @@ class Gradient {
2840

2941
this.getArray = () => {
3042
let gradientArray = [];
31-
for (let i = 1; i < maxNum + 1; i++) {
32-
gradientArray.push(gradients[0].getColor(i))
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+
}
3350
}
3451
return gradientArray;
3552
}
@@ -80,7 +97,6 @@ class GradientColor {
8097
}
8198
}
8299

83-
84100
const generateHex = (number, start, end) => {
85101
if (number < minNum) {
86102
number = minNum;
@@ -95,6 +111,7 @@ class GradientColor {
95111
let finalBase = Math.round(average * (number - minNum) + startBase);
96112
return (finalBase.toString(16));
97113
}
114+
98115
const getHexColor = props => {
99116
return props.substring(props.length - 6, props.length);
100117
}

0 commit comments

Comments
 (0)