-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
47 lines (38 loc) · 1001 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var hslToHex = require('tie-dye/hslToHex');
function hashbow(input, saturation, lightness) {
var inputAsString, sum;
saturation = saturation || 50;
lightness = lightness || 50;
var greyValues = [null, undefined, [], {}, '', new RegExp()];
if (greyValues.indexOf(input) != -1) {
return hslToHex(0, 0, lightness);
}
switch (input.constructor) {
case Function:
case RegExp:
inputAsString = input.toString();
break;
case Object:
case Array:
inputAsString = JSON.stringify(input);
break;
case Number:
sum = input;
break;
case Boolean:
return hslToHex(input ? 120 : 0, saturation, lightness);
break;
case String:
default:
inputAsString = input;
}
if (sum === undefined) {
sum = 0;
inputAsString.split('').forEach(function (letter) {
sum += letter.charCodeAt(0);
});
}
sum = Math.abs(sum * sum);
return hslToHex(sum % 360, saturation, lightness);
}
module.exports = hashbow;