Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1383 lines (1088 sloc)
28.1 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode chara silicone and tpe cters.
Learn more about bidirectional Unicode characters
/** | |
* @license jQuery paging plugin v1. virtual pc sex 8.0 06/21/2010 | |
* http://www.xarg.org/project/jquery-color-plugin-xcolor/ | |
* | |
* Copyright (c) 2010, Ro dolls manufacturers china bert Eisele ([email protected] real dolls usa ) | |
* Dual licensed under the MIT or GPL Version 2 licenses. | |
**/ | |
// ([^a-z."/])m([^a-z:"]) | |
(function ($, undefined) { | |
// http://www.w3.org/TR/css3-color/#svg-color | |
var color_names = { | |
"aliceblue": "f0f8ff", | |
"antiquewhite": "faebd7", | |
"aqua": "0ff", | |
"aquamarine": "7fffd4", | |
"azure": "f0ffff", | |
"beige": "f5f5dc", | |
"bisque": "ffe4c4", | |
"black": "000", | |
"blanchedalmond": "ffebcd", | |
"blue": "00f", | |
"blueviolet": "8a2be2", | |
"brown": "a52a2a", | |
"burlywood": "deb887", | |
"burntsienna": "ea7e5d", | |
"cadetblue": "5f9ea0", | |
"chartreuse": "7fff00", | |
"chocolate": "d2691e", | |
"coral": "ff7f50", | |
"cornflowerblue pictures of male blow up dolls ": "6495ed", | |
"cornsilk": "fff8dc", | |
"crimson": "dc143c", | |
"cyan": "0ff", | |
"darkblue": "00008b", | |
"darkcyan": "008b8b", | |
"darkgoldenrod": "b8860b", | |
"darkgray": "a9a9a9", | |
"darkgreen": "006400", | |
"darkgrey": "a9a9a9", | |
"darkkhaki": "bdb76b", | |
"darkmagenta": "8b008b", | |
"darkolivegreen": "556b2f", | |
"darkorange": "ff8c00", | |
"darkorchid": "9932cc", | |
"darkred": "8b0000", | |
"darksalmon": "e9967a", | |
"darkseagreen": "8fbc8f", | |
"darkslateblue": "483d8b", | |
"darkslategray": "2f4f4f", | |
"darkslategrey": "2f4f4f", | |
"darkturquoise": "00ced1", | |
"darkviolet": "9400d3", | |
"deeppink": "ff1493", | |
"deepskyblue": "00bfff", | |
"dimgray": "696969", | |
"dimgrey": "696969", | |
"dodgerblue": "1e90ff", | |
"firebrick": "b22222", | |
"floralwhite": "fffaf0", | |
"forestgreen": "228b22", | |
"fuchsia": "f0f", | |
"gainsboro": "dcdcdc", | |
"ghostwhite": "f8f8ff", | |
"gold": "ffd700", | |
"goldenrod": "daa520", | |
"gray": "808080", | |
"green": "008000", | |
"greenyellow": "adff2f", | |
"grey": "808080", | |
"honeydew": "f0fff0", | |
"hotpink": "ff69b4", | |
"indianred": "cd5c5c", | |
"indigo": "4b0082", | |
"ivory": "fffff0", | |
"khaki": "f0e68c", | |
"lavender": "e6e6fa", | |
"lavenderblush": "fff0f5", | |
"lawngreen": "7cfc00", | |
"lemonchiffon": "fffacd", | |
"lightblue": "add8e6", | |
"lightcoral": "f08080", | |
"lightcyan": "e0ffff", | |
"lightgoldenrodyellow&qu my real love doll ot;: "fafad2", | |
"lightgray": "d3d3d3", | |
"lightgreen": "90ee90", | |
"lightgrey": "d3d3d3", | |
"lightpink": "ffb6c1", | |
"lightsalmon": "ffa07a", | |
"lightseagreen": "20b2aa", | |
"lightskyblue": "87cefa", | |
"lightslategray": "789", | |
"lightslategrey": "789", | |
"lightsteelblue" ultra realistic love doll ;: "b0c4de", | |
"lightyellow": "ffffe0", | |
"lime": "0f0", | |
"limegreen": "32cd32", | |
"linen": "faf0e6", | |
"magenta": "f0f", | |
"maroon": "800000", | |
"mediumaquamarine" real teen dolls : "66cdaa", | |
"mediumblue": "0000cd", | |
"mediumorchid": "ba55d3", | |
"mediumpurple": "9370db", | |
"mediumseagreen": "3cb371", | |
"mediumslateblue": "7b68ee", | |
"mediumspringgreen": "00fa9a", | |
"mediumturquoise": "48d1cc", | |
"mediumvioletred": "c71585", | |
"midnightblue": "191970", | |
"mintcream": "f5fffa", | |
"mistyrose": "ffe4e1", | |
"moccasin": "ffe4b5", | |
"navajowhite": "ffdead", | |
"navy": "000080", | |
"oldlace": "fdf5e6", | |
"olive": "808000", | |
"olivedrab": "6b8e23", | |
"orange": "ffa500", | |
"orangered": "ff4500", | |
"orchid": "da70d6", | |
"palegoldenrod": "eee8aa", | |
"palegreen": "98fb98", | |
"paleturquoise": "afeeee", | |
"palevioletred": "db7093", | |
"papayawhip": "ffefd5", | |
"peachpuff": "ffdab9", | |
"peru": "cd853f", | |
"pink": "ffc0cb", | |
"plum": "dda0dd", | |
"powderblue": "b0e0e6", | |
"purple": "800080", | |
"red": "f00", | |
"rosybrown": "bc8f8f", | |
"royalblue": "4169e1", | |
"saddlebrown": "8b4513", | |
"salmon": "fa8072", | |
"sandybrown": "f4a460", | |
"seagreen": "2e8b57", | |
"seashell": "fff5ee", | |
"sienna": "a0522d", | |
"silver": "c0c0c0", | |
"skyblue": "87ceeb", | |
"slateblue": "6a5acd", | |
"slategray": "708090", | |
"slategrey": "708090", | |
"snow": "fffafa", | |
"springgreen": "00ff7f", | |
"steelblue": "4682b4", | |
"tan": "d2b48c", | |
"teal": "008080", | |
"thistle": "d8bfd8", | |
"tomato": "ff6347", | |
"turquoise": "40e0d0", | |
"violet": "ee82ee", | |
"wheat": "f5deb3", | |
"white": "fff", | |
"whitesmoke": "f5f5f5", | |
"yellow": "ff0", | |
"yellowgreen&qu dolls blonde ot;: "9acd32" | |
}, _RGBAtoCSS; | |
/** | |
* @constructor | |
*/ | |
function xColor(color) { | |
/** | |
* normalize function | |
* @param {(number|string)=} n (optional) | |
* @param {(number|string)=} s (optional) | |
*/ | |
function _normalize(n, s) { | |
var m; | |
if (undefined !== n) { | |
n = parseFloat(n); | |
} | |
if (undefined === s) { | |
s = 255; | |
m = 255; | |
} else if (1 === s) { | |
if (undefined === n || 1 === n) { | |
return 1; | |
} | |
s = 100; | |
m = 1; | |
} else { | |
m = s; | |
} | |
if (isNaN(n) || n <= 0) { | |
return 0; | |
} | |
if (s < n) { | |
return m; | |
} | |
if (n < 1 || 1 === s) { | |
if (1 === m) { | |
return n; | |
} else { | |
return (n * m) | 0; | |
} | |
} | |
return n * m / s; | |
} | |
function _hsl(h,s,l) { | |
h = _normalize(h, 360) / 360; | |
s = _normalize(s, 1); | |
l = _normalize(l, 1); | |
if (0 === s) { | |
l = Math.round(255 * l); | |
return [l, l, l]; | |
} | |
function _hue(v1, v2, h) { | |
h = ++h % 1; | |
if (6 * h < 1) return v1 + (v2 - v1) * 6 * h; | |
if (2 * h < 1) return v2; | |
if (3 * h < 2) return v1 + (v2 - v1) * (4 - 6 * h); | |
return v1; | |
} | |
var v = l < .5 ? (l + l * s) : (l + s - l * s); | |
var m = l + l - v; | |
return [ | |
Math.round(255 *_hue(m, v, h + 1 / 3)), | |
Math.round(255 *_hue(m, v, h)), | |
Math.round(255 *_hue(m, v, h - 1 / 3)) ]; | |
} | |
function _hsv(h,s,v) { | |
h = _normalize(h, 360) / 60; | |
s = _normalize(s, 1); | |
v = _normalize(v, 1); | |
var hi = h|0; | |
var f = h - hi; | |
var p = Math.round(255 * v * (1 - s)); | |
var q = Math.round(255 * v * (1 - s * f)); | |
var t = Math.round(255 * v * (1 - s * (1 - f))); | |
v = Math.round(255 * v); | |
switch(hi) { | |
case 1: | |
return [q, v, p]; | |
case 2: | |
return [p, v, t]; | |
case 3: | |
return [p, q, v]; | |
case 4: | |
return [t, p, v]; | |
case 5: | |
return [v, p, q]; | |
} | |
return [v, t, p]; | |
} | |
this["setColor"] = function (color) { | |
this.success = true; | |
if ("number" === typeof color) { | |
this["a"] =((color >> 24) & 0xff) / 255; | |
this["r"] = (color >> 16) & 0xff; | |
this["g"] = (color >> 8) & 0xff; | |
this["b"] = (color ) & 0xff; | |
return; | |
} | |
while ("object" === typeof color) { | |
if (0 in color && 1 in color && 2 in color) { | |
this["a"] = _normalize(color[3], 1); | |
this["r"] = _normalize(color[0]); | |
this["g"] = _normalize(color[1]); | |
this["b"] = _normalize(color[2]); | |
return; | |
} else if ('r' in color && 'g' in color && 'b' in color) { | |
this["a"] = _normalize(color["a"], 1); | |
this["r"] = _normalize(color["r"]); | |
this["g"] = _normalize(color["g"]); | |
this["b"] = _normalize(color["b"]); | |
return; | |
} else if ('h' in color && 's' in color) { | |
var rgb; | |
if ('l' in color) { | |
rgb = _hsl(color["h"], color["s"], color["l"]); | |
} else if ('v' in color) { | |
rgb = _hsv(color["h"], color["s"], color["v"]); | |
} else if ('b' in color) { | |
rgb = _hsv(color["h"], color["s"], color["b"]); | |
} else { | |
break; | |
} | |
this["a"] = _normalize(color["a"], 1); | |
this["r"] = rgb[0]; | |
this["g"] = rgb[1]; | |
this["b"] = rgb[2]; | |
return; | |
} | |
break; | |
} | |
if ("string" === typeof color) { | |
color = color.toLowerCase().replace(/[^a-z0-9,.()#%]/g, ''); | |
var part, c; | |
if ('transparent' === color) { | |
this["a"] = /* void */ | |
this["r"] = /* void */ | |
this["g"] = /* void */ | |
this["b"] = 0; | |
return; | |
} | |
if ('rand' === color) { | |
c = Math.random() * 0xffffff|0; | |
this["a"] = 1; | |
this["r"] = ((c >> 16) & 0xff); | |
this["g"] = ((c >> 8) & 0xff); | |
this["b"] = ((c ) & 0xff); | |
return; | |
} | |
if (undefined !== color_names[color]) { | |
color = '#' + color_names[color]; | |
} | |
// #ff9000, #ff0000 | |
if ((part = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color))) { | |
this["a"] = 1; | |
this["r"] = parseInt(part[1], 16); | |
this["g"] = parseInt(part[2], 16); | |
this["b"] = parseInt(part[3], 16); | |
return; | |
} | |
// #f00, fff | |
if ((part = /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color))) { | |
this["a"] = 1; | |
this["r"] = parseInt(part[1] + part[1], 16); | |
this["g"] = parseInt(part[2] + part[2], 16); | |
this["b"] = parseInt(part[3] + part[3], 16); | |
return; | |
} | |
// rgb(1, 234, 56) | |
if ((part = /^rgba?\((\d{1,3}),(\d{1,3}),(\d{1,3})(,([0-9.]+))?\)$/.exec(color))) { | |
this["a"] = _normalize(part[5], 1); | |
this["r"] = _normalize(part[1]); | |
this["g"] = _normalize(part[2]); | |
this["b"] = _normalize(part[3]); | |
return; | |
} | |
// rgb(66%, 55%, 44%) in [0,100] sez robot %, [0,100]%, [0,100]% | |
if ((part = /^rgba?\(([0-9.]+\%),([0-9.]+\%),([0-9.]+\%)(,([0-9.]+)\%?)?\)$/.exec(color))) { | |
this["a"] = _normalize(part[5], 1); | |
this["r"] = Math.round(2.55 * _normalize(part[1], 100)); | |
this["g"] = Math.round(2.55 * _normalize(part[2], 100)); | |
this["b"] = Math.round(2.55 * _normalize(part[3], 100)); | |
return; | |
} | |
// hsv(64, 40, 16) in [0, 360], [0,100], [0,100] | |
if ((part = /^hs([bvl])a?\((\d{1,3}),(\d{1,3}),(\d{1,3})(,([0-9.]+))?\)$/.exec(color))) { | |
var func; | |
if ("l" === part[1]) { | |
func = _hsl; | |
} else { | |
func = _hsv; | |
} | |
c = func(parseInt(part[2], 10), parseInt(part[3], 10), parseInt(part[4], 10)); | |
this["a"] = _normalize(part[6], 1); | |
this["r"] = c[0]; | |
this["g"] = c[1]; | |
this["b"] = c[2]; | |
return; | |
} | |
// 1, 234, 56 | |
if ((part = /^(\d{1,3}),(\d{1,3}),(\d{1,3})(,([0-9.]+))?$/.exec(color))) { | |
this["a"] = _normalize(part[5], 1); | |
this["r"] = _normalize(part[1]); | |
this["g"] = _normalize(part[2]); | |
this["b"] = _normalize(part[3]); | |
return; | |
} | |
} | |
this.success = false; | |
}; | |
this["getColor"] = function (type) { | |
if (undefined !== type) switch (type.toLowerCase()) { | |
case "rgb": | |
return this["getRGB"](); | |
case "hsv": | |
case "hsb": | |
return this["getHSV"](); | |
case "hsl": | |
return this["getHSL"](); | |
case "int": | |
return this["getInt"](); | |
case "array": | |
return this["getArray"](); | |
case "fraction": | |
return this["getFraction"](); | |
case "css": | |
case "style": | |
return this["getCSS"](); | |
case "name": | |
return this["getName"](); | |
} | |
return this["getHex"](); | |
}; | |
this["getRGB"] = function () { | |
if (this.success) { | |
return { | |
"r": this["r"], | |
"g": this["g"], | |
"b": this["b"], | |
"a": this["a"] | |
}; | |
} | |
return null; | |
}; | |
this["getCSS"] = function () { | |
if (this.success) { | |
if (0 === this["a"]) { | |
return "transparent"; | |
} | |
if (1 === this["a"]) { | |
return 'rgb(' + this["r"] + ',' + this["g"] + ',' + this["b"] + ')'; | |
} | |
return _RGBAtoCSS(this["r"], this["g"], this["b"], this["a"]); | |
} | |
return null; | |
}; | |
this["getArray"] = function () { | |
if (this.success) { | |
return [this["r"], this["g"], this["b"], 100 * this["a"]|0]; | |
} | |
return null; | |
}; | |
this["getName"] = function () { | |
if (this.success) { | |
var lowest = null; | |
var lowest_ndx; | |
var table = color_names; | |
var a = this["getHSL"](); | |
for (var i in table) { | |
/* We do not handle transpare online free sex simulator ncy */ | |
var b = new xColor(table[i])["getHSL"](); | |
var tmp = Math.sqrt(.5 * (a["h"] - b["h"]) * (a["h"] - b["h"]) + .5 * (a["s"] - b["s"]) * (a["s"] - b["s"]) + (a["l"] - b["l"]) * (a["l"] - b["l"])); | |
if (null === lowest || tmp < lowest) { | |
lowest = tmp; | |
lowest_ndx = i; | |
} | |
} | |
return lowest_ndx; | |
} | |
return null; | |
}; | |
this["getFraction"] = function () { | |
if (this.success) { | |
return { | |
"r": this["r"] / 255, | |
"g": this["g"] / 255, | |
"b": this["b"] / 255, | |
"a": this["a"] | |
}; | |
} | |
return null; | |
}; | |
this["getHSL"] = function () { | |
// inspiration: http://130.113.54.154/~monger/hsl-rgb.html | |
if (this.success) { | |
var r = this["r"] / 255; | |
var g = this["g"] / 255; | |
var b = this["b"] / 255; | |
var min = Math.min(r, g, b); | |
var max = Math.max(r, g, b); | |
var delta = max - min; | |
var h, s, l = (max + min) / 2; | |
if (0 === delta) { | |
h = 0; | |
s = 0; | |
} else { | |
if (r === max) { | |
h = (g - b) / delta; | |
} else if (g === max) { | |
h = 2 + (b - r) / delta; | |
} else { | |
h = 4 + (r - g) / delta; | |
} | |
s = delta / (l < .5 ? max + min : 2 - max - min); | |
} | |
return { | |
"h": Math.round( 60 * ((6 + h) % 6)), | |
"s": Math.round(100 * s), | |
"l": Math.round(100 * l), | |
"a": this["a"] | |
}; | |
} | |
return null; | |
}; | |
this["getHSV"] = function () { | |
if (this.success) { | |
var r = this["r"] / 255; | |
var g = this["g"] / 255; | |
var b = this["b"] / 255; | |
/* | |
if (r > g) { | |
max = r; | |
min = g; | |
} else { | |
min = r; | |
max = g; | |
} | |
if (b > max) | |
max = b; | |
if (b < min) | |
min = b; | |
*/ | |
var min = Math.min(r, g, b); | |
var max = Math.max(r, g, b); | |
var delta = max - min; | |
var h, s, v = max; | |
if (0 === max) { | |
s = 0; | |
} else { | |
s = delta / max; | |
} | |
if (0 === delta) { | |
h = 0; | |
} else if (r === max) { | |
h = (g - b) / delta; | |
} else if (g === max) { | |
h = 2 + (b - r) / delta; | |
} else { | |
h = 4 + (r - g) / delta; | |
} | |
return { | |
"h": Math.round( 60 * ((6 + h) % 6)), | |
"s": Math.round(100 * s), | |
"v": Math.round(100 * v), | |
"a": this["a"] | |
}; | |
} | |
return null; | |
}; | |
this["getHex"] = function () { | |
if (this.success) { | |
var chars = "0123456789abcdef"; | |
var r1 = this["r"] >> 4; | |
var g1 = this["g"] >> 4; | |
var b1 = this["b"] >> 4; | |
var r2 = this["r"] & 0xf; | |
var g2 = this["g"] & 0xf; | |
var b2 = this["b"] & 0xf; | |
return '#' | |
+ chars.charAt(r1) + chars.charAt(r2) | |
+ chars.charAt(g1) + chars.charAt(g2) | |
+ chars.charAt(b1) + chars.charAt(b2); | |
} | |
return null; | |
}; | |
this["getInt"] = function (alpha) { | |
if (this.success) { | |
if (undefined !== alpha) { | |
return ((100 * this["a"]|0) << 24 ^ this["r"] << 16 ^ this["g"] << 8 ^ this["b"]); | |
} | |
return (this["r"] << 16 ^ this["g"] << 8 ^ this["b"]) & 0xffffff; | |
} | |
return null; | |
}; | |
this["toString"] = function () { | |
return this["getHex"](); | |
}; | |
this["setColor"](color); | |
} | |
$["each"](['color', 'backgroundColor', 'borderColor', 'borderTopColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor silicon sexy doll 9;, 'outlineColor'], function(i, attr) { | |
$["cssHooks"][attr] = { | |
"set": function(elem, value) { | |
elem["style"][attr] = (new xColor(value))["getCSS"](); | |
} | |
}; | |
$["fx"]["step"][attr] = function(fx) { | |
if (undefined === fx["xinit"]) { | |
if ("string" === typeof fx["end"] && -1 !== fx["end"].indexOf(";")) { | |
var x, arr = fx["end"].split(";"); | |
if (arr.length > 2) { | |
for (x in arr) { | |
if (-1 === arr[x].indexOf('native')) { | |
arr[x] = new xColor(arr[x]); | |
} else { | |
arr[x] = findColor(fx["elem"], attr); | |
} | |
} | |
fx["start"] = null; | |
fx["end"] = arr; | |
} else { | |
fx["start"] = new xColor(arr[0]); | |
fx["end"] = new xColor(arr[1]); | |
} | |
} else { | |
fx["start"] = findColor(fx["elem"], attr); | |
fx["end"] = new xColor(fx["end"]); | |
} | |
fx["xinit"] = 1; | |
} | |
var S = fx["start"]; | |
var E = fx["end"]; | |
var P = fx["pos"]; | |
if (null === S) { | |
var m = P * (E.length - 1), | |
n = P < 1 ? m | 0 : E.length - 2; | |
S = E[n]; | |
E = E[n + 1]; | |
P = m - n; | |
} | |
fx["elem"]["style"][attr] =_RGBAtoCSS( | |
S["r"] + P * (E["r"] - S["r"])|0, | |
S["g"] + P * (E["g"] - S["g"])|0, | |
S["b"] + P * (E["b"] - S["b"])|0, | |
S["a"] + P * (E["a"] - S["a"]) | |
); | |
} | |
}); | |
$(function() { | |
var div = document.createElement("div"), | |
div_style = div["style"]; | |
_RGBAtoCSS = function(r, g, b, a) { | |
return "rgba(" + r + "," + g + "," + b + "," + a + ")"; | |
}; | |
div_style["cssText"] = "background-color:rgba(1,1,1,.5)"; | |
if (!($["support"]["rgba"] = div_style["backgroundColor"].indexOf("rgba") > -1)) { | |
_RGBAtoCSS = function(r, g, b) { | |
return "rgb(" + r + "," + g + "," + b + ")"; | |
}; | |
} | |
}); | |
function findColor(elem, attr) { | |
var color = ""; | |
do { | |
color = $["css"](elem, attr); | |
if ("" !== color && "transparent" !== color && "rgba(0, 0, 0, 0)" !== color || $["nodeName"](elem, "body")) break; | |
} while ((elem = elem["parentNode"])); | |
if ("" === color) { | |
if ($["support"]["rgba"]) { | |
color = "transparent"; | |
} else if ("backgroundColor" === attr) { | |
color = "white"; | |
} else { | |
color = "black"; | |
} | |
} | |
return new xColor(color); | |
} | |
/** | |
* @constructor | |
*/ | |
function xColorMix() { | |
this["test"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
return c; | |
} | |
return null; | |
}; | |
this["red"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
c["g"] = 0xff; | |
c["b"] = 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["blue"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
c["r"] = 0xff; | |
c["g"] = 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["green"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
c["r"] = 0xff; | |
c["b"] = 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["sepia"] = function(col) { | |
var c = new xColor(col); | |
// Microsoft's sepia function male real life dolls http://msdn.microsoft.com/en-us/magazine/cc163866.aspx | |
if (c.success) { | |
var r = c["r"], g = c["g"], b = c["b"]; | |
c["r"] = Math.round(r * .393 + g * .769 + b * .189); | |
c["g"] = Math.round(r * .349 + g * .686 + b * .168); | |
c["b"] = Math.round(r * .272 + g * .534 + b * .131); | |
return c; | |
} | |
return null; | |
}; | |
this["random"] = function () { | |
return new xColor([ | |
(255 * Math.random())|0, | |
(255 * Math.random())|0, | |
(255 * Math.random())|0 | |
]); | |
}; | |
this["inverse"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
c["r"]^= 0xff; | |
c["g"]^= 0xff; | |
c["b"]^= 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["opacity"] = function (x, y, o) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
if (o > 1) { | |
o/= 100; | |
} | |
o = Math.max(o - 1 + b["a"], 0); | |
a["r"] = Math.round((b["r"] - a["r"]) * o + a["r"]); | |
a["g"] = Math.round((b["g"] - a["g"]) * o + a["g"]); | |
a["b"] = Math.round((b["b"] - a["b"]) * o + a["b"]); | |
return a; | |
} | |
return null; | |
}; | |
this["greyfilter"] = function (col, formula) { | |
var v, c = new xColor(col); | |
if (c.success) { | |
switch (formula) { | |
case 1: | |
// My own formula | |
v = .35 + 13 * (c["r"] + c["g"] + c["b"]) / 60; | |
break; | |
case 2: | |
// Sun's formula: (1 - avg) / (100 / 35) + avg) | |
v = (13 * (c["r"] + c["g"] + c["b"]) + 5355) / 60; | |
break; | |
default: | |
v = c["r"] * .3 + c["g"] * .59 + c["b"] * .11; | |
} | |
c["r"] = c["g"] = c["b"] = Math.min(v|0, 255); | |
return c; | |
} | |
return null; | |
}; | |
this["webround"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
if ((c["r"]+= 0x33 - c["r"] % 0x33) > 0xff) c["r"] = 0xff; | |
if ((c["g"]+= 0x33 - c["g"] % 0x33) > 0xff) c["g"] = 0xff; | |
if ((c["b"]+= 0x33 - c["b"] % 0x33) > 0xff) c["b"] = 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["distance"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
// Approximation attempt of http://www.compuphase.com/cmetric.htm | |
return Math.sqrt(3 * (b["r"] - a["r"]) * (b["r"] - a["r"]) + 4 * (b["g"] - a["g"]) * (b["g"] - a["g"]) + 2 * (b["b"] - a["b"]) * (b["b"] - a["b"])); | |
} | |
return null; | |
}; | |
this["readable"] = function (bg, col, size) { | |
// good ressource: http://www.hgrebdes.com/colour/spectrum/colourvisibility.html | |
var a = new xColor(col); | |
var b = new xColor(bg); | |
size = size || 10; | |
if (a.success & b.success) { | |
// but here's my version based on the idea: | |
var diff = b["r"] * 0.299 + b["g"] * 0.587 + b["b"] * 0.114 - | |
a["r"] * 0.299 - a["g"] * 0.587 - a["b"] * 0.114; | |
return !((diff < (1.5 + 141.162 * Math.pow(0.975, size))) | |
&& (diff > (-.5 - 154.709 * Math.pow(0.990, size)))); | |
} | |
return null; | |
}; | |
this["combine"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
a["r"]^= b["r"]; | |
a["g"]^= b["g"]; | |
a["b"]^= b["b"]; | |
return a; | |
} | |
return null; | |
}; | |
this["breed"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
var mask = 0, i = 6; | |
if (a.success & b.success) { | |
while (i--) { | |
if (Math.random() < .5) { | |
mask|= 0x0f << (i << 2); | |
} | |
} | |
a["r"] = (a["r"] & ((mask >> 0x10) & 0xff)) | (b["r"] & (((mask >> 0x10) & 0xff) ^ 0xff)); | |
a["g"] = (a["g"] & ((mask >> 0x08) & 0xff)) | (b["g"] & (((mask >> 0x08) & 0xff) ^ 0xff)); | |
a["b"] = (a["b"] & ((mask >> 0x00) & 0xff)) | (b["b"] & (((mask >> 0x00) & 0xff) ^ 0xff)); | |
return a; | |
} | |
return null; | |
}; | |
this["additive"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
if ((a["r"]+= b["r"]) > 0xff) a["r"] = 0xff; | |
if ((a["g"]+= b["g"]) > 0xff) a["g"] = 0xff; | |
if ((a["b"]+= b["b"]) > 0xff) a["b"] = 0xff; | |
return a; | |
} | |
return null; | |
}; | |
this["subtractive"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
if ((a["r"]+= b["r"] - 0xff) < 0) a["r"] = 0; | |
if ((a["g"]+= b["g"] - 0xff) < 0) a["g"] = 0; | |
if ((a["b"]+= b["b"] - 0xff) < 0) a["b"] = 0; | |
return a; | |
} | |
return null; | |
}; | |
this["subtract"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
if ((a["r"]-= b["r"]) < 0) a["r"] = 0; | |
if ((a["g"]-= b["g"]) < 0) a["g"] = 0; | |
if ((a["b"]-= b["b"]) < 0) a["b"] = 0; | |
return a; | |
} | |
return null; | |
}; | |
this["multiply"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
a["r"] = (a["r"] / 255 * b["r"])|0; | |
a["g"] = (a["g"] / 255 * b["g"])|0; | |
a["b"] = (a["b"] / 255 * b["b"])|0; | |
return a; | |
} | |
return null; | |
}; | |
this["average"] = function (x, y) { | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
a["r"] = (a["r"] + b["r"]) >> 1; | |
a["g"] = (a["g"] + b["g"]) >> 1; | |
a["b"] = (a["b"] + b["b"]) >> 1; | |
return a; | |
} | |
return null; | |
}; | |
this["triad"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
return [c, | |
new xColor([c["b"], c["r"], c["g"]]), | |
new xColor([c["g"], c["b"], c["r"]])]; | |
} | |
return null; | |
}; | |
this["tetrad"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
return [c, | |
new xColor([c["b"], c["r"], c["b"]]), | |
new xColor([c["b"], c["g"], c["r"]]), | |
new xColor([c["r"], c["b"], c["r"]])]; | |
} | |
return null; | |
}; | |
this["gradientlevel"] = function (x, y, level, deg) { | |
if (undefined === deg) deg = 1; | |
if (level > deg) return null; | |
var a = new xColor(x); | |
var b = new xColor(y); | |
if (a.success & b.success) { | |
a["r"] = (a["r"] + ((b["r"] - a["r"]) / deg) * level)|0; | |
a["g"] = (a["g"] + ((b["g"] - a["g"]) / deg) * level)|0; | |
a["b"] = (a["b"] + ((b["b"] - a["b"]) / deg) * level)|0; | |
return a; | |
} | |
return null; | |
}; | |
this["gradientarray"] = function(arr, level, deg) { | |
if (level > deg || !arr.length) return null; | |
if (arr.length == 1) { | |
return new xColor(arr[0]); | |
} | |
var e = level * (arr.length - 1) / (deg + 1) | 0; | |
var step = deg / (arr.length - 1); | |
return $["xcolor"]["gradientlevel"](arr[e], arr[e + 1], level - e * step, step); | |
}; | |
this["nearestname"] = function (a) { | |
a = new xColor(a); | |
if (a.success) { | |
return a["getName"](); | |
} | |
return null; | |
}; | |
this["darken"] = function (col, by, shade) { | |
if (undefined === by) { | |
by = 1; | |
} else if (by < 0) return this["lighten"](col, -by, shade); | |
if (undefined === shade) { | |
shade = 32; | |
} | |
var c = new xColor(col); | |
if (c.success) { | |
if ((c["r"]-= shade * by) < 0) c["r"] = 0; | |
if ((c["g"]-= shade * by) < 0) c["g"] = 0; | |
if ((c["b"]-= shade * by) < 0) c["b"] = 0; | |
return c; | |
} | |
return null; | |
}; | |
this["lighten"] = function (col, by, shade) { | |
if (undefined === by) { | |
by = 1; | |
} else if (by < 0) return this["darken"](col, -by, shade); | |
if (undefined === shade) { | |
shade = 32; | |
} | |
var c = new xColor(col); | |
if (c.success) { | |
if ((c["r"]+= shade * by) > 0xff) c["r"] = 0xff; | |
if ((c["g"]+= shade * by) > 0xff) c["g"] = 0xff; | |
if ((c["b"]+= shade * by) > 0xff) c["b"] = 0xff; | |
return c; | |
} | |
return null; | |
}; | |
this["analogous"] = function (col, results, slices) { | |
if (undefined === results) { | |
results = 8; | |
} | |
if (undefined === slices) { | |
slices = 30; | |
} | |
var c = new xColor(col); | |
if (c.success) { | |
var hsv = c["getHSV"](); | |
var part = 360 / slices, ret = [ c ]; | |
for (hsv["h"] = ((hsv["h"] - (part * results >> 1)) + 720) % 360; --results; ) { | |
hsv["h"]+= part; | |
hsv["h"]%= 360; | |
ret.push(new xColor(hsv)); | |
} | |
return ret; | |
} | |
return null; | |
}; | |
this["complementary"] = function(col) { | |
var c = new xColor(col); | |
if(c.success) { | |
var hsl = c["getHSL"](); | |
hsl["h"] = (hsl["h"] + 180) % 360; | |
return new xColor(hsl); | |
} | |
return null; | |
}; | |
this["splitcomplement"] = function (col) { | |
var c = new xColor(col); | |
if (c.success) { | |
var hsv = c["getHSV"](); | |
var ret = [ c ]; | |
hsv["h"]+= 72; | |
hsv["h"]%= 360; | |
ret.push(new xColor(hsv)); | |
hsv["h"]+= 144; | |
hsv["h"]%= 360; | |
ret.push(new xColor(hsv)); | |
return ret; | |
} | |
return null; | |
}; | |
this["monochromatic&qu silicone realistic sex doll ot;] = function (col, results) { | |
if (undefined === results) { | |
results = 6; | |
} | |
var c = new xColor(col); | |
if (c.success) { | |
var hsv = c["getHSV"](); | |
var ret = [ c ]; | |
while (--results) { | |
hsv["v"]+= 20; | |
hsv["v"]%= 100; | |
ret.push(new xColor(hsv)); | |
} | |
return ret; | |
} | |
return null; | |
}; | |
} | |
$["xcolor"] = new xColorMix(); | |
$["fn"]["readable"] = function () { | |
var elem = this[0]; | |
var f = ""; | |
var b = ""; | |
do { | |
if ("" === f && ("transparent" === (f = $["css"](elem, "color")) || "rgba(0, 0, 0, 0)" === f)) { | |
f = ""; | |
} | |
if ("" === b && ("transparent" === (b = $["css"](elem, "backgroundColor")) || "rgba(0, 0, 0, 0 adult silicone dolls )" === b)) { | |
b = ""; | |
} | |
if ("" !== f && "" !== b || $["nodeName"](elem, "body")) { | |
break; | |
} | |
} while ((elem = elem["parentNode"])); | |
if ("" === f) { | |
f = "black"; | |
} | |
if ("" === b) { | |
b = "white"; | |
} | |
// todo: if alpha != 1, use opacity() to calculate correct color on certain element and it's parent | |
return $["xcolor"]["readable"](b, f); | |
}; | |
$["fn"]["colorize"] = function (FROM, TO, TYPE) { | |
var modifiers = { | |
// Returns number in [0, 1] (0 = FROM, 1 = TO) | |
"gradient": function (k, l, diff, c) { | |
return k / l; | |
}, | |
"flip": function (k, l, diff, c) { | |
return (" " === c) ? diff : !diff; | |
}, | |
"pillow": function (k, l, diff, c) { | |
k*= 2; | |
return (k <= l) | |
? (k / l) | |
: (2 - k / l); | |
} | |
}; | |
if ("function" === typeof TYPE) { | |
/* void */ | |
} else if (void 0 === modifiers[TYPE]) { | |
return; | |
} else { | |
TYPE = modifiers[TYPE]; | |
} | |
FROM = new xColor(FROM); | |
TO = new xColor(TO); | |
this["each"](function() { | |
var tmp = this.childNodes, | |
LEN = 0, | |
K = 0; | |
if (FROM.success & TO.success) { | |
for (var i = tmp.length; i--; LEN+= tmp[i]["textContent"].length){} | |
(function replace(node) { | |
var i = 0, | |
len; | |
if (3 === node.nodeType) { | |
var x = FROM; | |
var y = TO; | |
var l = LEN; | |
var elem, ctx, diff = 0, c, calc = TYPE; | |
len = node.nodeValue.length; | |
ctx = document.createElement('span'); | |
for (i = 0; i < len; ++i) { | |
elem = document.createElement('span'); | |
c = node.nodeValue.charAt(i); | |
diff = calc(K, l, diff, c); | |
elem["style"]["color"] =_RGBAtoCSS( | |
x["r"] + diff * (y["r"] - x["r"])|0, | |
x["g"] + diff * (y["g"] - x["g"])|0, | |
x["b"] + diff * (y["b"] - x["b"])|0, | |
x["a"] + diff * (y["a"] - x["a"]) | |
); | |
elem.appendChild(document.createTextNode( | |
c | |
) | |
); | |
ctx.appendChild(elem); | |
++K; | |
} | |
node.parentNode.replaceChild(ctx, node); | |
} else { | |
for (len = node.childNodes.length; i < len; ++i) { | |
replace(node.childNodes[i]); | |
} | |
} | |
})(this); | |
} | |
}); | |
}; | |
}(jQuery)); |