📄 color.js
字号:
/***MochiKit.Color 1.3.1See <http://mochikit.com/> for documentation, downloads, license, etc.(c) 2005 Bob Ippolito and others. All rights Reserved.***/if (typeof(dojo) != 'undefined') { dojo.provide('MochiKit.Color'); dojo.require('MochiKit.Base');}if (typeof(JSAN) != 'undefined') { JSAN.use("MochiKit.Base", []);}try { if (typeof(MochiKit.Base) == 'undefined') { throw ""; }} catch (e) { throw "MochiKit.Color depends on MochiKit.Base";}if (typeof(MochiKit.Color) == "undefined") { MochiKit.Color = {};}MochiKit.Color.NAME = "MochiKit.Color";MochiKit.Color.VERSION = "1.3.1";MochiKit.Color.__repr__ = function () { return "[" + this.NAME + " " + this.VERSION + "]";};MochiKit.Color.toString = function () { return this.__repr__();};MochiKit.Color.Color = function (red, green, blue, alpha) { if (typeof(alpha) == 'undefined' || alpha === null) { alpha = 1.0; } this.rgb = { r: red, g: green, b: blue, a: alpha };};// Prototype methodsMochiKit.Color.Color.prototype = { __class__: MochiKit.Color.Color, colorWithAlpha: function (alpha) { var rgb = this.rgb; var m = MochiKit.Color; return m.Color.fromRGB(rgb.r, rgb.g, rgb.b, alpha); }, colorWithHue: function (hue) { // get an HSL model, and set the new hue... var hsl = this.asHSL(); hsl.h = hue; var m = MochiKit.Color; // convert back to RGB... return m.Color.fromHSL(hsl); }, colorWithSaturation: function (saturation) { // get an HSL model, and set the new hue... var hsl = this.asHSL(); hsl.s = saturation; var m = MochiKit.Color; // convert back to RGB... return m.Color.fromHSL(hsl); }, colorWithLightness: function (lightness) { // get an HSL model, and set the new hue... var hsl = this.asHSL(); hsl.l = lightness; var m = MochiKit.Color; // convert back to RGB... return m.Color.fromHSL(hsl); }, darkerColorWithLevel: function (level) { var hsl = this.asHSL(); hsl.l = Math.max(hsl.l - level, 0); var m = MochiKit.Color; return m.Color.fromHSL(hsl); }, lighterColorWithLevel: function (level) { var hsl = this.asHSL(); hsl.l = Math.min(hsl.l + level, 1); var m = MochiKit.Color; return m.Color.fromHSL(hsl); }, blendedColor: function (other, /* optional */ fraction) { if (typeof(fraction) == 'undefined' || fraction === null) { fraction = 0.5; } var sf = 1.0 - fraction; var s = this.rgb; var d = other.rgb; var df = fraction; return MochiKit.Color.Color.fromRGB( (s.r * sf) + (d.r * df), (s.g * sf) + (d.g * df), (s.b * sf) + (d.b * df), (s.a * sf) + (d.a * df) ); }, compareRGB: function (other) { var a = this.asRGB(); var b = other.asRGB(); return MochiKit.Base.compare( [a.r, a.g, a.b, a.a], [b.r, b.g, b.b, b.a] ); }, isLight: function () { return this.asHSL().b > 0.5; }, isDark: function () { return (!this.isLight()); }, toHSLString: function () { var c = this.asHSL(); var ccc = MochiKit.Color.clampColorComponent; var rval = this._hslString; if (!rval) { var mid = ( ccc(c.h, 360).toFixed(0) + "," + ccc(c.s, 100).toPrecision(4) + "%" + "," + ccc(c.l, 100).toPrecision(4) + "%" ); var a = c.a; if (a >= 1) { a = 1; rval = "hsl(" + mid + ")"; } else { if (a <= 0) { a = 0; } rval = "hsla(" + mid + "," + a + ")"; } this._hslString = rval; } return rval; }, toRGBString: function () { var c = this.rgb; var ccc = MochiKit.Color.clampColorComponent; var rval = this._rgbString; if (!rval) { var mid = ( ccc(c.r, 255).toFixed(0) + "," + ccc(c.g, 255).toFixed(0) + "," + ccc(c.b, 255).toFixed(0) ); if (c.a != 1) { rval = "rgba(" + mid + "," + c.a + ")"; } else { rval = "rgb(" + mid + ")"; } this._rgbString = rval; } return rval; }, asRGB: function () { return MochiKit.Base.clone(this.rgb); }, toHexString: function () { var m = MochiKit.Color; var c = this.rgb; var ccc = MochiKit.Color.clampColorComponent; var rval = this._hexString; if (!rval) { rval = ("#" + m.toColorPart(ccc(c.r, 255)) + m.toColorPart(ccc(c.g, 255)) + m.toColorPart(ccc(c.b, 255)) ); this._hexString = rval; } return rval; }, asHSV: function () { var hsv = this.hsv; var c = this.rgb; if (typeof(hsv) == 'undefined' || hsv === null) { hsv = MochiKit.Color.rgbToHSV(this.rgb); this.hsv = hsv; } return MochiKit.Base.clone(hsv); }, asHSL: function () { var hsl = this.hsl; var c = this.rgb; if (typeof(hsl) == 'undefined' || hsl === null) { hsl = MochiKit.Color.rgbToHSL(this.rgb); this.hsl = hsl; } return MochiKit.Base.clone(hsl); }, toString: function () { return this.toRGBString(); }, repr: function () { var c = this.rgb; var col = [c.r, c.g, c.b, c.a]; return this.__class__.NAME + "(" + col.join(", ") + ")"; }};// Constructor methodsMochiKit.Base.update(MochiKit.Color.Color, { fromRGB: function (red, green, blue, alpha) { // designated initializer var Color = MochiKit.Color.Color; if (arguments.length == 1) { var rgb = red; red = rgb.r; green = rgb.g; blue = rgb.b; if (typeof(rgb.a) == 'undefined') { alpha = undefined; } else { alpha = rgb.a; } } return new Color(red, green, blue, alpha); }, fromHSL: function (hue, saturation, lightness, alpha) { var m = MochiKit.Color; return m.Color.fromRGB(m.hslToRGB.apply(m, arguments)); }, fromHSV: function (hue, saturation, value, alpha) { var m = MochiKit.Color; return m.Color.fromRGB(m.hsvToRGB.apply(m, arguments)); }, fromName: function (name) { var Color = MochiKit.Color.Color; // Opera 9 seems to "quote" named colors(?!) if (name.charAt(0) == '"') { name = name.substr(1, name.length - 2); } var htmlColor = Color._namedColors[name.toLowerCase()]; if (typeof(htmlColor) == 'string') { return Color.fromHexString(htmlColor); } else if (name == "transparent") { return Color.transparentColor(); } return null; }, fromString: function (colorString) { var self = MochiKit.Color.Color; var three = colorString.substr(0, 3); if (three == "rgb") { return self.fromRGBString(colorString); } else if (three == "hsl") { return self.fromHSLString(colorString); } else if (colorString.charAt(0) == "#") { return self.fromHexString(colorString); } return self.fromName(colorString); }, fromHexString: function (hexCode) { if (hexCode.charAt(0) == '#') { hexCode = hexCode.substring(1); } var components = []; var i, hex; if (hexCode.length == 3) { for (i = 0; i < 3; i++) { hex = hexCode.substr(i, 1); components.push(parseInt(hex + hex, 16) / 255.0); } } else { for (i = 0; i < 6; i += 2) { hex = hexCode.substr(i, 2); components.push(parseInt(hex, 16) / 255.0); } } var Color = MochiKit.Color.Color; return Color.fromRGB.apply(Color, components); }, _fromColorString: function (pre, method, scales, colorCode) { // parses either HSL or RGB if (colorCode.indexOf(pre) === 0) { colorCode = colorCode.substring(colorCode.indexOf("(", 3) + 1, colorCode.length - 1); } var colorChunks = colorCode.split(/\s*,\s*/); var colorFloats = []; for (var i = 0; i < colorChunks.length; i++) { var c = colorChunks[i]; var val; var three = c.substring(c.length - 3); if (c.charAt(c.length - 1) == '%') { val = 0.01 * parseFloat(c.substring(0, c.length - 1)); } else if (three == "deg") { val = parseFloat(c) / 360.0; } else if (three == "rad") { val = parseFloat(c) / (Math.PI * 2); } else { val = scales[i] * parseFloat(c); } colorFloats.push(val); } return this[method].apply(this, colorFloats); }, fromComputedStyle: function (elem, style, mozillaEquivalentCSS) { var d = MochiKit.DOM; var cls = MochiKit.Color.Color; for (elem = d.getElement(elem); elem; elem = elem.parentNode) { var actualColor = d.computedStyle.apply(d, arguments); if (!actualColor) { continue; } var color = cls.fromString(actualColor); if (!color) { break; } if (color.asRGB().a > 0) { return color; } } return null; }, fromBackground: function (elem) { var cls = MochiKit.Color.Color; return cls.fromComputedStyle( elem, "backgroundColor", "background-color") || cls.whiteColor(); }, fromText: function (elem) { var cls = MochiKit.Color.Color; return cls.fromComputedStyle( elem, "color", "color") || cls.blackColor(); }, namedColors: function () { return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); }});// Module level functionsMochiKit.Base.update(MochiKit.Color, { clampColorComponent: function (v, scale) { v *= scale; if (v < 0) { return 0; } else if (v > scale) { return scale; } else { return v; } }, _hslValue: function (n1, n2, hue) { if (hue > 6.0) { hue -= 6.0; } else if (hue < 0.0) { hue += 6.0; } var val; if (hue < 1.0) { val = n1 + (n2 - n1) * hue; } else if (hue < 3.0) { val = n2; } else if (hue < 4.0) { val = n1 + (n2 - n1) * (4.0 - hue); } else { val = n1; } return val; }, hsvToRGB: function (hue, saturation, value, alpha) { if (arguments.length == 1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -