random-material-color
Version:
Generate a Random Color from Google Material UI palette
79 lines (62 loc) • 2.33 kB
JavaScript
var murmur = require("murmurhash-js");
module.exports = function() {
/* usedColors = [{ text:SomeText, color: SomeColor }] */
var usedColors = [],
defaultOptions = {
shades: ['500'],
palette: defaultPalette,
text: null,
ignoreColors: []
},
getColor = function (options) {
options || (options = defaultOptions);
options.palette || (options.palette = defaultPalette);
options.shades || (options.shades = ['500']);
var l = usedColors.length,
color;
for (var i = 0; i < l; i++) {
if (options.text && usedColors[i].text === options.text) {
return usedColors[i].color;
}
}
color = pickColor(options);
if (options.text) {
usedColors.push({text: options.text, color: color});
}
return color;
},
pickColor = function (options) {
var shade = '';
var color = '';
if (options.text) {
shade = options.shades[getHashedInt(options.text, options.shades.length)];
}
else {
shade = options.shades[getRandomInt(options.shades.length)];
}
for (var key in options.palette) {
if (options.palette.hasOwnProperty(key) && key === shade) {
if (options.text) {
color = options.palette[key][getHashedInt(options.text, options.palette[key].length)];
}
else {
color = options.palette[key][getRandomInt(options.palette[key].length)];
}
}
}
return color;
},
getRandomInt = function (max) {
return Math.floor(Math.random() * (max));
},
getHashedInt = function (text, max) {
var hash = murmur.murmur3(text) / 10000000000; // Turn it into a fraction
if (hash < 0.1) {
hash = hash * 10;
}
return Math.floor(hash * (max));
};
return {
getColor: getColor
};
}();