@gameroom/gameroom-kit
Version:
Node kit for the Gameroom API
31 lines (30 loc) • 1.2 kB
JavaScript
module.exports = class Color extends String {
constructor(data) {
if (!data) {
super(data);
return Color.random();
};
if (data instanceof Object && data.r >= 0 && data.r <= 255 && data.g >= 0 && data.g <= 255 && data.b >= 0 && data.b <= 255) {
data = `#${data.r.toString(16).padStart(2, 0)}${data.g.toString(16).padStart(2, 0)}${data.b.toString(16).padStart(2, 0)}`;
} else if (!data instanceof String || (data instanceof String && !data.startsWith('#')) || (data instanceof String && (data.length !== 7 && data.length !== 4))) {
throw new Error(`invalid Color data: ${data}`);
};
super(data);
};
static random() {
return new Color(`#${(Math.random()*(1<<24)|0).toString(16).padStart(6, 0)}`);
return new Color(`#${Math.floor(Math.random()*16777215).toString(16).padStart(6, 0)}`);
};
toRGB() {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(this);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
};
toRGBString() {
const object = this.toRGB();
return `rgb(${object.r}, ${object.g}, ${object.b})`;
};
};