ucsc-xena-client
Version:
UCSC Xena Client. Functional genomics visualizations.
163 lines (144 loc) • 4.66 kB
JavaScript
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _ = require('./underscore_ext');
//http://www.javascripter.net/faq/hextorgb.htm
var cutHex = function cutHex(h) {
return h.charAt(0) === "#" ? h.substring(1, 7) : h;
};
var hexToR = function hexToR(h) {
return parseInt(cutHex(h).substring(0, 2), 16);
};
var hexToG = function hexToG(h) {
return parseInt(cutHex(h).substring(2, 4), 16);
};
var hexToB = function hexToB(h) {
return parseInt(cutHex(h).substring(4, 6), 16);
};
var hexToRGB = function hexToRGB(hex) {
var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var c = {},
r = hexToR(hex),
g = hexToG(hex),
b = hexToB(hex);
c.r = r;
c.g = g;
c.b = b;
c.a = a;
return c;
};
function componentToHex(c) {
var hex = c.toString(16);
return hex.length === 1 ? "0" + hex : hex;
};
function RGBToHex(r, g, b) {
return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
};
var colorStr = function colorStr(c) {
return 'rgba(' + c.r + ', ' + c.g + ', ' + c.b + ', ' + c.a.toString() + ')';
};
var greyHEX = "#808080";
var lightgreyHEX = "#dcdcdc";
function standardizeColor(str) {
var ctx = document.createElement('canvas').getContext('2d');
ctx.fillStyle = str;
var c = hexToRGB(ctx.fillStyle);
return [c.r, c.g, c.b];
}
function rgb(color) {
if (_.isArray(color)) {
return color;
}
if (!color) {
return color;
}
if (color.indexOf('rgb') === 0) {
// rgb[a]
return _.map(color.replace(/^rgba?\(([^)]*)\)/, "$1").split(/ *, */).slice(0, 3), function (n) {
return parseInt(n, 10);
});
} else if (color.indexOf('#') === 0) {
// hex
return [parseInt(color.substring(1, 3), 16), parseInt(color.substring(3, 5), 16), parseInt(color.substring(5, 7), 16)];
}
return standardizeColor(color);
}
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
var luminance = function luminance(_ref) {
var _ref2 = _slicedToArray(_ref, 3),
R = _ref2[0],
G = _ref2[1],
B = _ref2[2];
return 0.299 * R + 0.587 * G + 0.114 * B;
};
var contrastColor = function contrastColor(color) {
var lumi = luminance(rgb(color)),
brighter = _.min([Math.round(lumi + 190), 221]);
return lumi < 128 ? RGBToHex(brighter, brighter, brighter) : 'black';
};
function HSVtoRGB(h, s, v) {
var r, g, b, i, f, p, q, t;
if (arguments.length === 1) {
s = h.s, v = h.v, h = h.h;
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0:
r = v, g = t, b = p;break;
case 1:
r = q, g = v, b = p;break;
case 2:
r = p, g = v, b = t;break;
case 3:
r = p, g = q, b = v;break;
case 4:
r = t, g = p, b = v;break;
case 5:
r = v, g = p, b = q;break;
}
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
}
function RGBtoHSV(r, g, b) {
if (arguments.length === 1) {
g = r.g, b = r.b, r = r.r;
}
var max = Math.max(r, g, b),
min = Math.min(r, g, b),
d = max - min,
h,
s = max === 0 ? 0 : d / max,
v = max / 255;
switch (max) {
case min:
h = 0;break;
case r:
h = g - b + d * (g < b ? 6 : 0);h /= 6 * d;break;
case g:
h = b - r + d * 2;h /= 6 * d;break;
case b:
h = r - g + d * 4;h /= 6 * d;break;
}
return {
h: h,
s: s,
v: v
};
}
module.exports = {
hexToRGB: hexToRGB,
RGBToHex: RGBToHex,
colorStr: colorStr,
greyHEX: greyHEX,
lightgreyHEX: lightgreyHEX,
contrastColor: contrastColor,
rgb: rgb,
HSVtoRGB: HSVtoRGB,
RGBtoHSV: RGBtoHSV
};
;