123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383 |
- /**
- * @license jQuery paging plugin v1.8.0 06/21/2010
- * http://www.xarg.org/project/jquery-color-plugin-xcolor/
- *
- * Copyright (c) 2010, Robert Eisele (robert@xarg.org)
- * 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": "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": "fafad2",
- "lightgray": "d3d3d3",
- "lightgreen": "90ee90",
- "lightgrey": "d3d3d3",
- "lightpink": "ffb6c1",
- "lightsalmon": "ffa07a",
- "lightseagreen": "20b2aa",
- "lightskyblue": "87cefa",
- "lightslategray": "789",
- "lightslategrey": "789",
- "lightsteelblue": "b0c4de",
- "lightyellow": "ffffe0",
- "lime": "0f0",
- "limegreen": "32cd32",
- "linen": "faf0e6",
- "magenta": "f0f",
- "maroon": "800000",
- "mediumaquamarine": "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": "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]%, [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 transparency */
- 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', '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 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"] = 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)" === 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));
|