Name lookup optimizationa

pull/29/head
peterd 9 years ago
parent 6945e8d04a
commit 9b4a3d7a8c

6
color.all.min.js vendored

File diff suppressed because one or more lines are too long

@ -55,6 +55,8 @@
_options = {}, _options = {},
_nodes = {}, _nodes = {},
_math = Math,
animationFrame = 'AnimationFrame', // we also need this later animationFrame = 'AnimationFrame', // we also need this later
requestAnimationFrame = 'request' + animationFrame, requestAnimationFrame = 'request' + animationFrame,
cancelAnimationFrame = 'cancel' + animationFrame, cancelAnimationFrame = 'cancel' + animationFrame,
@ -331,7 +333,7 @@
// replace('"Courier New",', !_isIE ? '' : '"Courier New",'). // replace('"Courier New",', !_isIE ? '' : '"Courier New",').
replace(/opacity:(\d*\.*(\d+))/g, function($1, $2){ replace(/opacity:(\d*\.*(\d+))/g, function($1, $2){
return !_doesOpacity ? '-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=' + return !_doesOpacity ? '-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
Math.round(+$2 * 100) + ')";filter: alpha(opacity=' + Math.round(+$2 * 100) + ')' : _math.round(+$2 * 100) + ')";filter: alpha(opacity=' + _math.round(+$2 * 100) + ')' :
'-moz-opacity: ' + $2 + '; -khtml-opacity: ' + $2 + '; opacity: ' + $2; '-moz-opacity: ' + $2 + '; -khtml-opacity: ' + $2 + '; opacity: ' + $2;
}); });
// style.appendChild(document.createTextNode(_data._cssFunc)); // style.appendChild(document.createTextNode(_data._cssFunc));
@ -603,7 +605,7 @@
page = getPageXY(event); page = getPageXY(event);
_newData = true; _newData = true;
_colors.alpha = limitValue(Math.round( _colors.alpha = limitValue(_math.round(
(page.X - _targetOrigin.left) / _targetOrigin.width * 100), 0, 100 (page.X - _targetOrigin.left) / _targetOrigin.width * 100), 0, 100
) / 100; ) / 100;
convertColors('alpha'); convertColors('alpha');
@ -619,7 +621,7 @@
isAlpha = type === 'alpha', isAlpha = type === 'alpha',
ranges; ranges;
if (_delayState || Math.abs(delta) >= delayOffset) { if (_delayState || _math.abs(delta) >= delayOffset) {
if (!_delayState) { if (!_delayState) {
_delayState = (delta > 0 ? -delayOffset : delayOffset) + _delayState = (delta > 0 ? -delayOffset : delayOffset) +
(+_mainTarget.firstChild.data) * (isAlpha ? 100 : 1); (+_mainTarget.firstChild.data) * (isAlpha ? 100 : 1);
@ -679,7 +681,7 @@
elm.blur(); elm.blur();
} else if (event.type === 'keydown') { // functional keys } else if (event.type === 'keydown') { // functional keys
if (arrowKey) { // arrow/page keys if (arrowKey) { // arrow/page keys
value = limitValue(Math.round((+origValue + arrowKey) * 1e+6) / 1e+6, valueRange[0], valueRange[1]); value = limitValue(_math.round((+origValue + arrowKey) * 1e+6) / 1e+6, valueRange[0], valueRange[1]);
} else if (/^(?:8|46)$/.test(keyCode)) { // DELETE / BACKSPACE } else if (/^(?:8|46)$/.test(keyCode)) { // DELETE / BACKSPACE
if (!rangeData.range) { if (!rangeData.range) {
rangeData.range++; rangeData.range++;
@ -732,7 +734,7 @@
stopChange(e, event.type); stopChange(e, event.type);
textNode.data = value; // if textNode.data = value; // if
caret(elm, Math.min(elm.firstChild.data.length, rangeData.start < 0 ? 0 : rangeData.start)); caret(elm, _math.min(elm.firstChild.data.length, rangeData.start < 0 ? 0 : rangeData.start));
} }
} }
@ -780,9 +782,9 @@
alphaBG === 'c' ? 'b' : 'w'))); alphaBG === 'c' ? 'b' : 'w')));
target.firstChild.data = alphaBG.toUpperCase(); target.firstChild.data = alphaBG.toUpperCase();
_nodes.ctrl.style.backgroundColor = _nodes.memo.style.backgroundColor = _nodes.ctrl.style.backgroundColor = _nodes.memo.style.backgroundColor =
alphaBG !== 'c' ? '' : 'rgb(' + Math.round(customBG.r * 255) + ', ' + alphaBG !== 'c' ? '' : 'rgb(' + _math.round(customBG.r * 255) + ', ' +
Math.round(customBG.g * 255) + ', ' + _math.round(customBG.g * 255) + ', ' +
Math.round(customBG.b * 255) + ')'; _math.round(customBG.b * 255) + ')';
_nodes.raster.style.cssText = _nodes.raster_bg.previousSibling.style.cssText = _nodes.raster.style.cssText = _nodes.raster_bg.previousSibling.style.cssText =
alphaBG !== 'c' ? '' : getOpacityCSS(customBG.luminance < 0.22 ? 0.5 : 0.4); alphaBG !== 'c' ? '' : getOpacityCSS(customBG.luminance < 0.22 ? 0.5 : 0.4);
buttonAction = 'alphaBackground'; buttonAction = 'alphaBackground';
@ -1013,12 +1015,13 @@
} }
function preRenderAll(colors) { function preRenderAll(colors) {
var renderVars = _renderVars, var _Math = _math,
renderVars = _renderVars,
bgType = _bgTypes[_options.alphaBG]; bgType = _bgTypes[_options.alphaBG];
renderVars.hueDelta = Math.round(colors['rgbaMixBGMix' + bgType].hueDelta * 100); renderVars.hueDelta = _Math.round(colors['rgbaMixBGMix' + bgType].hueDelta * 100);
// renderVars.RGBLuminanceDelta = Math.round(colors.RGBLuminanceDelta * 100); // renderVars.RGBLuminanceDelta = _Math.round(colors.RGBLuminanceDelta * 100);
renderVars.luminanceDelta = Math.round(colors['rgbaMixBGMix' + bgType].luminanceDelta * 100); renderVars.luminanceDelta = _Math.round(colors['rgbaMixBGMix' + bgType].luminanceDelta * 100);
renderVars.RGBLuminance = colors.RGBLuminance > 0.22 ? 'light' : 'dark'; renderVars.RGBLuminance = colors.RGBLuminance > 0.22 ? 'light' : 'dark';
renderVars.HUEContrast = colors.HUELuminance > 0.22 ? 'light' : 'dark'; renderVars.HUEContrast = colors.HUELuminance > 0.22 ? 'light' : 'dark';
// renderVars.contrast = renderVars.RGBLuminanceDelta > renderVars.hueDelta ? 'contrast' : ''; // renderVars.contrast = renderVars.RGBLuminanceDelta > renderVars.hueDelta ? 'contrast' : '';
@ -1051,15 +1054,19 @@
renderVars = _renderVars, renderVars = _renderVars,
cashedVars = _cashedVars, cashedVars = _cashedVars,
_Math = _math,
_getOpacityCSS = getOpacityCSS,
_color2string = color2string,
a = 0, a = 0,
b = 0, b = 0,
x = colors[mode.type][mode.x], x = colors[mode.type][mode.x],
X = Math.round(x * 255 / (scale === 4 ? 2 : scale)), X = _Math.round(x * 255 / (scale === 4 ? 2 : scale)),
y_ = colors[mode.type][mode.y], y_ = colors[mode.type][mode.y],
y = 1 - y_, y = 1 - y_,
Y = Math.round(y * 255 / scale), Y = _Math.round(y * 255 / scale),
z = 1 - colors[mode.type][mode.z], z = 1 - colors[mode.type][mode.z],
Z = Math.round(z * 255 / scale), Z = _Math.round(z * 255 / scale),
coords = (1 === 1) ? [x, y_] : [0, 0], // (1 === 2) button label up coords = (1 === 1) ? [x, y_] : [0, 0], // (1 === 2) button label up
isRGB = mode.type === 'rgb', isRGB = mode.type === 'rgb',
@ -1079,11 +1086,11 @@
} }
if ((isRGB && !moveZ) || (isHue && !moveXY) || (!isHue && !moveZ)) { if ((isRGB && !moveZ) || (isHue && !moveXY) || (!isHue && !moveZ)) {
CSS[isHue ? 'sldl_2' : 'sldr_2'][isRGB ? 'cssText' : 'backgroundColor'] = CSS[isHue ? 'sldl_2' : 'sldr_2'][isRGB ? 'cssText' : 'backgroundColor'] =
isRGB ? getOpacityCSS((coords[a] - coords[b]) / (1 - (coords[b]) || 0)) : color2string(colors.hueRGB); isRGB ? _getOpacityCSS((coords[a] - coords[b]) / (1 - (coords[b]) || 0)) : _color2string(colors.hueRGB);
} }
if (!isHue) { if (!isHue) {
if (!moveZ) CSS.sldr_4.cssText = getOpacityCSS(isRGB ? coords[b] : isHSL_S ? Math.abs(1 - y * 2) : y); if (!moveZ) CSS.sldr_4.cssText = _getOpacityCSS(isRGB ? coords[b] : isHSL_S ? _Math.abs(1 - y * 2) : y);
if (!moveXY) CSS.sldl_3.cssText = getOpacityCSS(isHSL && mode.z === 'l' ? Math.abs(1 - z * 2) : z); if (!moveXY) CSS.sldl_3.cssText = _getOpacityCSS(isHSL && mode.z === 'l' ? _Math.abs(1 - z * 2) : z);
if (isHSL) { // switch slider class name for black/white color half way through in HSL(S|L) mode(s) if (isHSL) { // switch slider class name for black/white color half way through in HSL(S|L) mode(s)
slider = isHSL_S ? 'sldr_4' : 'sldl_3'; slider = isHSL_S ? 'sldr_4' : 'sldl_3';
tmp = isHSL_S ? 'r-' : 'l-'; tmp = isHSL_S ? 'r-' : 'l-';
@ -1106,9 +1113,9 @@
(colors.alpha * 100) + '%'; (colors.alpha * 100) + '%';
} }
CSS.col1.cssText = 'background-color: ' + color2string(colors.RND.rgb) + '; ' + CSS.col1.cssText = 'background-color: ' + _color2string(colors.RND.rgb) + '; ' +
(options.muteAlpha ? '' : getOpacityCSS(colors.alpha)); (options.muteAlpha ? '' : _getOpacityCSS(colors.alpha));
CSS.opacity.backgroundColor = color2string(colors.RND.rgb); CSS.opacity.backgroundColor = _color2string(colors.RND.rgb);
CSS.cold.width = renderVars.hueDelta + '%'; CSS.cold.width = renderVars.hueDelta + '%';
CSS.cont.width = renderVars.luminanceDelta + '%'; CSS.cont.width = renderVars.luminanceDelta + '%';
@ -1128,7 +1135,7 @@
value = (value - valueRanges[tmp[0]][tmp[1]][0]) / value = (value - valueRanges[tmp[0]][tmp[1]][0]) /
(valueRanges[tmp[0]][tmp[1]][1] - valueRanges[tmp[0]][tmp[1]][0]); (valueRanges[tmp[0]][tmp[1]][1] - valueRanges[tmp[0]][tmp[1]][0]);
} }
CSS[display].backgroundPosition = Math.round((1 - value) * 100) + '% 0%'; CSS[display].backgroundPosition = _Math.round((1 - value) * 100) + '% 0%';
} }
} }
} }
@ -1241,11 +1248,11 @@
if (value === undefined) value = 1; if (value === undefined) value = 1;
if (_doesOpacity) { if (_doesOpacity) {
return 'opacity: ' + (Math.round(value * 10000000000) / 10000000000) + ';'; // value.toFixed(16) = 99% slower return 'opacity: ' + (_math.round(value * 10000000000) / 10000000000) + ';'; // value.toFixed(16) = 99% slower
// some speed test: // some speed test:
// return ['opacity: ', (Math.round(value * 1e+10) / 1e+10), ';'].join(''); // return ['opacity: ', (Math.round(value * 1e+10) / 1e+10), ';'].join('');
} else { } else {
return 'filter: alpha(opacity=' + Math.round(value * 100) + ');'; return 'filter: alpha(opacity=' + _math.round(value * 100) + ');';
} }
} }
@ -1277,9 +1284,11 @@
} }
function getPageXY(e) { function getPageXY(e) {
var doc = window.document;
return { return {
X: e.pageX || e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft, X: e.pageX || e.clientX + doc.body.scrollLeft + doc.documentElement.scrollLeft,
Y: e.pageY || e.clientY + document.body.scrollTop + document.documentElement.scrollTop Y: e.pageY || e.clientY + doc.body.scrollTop + doc.documentElement.scrollTop
}; };
} }

File diff suppressed because one or more lines are too long

@ -28,6 +28,9 @@
grey = {r: 0.298954, g: 0.586434, b: 0.114612}, // CIE-XYZ 1931 grey = {r: 0.298954, g: 0.586434, b: 0.114612}, // CIE-XYZ 1931
luminance = {r: 0.2126, g: 0.7152, b: 0.0722}, // W3C 2.0 luminance = {r: 0.2126, g: 0.7152, b: 0.0722}, // W3C 2.0
_math = Math,
_parseint = parseInt,
Colors = window.Colors = function(options) { Colors = window.Colors = function(options) {
this.colors = {RND: {}}; this.colors = {RND: {}};
this.options = { this.options = {
@ -126,7 +129,7 @@
for (var n in color) { // faster (but bigger) way: if/else outside 2 for loops for (var n in color) { // faster (but bigger) way: if/else outside 2 for loops
result[n] = reverse ? result[n] = reverse ?
Math.round(color[n] * (Lab || ranges[type][n][1])) : _math.round(color[n] * (Lab || ranges[type][n][1])) :
color[n] / (Lab || ranges[type][n][1]); color[n] / (Lab || ranges[type][n][1]);
} }
@ -181,7 +184,7 @@
color.rgb = {r: rgb.r, g: rgb.g, b: rgb.b}; color.rgb = {r: rgb.r, g: rgb.g, b: rgb.b};
color.alpha = alpha; color.alpha = alpha;
// color.RGBLuminance = getLuminance(RGB); // color.RGBLuminance = getLuminance(RGB);
color.equivalentGrey = Math.round(grey.r * RGB.r + grey.g * RGB.g + grey.b * RGB.b); color.equivalentGrey = _math.round(grey.r * RGB.r + grey.g * RGB.g + grey.b * RGB.b);
color.rgbaMixBlack = mixColors(rgb, {r: 0, g: 0, b: 0}, alpha, 1); color.rgbaMixBlack = mixColors(rgb, {r: 0, g: 0, b: 0}, alpha, 1);
color.rgbaMixWhite = mixColors(rgb, {r: 1, g: 1, b: 1}, alpha, 1); color.rgbaMixWhite = mixColors(rgb, {r: 1, g: 1, b: 1}, alpha, 1);
@ -199,7 +202,8 @@
function convertColors(type, colorObj) { function convertColors(type, colorObj) {
// console.time('convertColors'); // console.time('convertColors');
var colors = colorObj || _colors, var _Math = _math,
colors = colorObj || _colors,
convert = ColorConverter, convert = ColorConverter,
options = _instance.options, options = _instance.options,
ranges = _valueRanges, ranges = _valueRanges,
@ -220,7 +224,7 @@
if (!RND[typ]) RND[typ] = {}; if (!RND[typ]) RND[typ] = {};
modes = colors[typ]; modes = colors[typ];
for(mode in modes) { for(mode in modes) {
RND[typ][mode] = Math.round(modes[mode] * (typ === 'Lab' ? 1 : ranges[typ][mode][1])); RND[typ][mode] = _Math.round(modes[mode] * (typ === 'Lab' ? 1 : ranges[typ][mode][1]));
} }
} }
} }
@ -241,7 +245,7 @@
colors.saveColor = colors.saveColor =
RGB.r === SAVE.r && RGB.g === SAVE.g && RGB.b === SAVE.b ? 'web save' : RGB.r === SAVE.r && RGB.g === SAVE.g && RGB.b === SAVE.b ? 'web save' :
RGB.r === SMART.r && RGB.g === SMART.g && RGB.b === SMART.b ? 'web smart' : ''; RGB.r === SMART.r && RGB.g === SMART.g && RGB.b === SMART.b ? 'web smart' : '';
colors.hueRGB = ColorConverter.hue2RGB(colors.hsv.h); colors.hueRGB = convert.hue2RGB(colors.hsv.h);
if (colorObj) { if (colorObj) {
colors.background = saveAsBackground(RGB, colors.rgb, colors.alpha); colors.background = saveAsBackground(RGB, colors.rgb, colors.alpha);
@ -253,69 +257,73 @@
luminance = 'luminance', luminance = 'luminance',
background = colors.background, background = colors.background,
rgbaMixBlack, rgbaMixWhite, rgbaMixCustom, rgbaMixBlack, rgbaMixWhite, rgbaMixCustom,
rgbaMixBG, rgbaMixBGMixBlack, rgbaMixBGMixWhite, rgbaMixBGMixCustom; rgbaMixBG, rgbaMixBGMixBlack, rgbaMixBGMixWhite, rgbaMixBGMixCustom,
_mixColors = mixColors,
rgbaMixBlack = mixColors(rgb, {r: 0, g: 0, b: 0}, alpha, 1); _getLuminance = getLuminance,
rgbaMixBlack[luminance] = getLuminance(rgbaMixBlack, true); _getWCAG2Ratio = getWCAG2Ratio,
_getHueDelta = getHueDelta;
rgbaMixBlack = _mixColors(rgb, {r: 0, g: 0, b: 0}, alpha, 1);
rgbaMixBlack[luminance] = _getLuminance(rgbaMixBlack, true);
colors.rgbaMixBlack = rgbaMixBlack; colors.rgbaMixBlack = rgbaMixBlack;
rgbaMixWhite = mixColors(rgb, {r: 1, g: 1, b: 1}, alpha, 1); rgbaMixWhite = _mixColors(rgb, {r: 1, g: 1, b: 1}, alpha, 1);
rgbaMixWhite[luminance] = getLuminance(rgbaMixWhite, true); rgbaMixWhite[luminance] = _getLuminance(rgbaMixWhite, true);
colors.rgbaMixWhite = rgbaMixWhite; colors.rgbaMixWhite = rgbaMixWhite;
if (options.allMixDetails) { if (options.allMixDetails) {
rgbaMixBlack.WCAG2Ratio = getWCAG2Ratio(rgbaMixBlack[luminance], 0); rgbaMixBlack.WCAG2Ratio = _getWCAG2Ratio(rgbaMixBlack[luminance], 0);
rgbaMixWhite.WCAG2Ratio = getWCAG2Ratio(rgbaMixWhite[luminance], 1); rgbaMixWhite.WCAG2Ratio = _getWCAG2Ratio(rgbaMixWhite[luminance], 1);
if (options.customBG) { if (options.customBG) {
rgbaMixCustom = mixColors(rgb, options.customBG, alpha, 1); rgbaMixCustom = _mixColors(rgb, options.customBG, alpha, 1);
rgbaMixCustom[luminance] = getLuminance(rgbaMixCustom, true); rgbaMixCustom[luminance] = _getLuminance(rgbaMixCustom, true);
rgbaMixCustom.WCAG2Ratio = getWCAG2Ratio(rgbaMixCustom[luminance], options.customBG[luminance]); rgbaMixCustom.WCAG2Ratio = _getWCAG2Ratio(rgbaMixCustom[luminance], options.customBG[luminance]);
colors.rgbaMixCustom = rgbaMixCustom; colors.rgbaMixCustom = rgbaMixCustom;
} }
rgbaMixBG = mixColors(rgb, background.rgb, alpha, background.alpha); rgbaMixBG = _mixColors(rgb, background.rgb, alpha, background.alpha);
rgbaMixBG[luminance] = getLuminance(rgbaMixBG, true); // ?? do we need this? rgbaMixBG[luminance] = _getLuminance(rgbaMixBG, true); // ?? do we need this?
colors.rgbaMixBG = rgbaMixBG; colors.rgbaMixBG = rgbaMixBG;
rgbaMixBGMixBlack = mixColors(rgb, background.rgbaMixBlack, alpha, 1); rgbaMixBGMixBlack = _mixColors(rgb, background.rgbaMixBlack, alpha, 1);
rgbaMixBGMixBlack[luminance] = getLuminance(rgbaMixBGMixBlack, true); rgbaMixBGMixBlack[luminance] = _getLuminance(rgbaMixBGMixBlack, true);
rgbaMixBGMixBlack.WCAG2Ratio = getWCAG2Ratio(rgbaMixBGMixBlack[luminance], rgbaMixBGMixBlack.WCAG2Ratio = _getWCAG2Ratio(rgbaMixBGMixBlack[luminance],
background.rgbaMixBlack[luminance]); background.rgbaMixBlack[luminance]);
/* ------ */ /* ------ */
rgbaMixBGMixBlack.luminanceDelta = Math.abs( rgbaMixBGMixBlack.luminanceDelta = _Math.abs(
rgbaMixBGMixBlack[luminance] - background.rgbaMixBlack[luminance]); rgbaMixBGMixBlack[luminance] - background.rgbaMixBlack[luminance]);
rgbaMixBGMixBlack.hueDelta = getHueDelta(background.rgbaMixBlack, rgbaMixBGMixBlack, true); rgbaMixBGMixBlack.hueDelta = _getHueDelta(background.rgbaMixBlack, rgbaMixBGMixBlack, true);
/* ------ */ /* ------ */
colors.rgbaMixBGMixBlack = rgbaMixBGMixBlack; colors.rgbaMixBGMixBlack = rgbaMixBGMixBlack;
rgbaMixBGMixWhite = mixColors(rgb, background.rgbaMixWhite, alpha, 1); rgbaMixBGMixWhite = _mixColors(rgb, background.rgbaMixWhite, alpha, 1);
rgbaMixBGMixWhite[luminance] = getLuminance(rgbaMixBGMixWhite, true); rgbaMixBGMixWhite[luminance] = _getLuminance(rgbaMixBGMixWhite, true);
rgbaMixBGMixWhite.WCAG2Ratio = getWCAG2Ratio(rgbaMixBGMixWhite[luminance], rgbaMixBGMixWhite.WCAG2Ratio = _getWCAG2Ratio(rgbaMixBGMixWhite[luminance],
background.rgbaMixWhite[luminance]); background.rgbaMixWhite[luminance]);
/* ------ */ /* ------ */
rgbaMixBGMixWhite.luminanceDelta = Math.abs( rgbaMixBGMixWhite.luminanceDelta = _Math.abs(
rgbaMixBGMixWhite[luminance] - background.rgbaMixWhite[luminance]); rgbaMixBGMixWhite[luminance] - background.rgbaMixWhite[luminance]);
rgbaMixBGMixWhite.hueDelta = getHueDelta(background.rgbaMixWhite, rgbaMixBGMixWhite, true); rgbaMixBGMixWhite.hueDelta = _getHueDelta(background.rgbaMixWhite, rgbaMixBGMixWhite, true);
/* ------ */ /* ------ */
colors.rgbaMixBGMixWhite = rgbaMixBGMixWhite; colors.rgbaMixBGMixWhite = rgbaMixBGMixWhite;
} }
if (options.customBG) { if (options.customBG) {
rgbaMixBGMixCustom = mixColors(rgb, background.rgbaMixCustom, alpha, 1); rgbaMixBGMixCustom = _mixColors(rgb, background.rgbaMixCustom, alpha, 1);
rgbaMixBGMixCustom[luminance] = getLuminance(rgbaMixBGMixCustom, true); rgbaMixBGMixCustom[luminance] = _getLuminance(rgbaMixBGMixCustom, true);
rgbaMixBGMixCustom.WCAG2Ratio = getWCAG2Ratio(rgbaMixBGMixCustom[luminance], rgbaMixBGMixCustom.WCAG2Ratio = _getWCAG2Ratio(rgbaMixBGMixCustom[luminance],
background.rgbaMixCustom[luminance]); background.rgbaMixCustom[luminance]);
colors.rgbaMixBGMixCustom = rgbaMixBGMixCustom; colors.rgbaMixBGMixCustom = rgbaMixBGMixCustom;
/* ------ */ /* ------ */
rgbaMixBGMixCustom.luminanceDelta = Math.abs( rgbaMixBGMixCustom.luminanceDelta = _Math.abs(
rgbaMixBGMixCustom[luminance] - background.rgbaMixCustom[luminance]); rgbaMixBGMixCustom[luminance] - background.rgbaMixCustom[luminance]);
rgbaMixBGMixCustom.hueDelta = getHueDelta(background.rgbaMixCustom, rgbaMixBGMixCustom, true); rgbaMixBGMixCustom.hueDelta = _getHueDelta(background.rgbaMixCustom, rgbaMixBGMixCustom, true);
/* ------ */ /* ------ */
} }
colors.RGBLuminance = getLuminance(RGB); colors.RGBLuminance = _getLuminance(RGB);
colors.HUELuminance = getLuminance(colors.hueRGB); colors.HUELuminance = _getLuminance(colors.hueRGB);
// renderVars.readyToRender = true; // renderVars.readyToRender = true;
if (options.convertCallback) { if (options.convertCallback) {
@ -365,30 +373,34 @@
}, },
HEX2rgb: function(HEX) { HEX2rgb: function(HEX) {
var _parseInt = _parseint;
HEX = HEX.split(''); // IE7 HEX = HEX.split(''); // IE7
return { return {
r: parseInt(HEX[0] + HEX[HEX[3] ? 1 : 0], 16) / 255, r: _parseInt(HEX[0] + HEX[HEX[3] ? 1 : 0], 16) / 255,
g: parseInt(HEX[HEX[3] ? 2 : 1] + (HEX[3] || HEX[1]), 16) / 255, g: _parseInt(HEX[HEX[3] ? 2 : 1] + (HEX[3] || HEX[1]), 16) / 255,
b: parseInt((HEX[4] || HEX[2]) + (HEX[5] || HEX[2]), 16) / 255 b: _parseInt((HEX[4] || HEX[2]) + (HEX[5] || HEX[2]), 16) / 255
}; };
}, },
hue2RGB: function(hue) { hue2RGB: function(hue) {
var h = hue * 6, var _Math = _math,
h = hue * 6,
mod = ~~h % 6, // Math.floor(h) -> faster in most browsers mod = ~~h % 6, // Math.floor(h) -> faster in most browsers
i = h === 6 ? 0 : (h - mod); i = h === 6 ? 0 : (h - mod);
return { return {
r: Math.round([1, 1 - i, 0, 0, i, 1][mod] * 255), r: _Math.round([1, 1 - i, 0, 0, i, 1][mod] * 255),
g: Math.round([i, 1, 1, 1 - i, 0, 0][mod] * 255), g: _Math.round([i, 1, 1, 1 - i, 0, 0][mod] * 255),
b: Math.round([0, 0, i, 1, 1, 1 - i][mod] * 255) b: _Math.round([0, 0, i, 1, 1, 1 - i][mod] * 255)
}; };
}, },
// ------------------------ HSV ------------------------ // // ------------------------ HSV ------------------------ //
rgb2hsv: function(rgb) { // faster rgb2hsv: function(rgb) { // faster
var r = rgb.r, var _Math = _math,
r = rgb.r,
g = rgb.g, g = rgb.g,
b = rgb.b, b = rgb.b,
k = 0, chroma, min, s; k = 0, chroma, min, s;
@ -401,13 +413,13 @@
if (r < g) { if (r < g) {
r = g + (g = r, 0); r = g + (g = r, 0);
k = -2 / 6 - k; k = -2 / 6 - k;
min = Math.min(g, b); // g < b ? g : b; ??? min = _Math.min(g, b); // g < b ? g : b; ???
} }
chroma = r - min; chroma = r - min;
s = r ? (chroma / r) : 0; s = r ? (chroma / r) : 0;
return { return {
h: s < 1e-15 ? ((_colors && _colors.hsl && _colors.hsl.h) || 0) : h: s < 1e-15 ? ((_colors && _colors.hsl && _colors.hsl.h) || 0) :
chroma ? Math.abs(k + (g - b) / (6 * chroma)) : 0, chroma ? _Math.abs(k + (g - b) / (6 * chroma)) : 0,
s: r ? (chroma / r) : ((_colors && _colors.hsv && _colors.hsv.s) || 0), // ??_colors.hsv.s || 0 s: r ? (chroma / r) : ((_colors && _colors.hsv && _colors.hsv.s) || 0), // ??_colors.hsv.s || 0
v: r v: r
}; };
@ -491,7 +503,8 @@
}, },
cmy2cmyk: function(cmy) { cmy2cmyk: function(cmy) {
var k = Math.min(Math.min(cmy.c, cmy.m), cmy.y), var _Math = _math,
k = _Math.min(_Math.min(cmy.c, cmy.m), cmy.y),
t = 1 - k || 1e-20; t = 1 - k || 1e-20;
return { // regular return { // regular
@ -535,7 +548,8 @@
// ------------------------ LAB ------------------------ // // ------------------------ LAB ------------------------ //
XYZ2rgb: function(XYZ, skip) { XYZ2rgb: function(XYZ, skip) {
var M = _instance.options.XYZMatrix, var _Math = _math,
M = _instance.options.XYZMatrix,
X = XYZ.X, X = XYZ.X,
Y = XYZ.Y, Y = XYZ.Y,
Z = XYZ.Z, Z = XYZ.Z,
@ -546,9 +560,9 @@
M = 0.0031308; M = 0.0031308;
r = (r > M ? 1.055 * Math.pow(r, N) - 0.055 : 12.92 * r); r = (r > M ? 1.055 * _Math.pow(r, N) - 0.055 : 12.92 * r);
g = (g > M ? 1.055 * Math.pow(g, N) - 0.055 : 12.92 * g); g = (g > M ? 1.055 * _Math.pow(g, N) - 0.055 : 12.92 * g);
b = (b > M ? 1.055 * Math.pow(b, N) - 0.055 : 12.92 * b); b = (b > M ? 1.055 * _Math.pow(b, N) - 0.055 : 12.92 * b);
if (!skip) { // out of gammut if (!skip) { // out of gammut
_colors._rgb = {r: r, g: g, b: b}; _colors._rgb = {r: r, g: g, b: b};
@ -562,15 +576,16 @@
}, },
rgb2XYZ: function(rgb) { rgb2XYZ: function(rgb) {
var M = _instance.options.XYZMatrix, var _Math = _math,
M = _instance.options.XYZMatrix,
r = rgb.r, r = rgb.r,
g = rgb.g, g = rgb.g,
b = rgb.b, b = rgb.b,
N = 0.04045; N = 0.04045;
r = (r > N ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92); r = (r > N ? _Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92);
g = (g > N ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92); g = (g > N ? _Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92);
b = (b > N ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92); b = (b > N ? _Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92);
return { return {
X: r * M.X[0] + g * M.X[1] + b * M.X[2], X: r * M.X[0] + g * M.X[1] + b * M.X[2],
@ -580,15 +595,16 @@
}, },
XYZ2Lab: function(XYZ) { XYZ2Lab: function(XYZ) {
var R = _instance.options.XYZReference, var _Math = _math,
R = _instance.options.XYZReference,
X = XYZ.X / R.X, X = XYZ.X / R.X,
Y = XYZ.Y / R.Y, Y = XYZ.Y / R.Y,
Z = XYZ.Z / R.Z, Z = XYZ.Z / R.Z,
N = 16 / 116, M = 1 / 3, K = 0.008856, L = 7.787037; N = 16 / 116, M = 1 / 3, K = 0.008856, L = 7.787037;
X = X > K ? Math.pow(X, M) : (L * X) + N; X = X > K ? _Math.pow(X, M) : (L * X) + N;
Y = Y > K ? Math.pow(Y, M) : (L * Y) + N; Y = Y > K ? _Math.pow(Y, M) : (L * Y) + N;
Z = Z > K ? Math.pow(Z, M) : (L * Z) + N; Z = Z > K ? _Math.pow(Z, M) : (L * Z) + N;
return { return {
L: (116 * Y) - 16, L: (116 * Y) - 16,
@ -598,13 +614,14 @@
}, },
Lab2XYZ: function(Lab) { Lab2XYZ: function(Lab) {
var R = _instance.options.XYZReference, var _Math = _math,
R = _instance.options.XYZReference,
Y = (Lab.L + 16) / 116, Y = (Lab.L + 16) / 116,
X = Lab.a / 500 + Y, X = Lab.a / 500 + Y,
Z = Y - Lab.b / 200, Z = Y - Lab.b / 200,
X3 = Math.pow(X, 3), X3 = _Math.pow(X, 3),
Y3 = Math.pow(Y, 3), Y3 = _Math.pow(Y, 3),
Z3 = Math.pow(Z, 3), Z3 = _Math.pow(Z, 3),
N = 16 / 116, K = 0.008856, L = 7.787037; N = 16 / 116, K = 0.008856, L = 7.787037;
return { return {
@ -644,9 +661,11 @@
} }
function getHueDelta(rgb1, rgb2, nominal) { function getHueDelta(rgb1, rgb2, nominal) {
return (Math.max(rgb1.r - rgb2.r, rgb2.r - rgb1.r) + var _Math = _math;
Math.max(rgb1.g - rgb2.g, rgb2.g - rgb1.g) +
Math.max(rgb1.b - rgb2.b, rgb2.b - rgb1.b)) * (nominal ? 255 : 1) / 765; return (_Math.max(rgb1.r - rgb2.r, rgb2.r - rgb1.r) +
_Math.max(rgb1.g - rgb2.g, rgb2.g - rgb1.g) +
_Math.max(rgb1.b - rgb2.b, rgb2.b - rgb1.b)) * (nominal ? 255 : 1) / 765;
} }
function getLuminance(rgb, normalized) { function getLuminance(rgb, normalized) {
@ -655,7 +674,7 @@
luminance = _instance.options.luminance; luminance = _instance.options.luminance;
for (var i = RGB.length; i--; ) { for (var i = RGB.length; i--; ) {
RGB[i] = RGB[i] <= 0.03928 ? RGB[i] / 12.92 : Math.pow(((RGB[i] + 0.055) / 1.055), 2.4); RGB[i] = RGB[i] <= 0.03928 ? RGB[i] / 12.92 : _math.pow(((RGB[i] + 0.055) / 1.055), 2.4);
} }
return ((luminance.r * RGB[0]) + (luminance.g * RGB[1]) + (luminance.b * RGB[2])); return ((luminance.r * RGB[0]) + (luminance.g * RGB[1]) + (luminance.b * RGB[2]));
} }
@ -681,7 +700,7 @@
} else { } else {
ratio = (lum2 + 0.05) / (lum1 + 0.05); ratio = (lum2 + 0.05) / (lum1 + 0.05);
} }
return Math.round(ratio * 100) / 100; return _math.round(ratio * 100) / 100;
} }
function limitValue(value, min, max) { function limitValue(value, min, max) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save