color-to-vec4
Version:
:white_square_button: a color (rgb, rgba, hex) to vec4 convertor
104 lines (75 loc) • 2.61 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.colorToVec4 = factory());
}(this, (function () { 'use strict';
var mapChannel = (function (channel) {
return channel / 255;
});
var normalize = (function (min, max, value) {
if (value < min) return min;else if (value > max) return max;else return value;
});
var rgbToVec4 = (function (color) {
var alpha = false;
if (color.startsWith('rgba(')) alpha = true;else if (color.startsWith('rgb(')) alpha = false;
var split = alpha ? 'rgba(' : 'rgb(';
var channels = color.split(split)[1].split(')')[0].split(',');
if (channels.length < 3 || channels.length > 4) {
throw new Error(color + ' is not a valid rgb(a) color');
}
channels = channels.map(function (c) {
return parseFloat(c);
}).map(function (c) {
return normalize(0, 255, c);
});
var _channels = channels,
r = _channels[0],
g = _channels[1],
b = _channels[2],
_channels$ = _channels[3],
a = _channels$ === undefined ? 1 : _channels$;
var aa = normalize(0, 1, a);
var rgb = [r, g, b].map(mapChannel);
return [].concat(rgb, [aa]);
});
var hexToRgb = (function (hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
result = result.slice(1, 4);
result = result.map(function (r) {
return parseInt(r, 16);
});
var _result = result,
r = _result[0],
g = _result[1],
b = _result[2];
var a = 1;
return { r: r, g: g, b: b, a: a };
});
var hexToVec4 = (function (color) {
var isValid = /^#[0-9A-F]{6}$/i.test(color);
if (!isValid) {
throw new Error(color + ' is not a valid hex color');
}
var colorObj = hexToRgb(color);
var r = colorObj.r,
g = colorObj.g,
b = colorObj.b;
var colors = [r, g, b];
return [].concat(colors.map(function (c) {
return mapChannel(c);
}), [1]);
});
var index = (function (color) {
if (typeof color === 'string') {
if (color.startsWith('rgba')) return rgbToVec4(color);else if (color.startsWith('rgb')) return rgbToVec4(color);else if (color.startsWith('#')) return hexToVec4(color);else throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4');
} else if (Array.isArray(color)) {
if (color.length !== 4) {
throw new Error('[' + color + '] is not a valid vec4');
}
return color;
} else {
throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4');
}
});
return index;
})));