Created
December 13, 2012 00:20
-
-
Save anonymous/4272953 to your computer and use it in GitHub Desktop.
CoffeeScript Color parser
This file contains hidden or 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 characters.
Learn more about bidirectional Unicode characters
| PopKit.Color = SC.Object.extend SC.Copyable, | |
| rgb: (-> | |
| PopKit.Color.hsbToRgb(@get("hsb")) | |
| ).property("hsb") | |
| copy: -> PopKit.Color.create(hsb: @get("hsb")) | |
| PopKit.Color.reopenClass | |
| hsbToRgb: (hsb) -> | |
| [h, s, b] = hsb | |
| br = Math.round(b / 100 * 255) | |
| if s == 0 | |
| [br, br, br] | |
| else | |
| hue = h % 360 | |
| f = hue % 60 | |
| p = Math.round((hsb[2] * (100 - s)) / 10000 * 255) | |
| q = Math.round((hsb[2] * (6000 - s * f)) / 600000 * 255) | |
| t = Math.round((hsb[2] * (6000 - s * (60 - f))) / 600000 * 255) | |
| switch Math.floor(hue / 60) | |
| when 0 then [br, t, p] | |
| when 1 then [q, br, p] | |
| when 2 then [p, br, t] | |
| when 3 then [p, q, br] | |
| when 4 then [t, p, br] | |
| when 5 then [br, p, q] | |
| else false | |
| rgbToHsb: (rgb) -> | |
| [red, green, blue] = rgb | |
| hue = 0 | |
| max = Math.max(red, green, blue) | |
| min = Math.min(red, green, blue) | |
| delta = max - min | |
| brightness = max / 255 | |
| saturation = if (max != 0) then (delta / max) else 0 | |
| if saturation != 0 | |
| rr = (max - red) / delta | |
| gr = (max - green) / delta | |
| br = (max - blue) / delta | |
| if (red == max) | |
| hue = br - gr | |
| else if (green == max) | |
| hue = 2 + rr - br | |
| else | |
| hue = 4 + gr - rr | |
| hue /= 6 | |
| if (hue < 0) | |
| hue++ | |
| [ | |
| Math.round(hue * 360) | |
| Math.round(saturation * 100) | |
| Math.round(brightness * 100) | |
| ] | |
| hexToRgba: (hexString) -> | |
| hex = hexString.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})(\w{1,2})?$/) | |
| hex[4] ||= "ff" | |
| parts = for part in hex.slice(1) | |
| part += part if part.length == 1 | |
| parseInt(part, 16) | |
| nameMap: | |
| aliceblue: "#F0F8FF" | |
| antiquewhite: "#FAEBD7" | |
| aqua: "#00FFFF" | |
| aquamarine: "#7FFFD4" | |
| azure: "#F0FFFF" | |
| beige: "#F5F5DC" | |
| bisque: "#FFE4C4" | |
| black: "#000000" | |
| blanchedalmond: "#FFEBCD" | |
| blue: "#0000FF" | |
| blueviolet: "#8A2BE2" | |
| brown: "#A52A2A" | |
| burlywood: "#DEB887" | |
| cadetblue: "#5F9EA0" | |
| chartreuse: "#7FFF00" | |
| chocolate: "#D2691E" | |
| coral: "#FF7F50" | |
| cornflowerblue: "#6495ED" | |
| cornsilk: "#FFF8DC" | |
| crimson: "#DC143C" | |
| cyan: "#00FFFF" | |
| 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: "#FF00FF" | |
| 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: "#778899" | |
| lightslategrey: "#778899" | |
| lightsteelblue: "#B0C4DE" | |
| lightyellow: "#FFFFE0" | |
| lime: "#00FF00" | |
| limegreen: "#32CD32" | |
| linen: "#FAF0E6" | |
| magenta: "#FF00FF" | |
| 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: "#FF0000" | |
| 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: "#FFFFFF" | |
| whitesmoke: "#F5F5F5" | |
| yellow: "#FFFF00" | |
| yellowgreen: "#9ACD32" | |
| nameToRgba: (name) -> | |
| @hexToRgba(@nameMap[name]) | |
| rgbToHex: (args...) -> | |
| args[3] = Math.ceil(args[3] * 255) if args[3] | |
| hex = for arg in args | |
| bit = (arg - 0).toString(16) | |
| if (bit.length == 1) | |
| "0#{bit}" | |
| else | |
| bit | |
| "##{hex.join('')}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment