You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
7 years ago
|
define(function () {
|
||
|
var padZero = function (str, len) {
|
||
|
len = len || 2;
|
||
|
var zeros = new Array(len).join('0');
|
||
|
return (zeros + str).slice(-len);
|
||
|
};
|
||
|
var invertColor = function (hex) {
|
||
|
if (hex.indexOf('#') === 0) {
|
||
|
hex = hex.slice(1);
|
||
|
}
|
||
|
// convert 3-digit hex to 6-digits.
|
||
|
if (hex.length === 3) {
|
||
|
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
||
|
}
|
||
|
if (hex.length !== 6) {
|
||
|
console.error(hex);
|
||
|
throw new Error('Invalid HEX color.');
|
||
|
}
|
||
|
// invert color components
|
||
|
var r = (255 - parseInt(hex.slice(0, 2), 16)).toString(16),
|
||
|
g = (255 - parseInt(hex.slice(2, 4), 16)).toString(16),
|
||
|
b = (255 - parseInt(hex.slice(4, 6), 16)).toString(16);
|
||
|
// pad each with zeros and return
|
||
|
return '#' + padZero(r) + padZero(g) + padZero(b);
|
||
|
};
|
||
|
var rgb2hex = function (rgb) {
|
||
|
if (rgb.indexOf('#') === 0) { return rgb; }
|
||
|
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
|
||
|
var hex = function (x) {
|
||
|
return ("0" + parseInt(x).toString(16)).slice(-2);
|
||
|
};
|
||
|
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
|
||
|
};
|
||
|
var hex2rgba = function (hex, opacity) {
|
||
|
if (hex.indexOf('#') === 0) {
|
||
|
hex = hex.slice(1);
|
||
|
}
|
||
|
if (hex.length === 3) {
|
||
|
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
||
|
}
|
||
|
if (!opacity) { opacity = 1; }
|
||
|
var r = parseInt(hex.slice(0,2), 16);
|
||
|
var g = parseInt(hex.slice(2,4), 16);
|
||
|
var b = parseInt(hex.slice(4,6), 16);
|
||
|
return 'rgba('+r+', '+g+', '+b+', '+opacity+')';
|
||
|
};
|
||
|
return {
|
||
|
invert: invertColor,
|
||
|
rgb2hex: rgb2hex,
|
||
|
hex2rgba: hex2rgba
|
||
|
};
|
||
|
});
|