summaryrefslogtreecommitdiff
path: root/lib/dojo/_base/Color.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2011-03-04 19:02:28 +0300
committerAndrew Dolgov <[email protected]>2011-03-04 19:02:59 +0300
commita089699c8915636ba4f158d77dba9b012bc93208 (patch)
treeb2d7d051f1f55d44a6be07d3ee137e5a7ccfcefb /lib/dojo/_base/Color.js
parentcfad9259a6feacfa8194b1312770ae6db1ecce50 (diff)
build custom layer of Dojo to speed up loading of tt-rss (refs #293)
Diffstat (limited to 'lib/dojo/_base/Color.js')
-rw-r--r--lib/dojo/_base/Color.js303
1 files changed, 214 insertions, 89 deletions
diff --git a/lib/dojo/_base/Color.js b/lib/dojo/_base/Color.js
index 0ee5888d1..5f5c5af9b 100644
--- a/lib/dojo/_base/Color.js
+++ b/lib/dojo/_base/Color.js
@@ -5,98 +5,223 @@
*/
-if(!dojo._hasResource["dojo._base.Color"]){
-dojo._hasResource["dojo._base.Color"]=true;
+if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.Color"] = true;
dojo.provide("dojo._base.Color");
dojo.require("dojo._base.array");
dojo.require("dojo._base.lang");
+
(function(){
-var d=dojo;
-dojo.Color=function(_1){
-if(_1){
-this.setColor(_1);
-}
-};
-dojo.Color.named={black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:d.config.transparentColor||[255,255,255]};
-dojo.extend(dojo.Color,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){
-var t=this;
-t.r=r;
-t.g=g;
-t.b=b;
-t.a=a;
-},setColor:function(_2){
-if(d.isString(_2)){
-d.colorFromString(_2,this);
-}else{
-if(d.isArray(_2)){
-d.colorFromArray(_2,this);
-}else{
-this._set(_2.r,_2.g,_2.b,_2.a);
-if(!(_2 instanceof d.Color)){
-this.sanitize();
-}
-}
-}
-return this;
-},sanitize:function(){
-return this;
-},toRgb:function(){
-var t=this;
-return [t.r,t.g,t.b];
-},toRgba:function(){
-var t=this;
-return [t.r,t.g,t.b,t.a];
-},toHex:function(){
-var _3=d.map(["r","g","b"],function(x){
-var s=this[x].toString(16);
-return s.length<2?"0"+s:s;
-},this);
-return "#"+_3.join("");
-},toCss:function(_4){
-var t=this,_5=t.r+", "+t.g+", "+t.b;
-return (_4?"rgba("+_5+", "+t.a:"rgb("+_5)+")";
-},toString:function(){
-return this.toCss(true);
-}});
-dojo.blendColors=function(_6,_7,_8,_9){
-var t=_9||new d.Color();
-d.forEach(["r","g","b","a"],function(x){
-t[x]=_6[x]+(_7[x]-_6[x])*_8;
-if(x!="a"){
-t[x]=Math.round(t[x]);
-}
-});
-return t.sanitize();
-};
-dojo.colorFromRgb=function(_a,_b){
-var m=_a.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
-return m&&dojo.colorFromArray(m[1].split(/\s*,\s*/),_b);
-};
-dojo.colorFromHex=function(_c,_d){
-var t=_d||new d.Color(),_e=(_c.length==4)?4:8,_f=(1<<_e)-1;
-_c=Number("0x"+_c.substr(1));
-if(isNaN(_c)){
-return null;
-}
-d.forEach(["b","g","r"],function(x){
-var c=_c&_f;
-_c>>=_e;
-t[x]=_e==4?17*c:c;
-});
-t.a=1;
-return t;
-};
-dojo.colorFromArray=function(a,obj){
-var t=obj||new d.Color();
-t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));
-if(isNaN(t.a)){
-t.a=1;
-}
-return t.sanitize();
-};
-dojo.colorFromString=function(str,obj){
-var a=d.Color.named[str];
-return a&&d.colorFromArray(a,obj)||d.colorFromRgb(str,obj)||d.colorFromHex(str,obj);
-};
+
+ var d = dojo;
+
+ dojo.Color = function(/*Array|String|Object*/ color){
+ // summary:
+ // Takes a named string, hex string, array of rgb or rgba values,
+ // an object with r, g, b, and a properties, or another `dojo.Color` object
+ // and creates a new Color instance to work from.
+ //
+ // example:
+ // Work with a Color instance:
+ // | var c = new dojo.Color();
+ // | c.setColor([0,0,0]); // black
+ // | var hex = c.toHex(); // #000000
+ //
+ // example:
+ // Work with a node's color:
+ // | var color = dojo.style("someNode", "backgroundColor");
+ // | var n = new dojo.Color(color);
+ // | // adjust the color some
+ // | n.r *= .5;
+ // | console.log(n.toString()); // rgb(128, 255, 255);
+ if(color){ this.setColor(color); }
+ };
+
+ // FIXME:
+ // there's got to be a more space-efficient way to encode or discover
+ // these!! Use hex?
+ dojo.Color.named = {
+ black: [0,0,0],
+ silver: [192,192,192],
+ gray: [128,128,128],
+ white: [255,255,255],
+ maroon: [128,0,0],
+ red: [255,0,0],
+ purple: [128,0,128],
+ fuchsia: [255,0,255],
+ green: [0,128,0],
+ lime: [0,255,0],
+ olive: [128,128,0],
+ yellow: [255,255,0],
+ navy: [0,0,128],
+ blue: [0,0,255],
+ teal: [0,128,128],
+ aqua: [0,255,255],
+ transparent: d.config.transparentColor || [255,255,255]
+ };
+
+ dojo.extend(dojo.Color, {
+ r: 255, g: 255, b: 255, a: 1,
+ _set: function(r, g, b, a){
+ var t = this; t.r = r; t.g = g; t.b = b; t.a = a;
+ },
+ setColor: function(/*Array|String|Object*/ color){
+ // summary:
+ // Takes a named string, hex string, array of rgb or rgba values,
+ // an object with r, g, b, and a properties, or another `dojo.Color` object
+ // and sets this color instance to that value.
+ //
+ // example:
+ // | var c = new dojo.Color(); // no color
+ // | c.setColor("#ededed"); // greyish
+ if(d.isString(color)){
+ d.colorFromString(color, this);
+ }else if(d.isArray(color)){
+ d.colorFromArray(color, this);
+ }else{
+ this._set(color.r, color.g, color.b, color.a);
+ if(!(color instanceof d.Color)){ this.sanitize(); }
+ }
+ return this; // dojo.Color
+ },
+ sanitize: function(){
+ // summary:
+ // Ensures the object has correct attributes
+ // description:
+ // the default implementation does nothing, include dojo.colors to
+ // augment it with real checks
+ return this; // dojo.Color
+ },
+ toRgb: function(){
+ // summary:
+ // Returns 3 component array of rgb values
+ // example:
+ // | var c = new dojo.Color("#000000");
+ // | console.log(c.toRgb()); // [0,0,0]
+ var t = this;
+ return [t.r, t.g, t.b]; // Array
+ },
+ toRgba: function(){
+ // summary:
+ // Returns a 4 component array of rgba values from the color
+ // represented by this object.
+ var t = this;
+ return [t.r, t.g, t.b, t.a]; // Array
+ },
+ toHex: function(){
+ // summary:
+ // Returns a CSS color string in hexadecimal representation
+ // example:
+ // | console.log(new dojo.Color([0,0,0]).toHex()); // #000000
+ var arr = d.map(["r", "g", "b"], function(x){
+ var s = this[x].toString(16);
+ return s.length < 2 ? "0" + s : s;
+ }, this);
+ return "#" + arr.join(""); // String
+ },
+ toCss: function(/*Boolean?*/ includeAlpha){
+ // summary:
+ // Returns a css color string in rgb(a) representation
+ // example:
+ // | var c = new dojo.Color("#FFF").toCss();
+ // | console.log(c); // rgb('255','255','255')
+ var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
+ return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String
+ },
+ toString: function(){
+ // summary:
+ // Returns a visual representation of the color
+ return this.toCss(true); // String
+ }
+ });
+
+ dojo.blendColors = function(
+ /*dojo.Color*/ start,
+ /*dojo.Color*/ end,
+ /*Number*/ weight,
+ /*dojo.Color?*/ obj
+ ){
+ // summary:
+ // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,
+ // can reuse a previously allocated dojo.Color object for the result
+ var t = obj || new d.Color();
+ d.forEach(["r", "g", "b", "a"], function(x){
+ t[x] = start[x] + (end[x] - start[x]) * weight;
+ if(x != "a"){ t[x] = Math.round(t[x]); }
+ });
+ return t.sanitize(); // dojo.Color
+ };
+
+ dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+ // summary:
+ // Returns a `dojo.Color` instance from a string of the form
+ // "rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color`
+ // object to update with the parsed value and return instead of
+ // creating a new object.
+ // returns:
+ // A dojo.Color object. If obj is passed, it will be the return value.
+ var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
+ return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color
+ };
+
+ dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){
+ // summary:
+ // Converts a hex string with a '#' prefix to a color object.
+ // Supports 12-bit #rgb shorthand. Optionally accepts a
+ // `dojo.Color` object to update with the parsed value.
+ //
+ // returns:
+ // A dojo.Color object. If obj is passed, it will be the return value.
+ //
+ // example:
+ // | var thing = dojo.colorFromHex("#ededed"); // grey, longhand
+ //
+ // example:
+ // | var thing = dojo.colorFromHex("#000"); // black, shorthand
+ var t = obj || new d.Color(),
+ bits = (color.length == 4) ? 4 : 8,
+ mask = (1 << bits) - 1;
+ color = Number("0x" + color.substr(1));
+ if(isNaN(color)){
+ return null; // dojo.Color
+ }
+ d.forEach(["b", "g", "r"], function(x){
+ var c = color & mask;
+ color >>= bits;
+ t[x] = bits == 4 ? 17 * c : c;
+ });
+ t.a = 1;
+ return t; // dojo.Color
+ };
+
+ dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){
+ // summary:
+ // Builds a `dojo.Color` from a 3 or 4 element array, mapping each
+ // element in sequence to the rgb(a) values of the color.
+ // example:
+ // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha
+ // returns:
+ // A dojo.Color object. If obj is passed, it will be the return value.
+ var t = obj || new d.Color();
+ t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
+ if(isNaN(t.a)){ t.a = 1; }
+ return t.sanitize(); // dojo.Color
+ };
+
+ dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){
+ // summary:
+ // Parses `str` for a color value. Accepts hex, rgb, and rgba
+ // style color values.
+ // description:
+ // Acceptable input values for str may include arrays of any form
+ // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or
+ // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10,
+ // 10, 50)"
+ // returns:
+ // A dojo.Color object. If obj is passed, it will be the return value.
+ var a = d.Color.named[str];
+ return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj);
+ };
})();
+
}