var path = require('path');
var existsSync = fs.existsSync || path.existsSync;
-var CleanCSS = {
- colors: {
- toHex: {
- aqua: '#0ff',
- black: '#000',
- blue: '#00f',
- fuchsia: '#f0f',
- white: '#fff',
- yellow: '#ff0'
- },
- toName: {
- '#000080': 'navy',
- '#008000': 'green',
- '#008080': 'teal',
- '#800000': 'maroon',
- '#800080': 'purple',
- '#808000': 'olive',
- '#808080': 'gray',
- '#c0c0c0': 'silver',
- '#f00': 'red'
- }
- },
+var colorShortening = require('../lib/color-shortening');
+var CleanCSS = {
process: function(data, options) {
var context = {
specialComments: [],
// replace color name with hex values if shorter (or the other way around)
['toHex', 'toName'].forEach(function(type) {
- var pattern = '(' + Object.keys(CleanCSS.colors[type]).join('|') + ')';
+ var pattern = '(' + Object.keys(colorShortening[type]).join('|') + ')';
var colorSwitcher = function(match, prefix, colorValue, suffix) {
- return prefix + CleanCSS.colors[type][colorValue.toLowerCase()] + suffix;
+ return prefix + colorShortening[type][colorValue.toLowerCase()] + suffix;
};
replace(new RegExp('([ :,\\(])' + pattern + '([;\\}!\\) ])', 'ig'), colorSwitcher);
replace(new RegExp('(,)' + pattern + '(,)', 'ig'), colorSwitcher);
--- /dev/null
+var COLORS = {
+ 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',
+ 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',
+ darkkhaki: '#bdb76b',
+ darkmagenta: '#8b008b',
+ darkolivegreen: '#556b2f',
+ darkorange: '#ff8c00',
+ darkorchid: '#9932cc',
+ darkred: '#8b0000',
+ darksalmon: '#e9967a',
+ darkseagreen: '#8fbc8f',
+ darkslateblue: '#483d8b',
+ darkslategray: '#2f4f4f',
+ darkturquoise: '#00ced1',
+ darkviolet: '#9400d3',
+ deeppink: '#ff1493',
+ deepskyblue: '#00bfff',
+ dimgray: '#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',
+ 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',
+ lightpink: '#ffb6c1',
+ lightsalmon: '#ffa07a',
+ lightseagreen: '#20b2aa',
+ lightskyblue: '#87cefa',
+ lightslategray: '#778899',
+ lightsteelblue: '#b0c4de',
+ lightyellow: '#ffffe0',
+ lime: '#0f0',
+ 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: '#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',
+ 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'
+};
+
+var toHex = {};
+var toName = {};
+
+for (var name in COLORS) {
+ var color = COLORS[name];
+ if (name.length < color.length)
+ toName[color] = name;
+ else
+ toHex[name] = color;
+}
+
+module.exports = {
+ toHex: toHex,
+ toName: toName
+};
var assert = require('assert');
var path = require('path');
var cleanCSS = require('../index');
+var colorShortening = require('../lib/color-shortening');
var lineBreak = process.platform == 'win32' ? '\r\n' : '\n';
var cssContext = function(groups, options) {
return context;
};
+var colorShorteningContext = function() {
+ var shortenerContext = {};
+
+ ['toName', 'toHex'].forEach(function(type) {
+ for (var from in colorShortening[type]) {
+ var to = colorShortening[type][from];
+ shortenerContext['should turn ' + from + ' into ' + to] = [
+ 'a{color:' + from + '}',
+ 'a{color:' + to + '}'
+ ];
+ }
+ });
+
+ return cssContext(shortenerContext);
+};
+
vows.describe('clean-units').addBatch({
'identity': cssContext({
'preserve minified content': 'a{color:#f10}'
],
'hsla not to hex': 'a{color:hsl(99,66%,33%,.5)}'
}),
+ 'shortening colors': colorShorteningContext(),
'font weights': cssContext({
'font-weight:normal to 400': [
'p{font-weight:normal}',