added unit testing, and started implementing unit tests...phew
This commit is contained in:
129
node_modules/kuler/index.js
generated
vendored
Normal file
129
node_modules/kuler/index.js
generated
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
'use strict';
|
||||
|
||||
var colornames = require('colornames');
|
||||
|
||||
/**
|
||||
* Kuler: Color text using CSS colors
|
||||
*
|
||||
* @constructor
|
||||
* @param {String} text The text that needs to be styled
|
||||
* @param {String} color Optional color for alternate API.
|
||||
* @api public
|
||||
*/
|
||||
function Kuler(text, color) {
|
||||
if (color) return (new Kuler(text)).style(color);
|
||||
if (!(this instanceof Kuler)) return new Kuler(text);
|
||||
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* ANSI color codes.
|
||||
*
|
||||
* @type {String}
|
||||
* @private
|
||||
*/
|
||||
Kuler.prototype.prefix = '\x1b[';
|
||||
Kuler.prototype.suffix = 'm';
|
||||
|
||||
/**
|
||||
* Parse a hex color string and parse it to it's RGB equiv.
|
||||
*
|
||||
* @param {String} color
|
||||
* @returns {Array}
|
||||
* @api private
|
||||
*/
|
||||
Kuler.prototype.hex = function hex(color) {
|
||||
color = color[0] === '#' ? color.substring(1) : color;
|
||||
|
||||
//
|
||||
// Pre-parse for shorthand hex colors.
|
||||
//
|
||||
if (color.length === 3) {
|
||||
color = color.split('');
|
||||
|
||||
color[5] = color[2]; // F60##0
|
||||
color[4] = color[2]; // F60#00
|
||||
color[3] = color[1]; // F60600
|
||||
color[2] = color[1]; // F66600
|
||||
color[1] = color[0]; // FF6600
|
||||
|
||||
color = color.join('');
|
||||
}
|
||||
|
||||
var r = color.substring(0, 2)
|
||||
, g = color.substring(2, 4)
|
||||
, b = color.substring(4, 6);
|
||||
|
||||
return [ parseInt(r, 16), parseInt(g, 16), parseInt(b, 16) ];
|
||||
};
|
||||
|
||||
/**
|
||||
* Transform a 255 RGB value to an RGV code.
|
||||
*
|
||||
* @param {Number} r Red color channel.
|
||||
* @param {Number} g Green color channel.
|
||||
* @param {Number} b Blue color channel.
|
||||
* @returns {String}
|
||||
* @api public
|
||||
*/
|
||||
Kuler.prototype.rgb = function rgb(r, g, b) {
|
||||
var red = r / 255 * 5
|
||||
, green = g / 255 * 5
|
||||
, blue = b / 255 * 5;
|
||||
|
||||
return this.ansi(red, green, blue);
|
||||
};
|
||||
|
||||
/**
|
||||
* Turns RGB 0-5 values into a single ANSI code.
|
||||
*
|
||||
* @param {Number} r Red color channel.
|
||||
* @param {Number} g Green color channel.
|
||||
* @param {Number} b Blue color channel.
|
||||
* @returns {String}
|
||||
* @api public
|
||||
*/
|
||||
Kuler.prototype.ansi = function ansi(r, g, b) {
|
||||
var red = Math.round(r)
|
||||
, green = Math.round(g)
|
||||
, blue = Math.round(b);
|
||||
|
||||
return 16 + (red * 36) + (green * 6) + blue;
|
||||
};
|
||||
|
||||
/**
|
||||
* Marks an end of color sequence.
|
||||
*
|
||||
* @returns {String} Reset sequence.
|
||||
* @api public
|
||||
*/
|
||||
Kuler.prototype.reset = function reset() {
|
||||
return this.prefix +'39;49'+ this.suffix;
|
||||
};
|
||||
|
||||
/**
|
||||
* Colour the terminal using CSS.
|
||||
*
|
||||
* @param {String} color The HEX color code.
|
||||
* @returns {String} the escape code.
|
||||
* @api public
|
||||
*/
|
||||
Kuler.prototype.style = function style(color) {
|
||||
//
|
||||
// We've been supplied a CSS color name instead of a hex color format so we
|
||||
// need to transform it to proper CSS color and continue with our execution
|
||||
// flow.
|
||||
//
|
||||
if (!/^#?(?:[0-9a-fA-F]{3}){1,2}$/.test(color)) {
|
||||
color = colornames(color);
|
||||
}
|
||||
|
||||
return this.prefix +'38;5;'+ this.rgb.apply(this, this.hex(color)) + this.suffix + this.text + this.reset();
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Expose the actual interface.
|
||||
//
|
||||
module.exports = Kuler;
|
Reference in New Issue
Block a user