Team:StanfordBrownSpelman/jquery.colorscript

From 2014.igem.org

/**!

* @preserve Color animation 1.6.0
* http://www.bitstorm.org/jquery/color-animation/
* Copyright 2011, 2013 Edwin Martin <edwin@bitstorm.org>
* Released under the MIT and GPL licenses.
*/

(function($) { /** * Check whether the browser supports RGBA color mode. * * Author Mehdi Kabab <http://pioupioum.fr> * @return {boolean} True if the browser support RGBA. False otherwise. */ function isRGBACapable() { var $script = $('script:first'), color = $script.css('color'), result = false; if (/^rgba/.test(color)) { result = true; } else { try { result = ( color != $script.css('color', 'rgba(0, 0, 0, 0.5)').css('color') ); $script.css('color', color); } catch (e) { } }

return result; }

$.extend(true, $, { support: { 'rgba': isRGBACapable() } });

var properties = ['color', 'backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'outlineColor']; $.each(properties, function(i, property) { $.Tween.propHooks[ property ] = { get: function(tween) { return $(tween.elem).css(property); }, set: function(tween) { var style = tween.elem.style; var p_begin = parseColor($(tween.elem).css(property)); var p_end = parseColor(tween.end); tween.run = function(progress) { style[property] = calculateColor(p_begin, p_end, progress); } } } });

// borderColor doesn't fit in standard fx.step above. $.Tween.propHooks.borderColor = { set: function(tween) { var style = tween.elem.style; var p_begin = []; var borders = properties.slice(2, 6); // All four border properties $.each(borders, function(i, property) { p_begin[property] = parseColor($(tween.elem).css(property)); }); var p_end = parseColor(tween.end); tween.run = function(progress) { $.each(borders, function(i, property) { style[property] = calculateColor(p_begin[property], p_end, progress); }); } } }

// Calculate an in-between color. Returns "#aabbcc"-like string. function calculateColor(begin, end, pos) { var color = 'rgb' + ($.support['rgba'] ? 'a' : ) + '(' + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ',' + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ',' + parseInt((begin[2] + pos * (end[2] - begin[2])), 10); if ($.support['rgba']) { color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1); } color += ')'; return color; }

// Parse an CSS-syntax color. Outputs an array [r, g, b] function parseColor(color) { var match, quadruplet;

// Match #aabbcc if (match = /#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(color)) { quadruplet = [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16), 1];

// Match #abc } else if (match = /#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(color)) { quadruplet = [parseInt(match[1], 16) * 17, parseInt(match[2], 16) * 17, parseInt(match[3], 16) * 17, 1];

// Match rgb(n, n, n) } else if (match = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) { quadruplet = [parseInt(match[1]), parseInt(match[2]), parseInt(match[3]), 1];

} else if (match = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]*)\s*\)/.exec(color)) { quadruplet = [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10),parseFloat(match[4])];

// No browser returns rgb(n%, n%, n%), so little reason to support this format. } else { quadruplet = colors[color]; } return quadruplet; }

// Some named colors to work with, added by Bradley Ayers // From Interface by Stefan Petre // http://interface.eyecon.ro/ var colors = { 'aqua': [0,255,255,1], 'azure': [240,255,255,1], 'beige': [245,245,220,1], 'black': [0,0,0,1], 'blue': [0,0,255,1], 'brown': [165,42,42,1], 'cyan': [0,255,255,1], 'darkblue': [0,0,139,1], 'darkcyan': [0,139,139,1], 'darkgrey': [169,169,169,1], 'darkgreen': [0,100,0,1], 'darkkhaki': [189,183,107,1], 'darkmagenta': [139,0,139,1], 'darkolivegreen': [85,107,47,1], 'darkorange': [255,140,0,1], 'darkorchid': [153,50,204,1], 'darkred': [139,0,0,1], 'darksalmon': [233,150,122,1], 'darkviolet': [148,0,211,1], 'fuchsia': [255,0,255,1], 'gold': [255,215,0,1], 'green': [0,128,0,1], 'indigo': [75,0,130,1], 'khaki': [240,230,140,1], 'lightblue': [173,216,230,1], 'lightcyan': [224,255,255,1], 'lightgreen': [144,238,144,1], 'lightgrey': [211,211,211,1], 'lightpink': [255,182,193,1], 'lightyellow': [255,255,224,1], 'lime': [0,255,0,1], 'magenta': [255,0,255,1], 'maroon': [128,0,0,1], 'navy': [0,0,128,1], 'olive': [128,128,0,1], 'orange': [255,165,0,1], 'pink': [255,192,203,1], 'purple': [128,0,128,1], 'violet': [128,0,128,1], 'red': [255,0,0,1], 'silver': [192,192,192,1], 'white': [255,255,255,1], 'yellow': [255,255,0,1], 'transparent': [255,255,255,0] }; })(jQuery);