colors
Advanced tools
Comparing version 0.6.0 to 0.6.1
381
colors.js
@@ -48,17 +48,138 @@ /* | ||
var addProperty = function (color, func) { | ||
var allowOverride = ['bold']; | ||
if (""[color] && allowOverride.indexOf(color) === -1) { | ||
throw new Error(color + ' already exists on String.prototype, cannot override.') | ||
} | ||
exports[color] = function(str) { | ||
exports[color] = function (str) { | ||
return func.apply(str); | ||
}; | ||
String.prototype.__defineGetter__(color, func); | ||
if (Object.defineProperty) { | ||
Object.defineProperty(String.prototype, color, { | ||
get : func, | ||
configurable: true, | ||
enumerable: false | ||
}); | ||
} else { | ||
String.prototype.__defineGetter__(color, func); | ||
} | ||
}; | ||
function stylize(str, style) { | ||
var styles; | ||
if (exports.mode === 'console') { | ||
styles = { | ||
//styles | ||
'bold' : ['\x1B[1m', '\x1B[22m'], | ||
'italic' : ['\x1B[3m', '\x1B[23m'], | ||
'underline' : ['\x1B[4m', '\x1B[24m'], | ||
'inverse' : ['\x1B[7m', '\x1B[27m'], | ||
'strikethrough' : ['\x1B[9m', '\x1B[29m'], | ||
//text colors | ||
//grayscale | ||
'white' : ['\x1B[37m', '\x1B[39m'], | ||
'grey' : ['\x1B[90m', '\x1B[39m'], | ||
'black' : ['\x1B[30m', '\x1B[39m'], | ||
//colors | ||
'blue' : ['\x1B[34m', '\x1B[39m'], | ||
'cyan' : ['\x1B[36m', '\x1B[39m'], | ||
'green' : ['\x1B[32m', '\x1B[39m'], | ||
'magenta' : ['\x1B[35m', '\x1B[39m'], | ||
'red' : ['\x1B[31m', '\x1B[39m'], | ||
'yellow' : ['\x1B[33m', '\x1B[39m'], | ||
//background colors | ||
//grayscale | ||
'whiteBG' : ['\x1B[47m', '\x1B[49m'], | ||
'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'], | ||
'blackBG' : ['\x1B[40m', '\x1B[49m'], | ||
//colors | ||
'blueBG' : ['\x1B[44m', '\x1B[49m'], | ||
'cyanBG' : ['\x1B[46m', '\x1B[49m'], | ||
'greenBG' : ['\x1B[42m', '\x1B[49m'], | ||
'magentaBG' : ['\x1B[45m', '\x1B[49m'], | ||
'redBG' : ['\x1B[41m', '\x1B[49m'], | ||
'yellowBG' : ['\x1B[43m', '\x1B[49m'] | ||
}; | ||
} else if (exports.mode === 'browser') { | ||
styles = { | ||
//styles | ||
'bold' : ['<b>', '</b>'], | ||
'italic' : ['<i>', '</i>'], | ||
'underline' : ['<u>', '</u>'], | ||
'inverse' : ['<span style="background-color:black;color:white;">', '</span>'], | ||
'strikethrough' : ['<del>', '</del>'], | ||
//text colors | ||
//grayscale | ||
'white' : ['<span style="color:white;">', '</span>'], | ||
'grey' : ['<span style="color:gray;">', '</span>'], | ||
'black' : ['<span style="color:black;">', '</span>'], | ||
//colors | ||
'blue' : ['<span style="color:blue;">', '</span>'], | ||
'cyan' : ['<span style="color:cyan;">', '</span>'], | ||
'green' : ['<span style="color:green;">', '</span>'], | ||
'magenta' : ['<span style="color:magenta;">', '</span>'], | ||
'red' : ['<span style="color:red;">', '</span>'], | ||
'yellow' : ['<span style="color:yellow;">', '</span>'], | ||
//background colors | ||
//grayscale | ||
'whiteBG' : ['<span style="background-color:white;">', '</span>'], | ||
'greyBG' : ['<span style="background-color:gray;">', '</span>'], | ||
'blackBG' : ['<span style="background-color:black;">', '</span>'], | ||
//colors | ||
'blueBG' : ['<span style="background-color:blue;">', '</span>'], | ||
'cyanBG' : ['<span style="background-color:cyan;">', '</span>'], | ||
'greenBG' : ['<span style="background-color:green;">', '</span>'], | ||
'magentaBG' : ['<span style="background-color:magenta;">', '</span>'], | ||
'redBG' : ['<span style="background-color:red;">', '</span>'], | ||
'yellowBG' : ['<span style="background-color:yellow;">', '</span>'] | ||
}; | ||
} else if (exports.mode === 'none') { | ||
return str + ''; | ||
} else { | ||
console.log('unsupported mode, try "browser", "console" or "none"'); | ||
} | ||
return styles[style][0] + str + styles[style][1]; | ||
} | ||
function applyTheme(theme) { | ||
// | ||
// Remark: This is a list of methods that exist | ||
// on String that you should not overwrite. | ||
// | ||
var stringPrototypeBlacklist = [ | ||
'__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor', | ||
'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt', | ||
'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring', | ||
'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight' | ||
]; | ||
Object.keys(theme).forEach(function (prop) { | ||
if (stringPrototypeBlacklist.indexOf(prop) !== -1) { | ||
console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name'); | ||
} | ||
else { | ||
if (typeof(theme[prop]) === 'string') { | ||
addProperty(prop, function () { | ||
return exports[theme[prop]](this); | ||
}); | ||
} | ||
else { | ||
addProperty(prop, function () { | ||
var ret = this; | ||
for (var t = 0; t < theme[prop].length; t++) { | ||
ret = exports[theme[prop][t]](ret); | ||
} | ||
return ret; | ||
}); | ||
} | ||
} | ||
}); | ||
} | ||
// | ||
// Iterate through all default styles and colors | ||
// | ||
var x = ['bold', 'underline', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta']; | ||
var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG']; | ||
x.forEach(function (style) { | ||
@@ -79,13 +200,12 @@ | ||
} | ||
var exploded = this.split(""); | ||
var i = 0; | ||
var exploded = this.split(""), i = 0; | ||
exploded = exploded.map(map); | ||
return exploded.join(""); | ||
} | ||
}; | ||
} | ||
var rainbowMap = (function () { | ||
var rainbowColors = ['red','yellow','green','blue','magenta']; //RoY G BiV | ||
var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV | ||
return function (letter, i, exploded) { | ||
if (letter == " ") { | ||
if (letter === " ") { | ||
return letter; | ||
@@ -95,8 +215,10 @@ } else { | ||
} | ||
} | ||
}; | ||
})(); | ||
exports.themes = {}; | ||
exports.addSequencer = function (name, map) { | ||
addProperty(name, sequencer(map)); | ||
} | ||
}; | ||
@@ -109,60 +231,19 @@ exports.addSequencer('rainbow', rainbowMap); | ||
exports.setTheme = function (theme) { | ||
Object.keys(theme).forEach(function(prop){ | ||
addProperty(prop, function(){ | ||
return exports[theme[prop]](this); | ||
}); | ||
}); | ||
} | ||
function stylize(str, style) { | ||
if (exports.mode == 'console') { | ||
var styles = { | ||
//styles | ||
'bold' : ['\033[1m', '\033[22m'], | ||
'italic' : ['\033[3m', '\033[23m'], | ||
'underline' : ['\033[4m', '\033[24m'], | ||
'inverse' : ['\033[7m', '\033[27m'], | ||
//grayscale | ||
'white' : ['\033[37m', '\033[39m'], | ||
'grey' : ['\033[90m', '\033[39m'], | ||
'black' : ['\033[30m', '\033[39m'], | ||
//colors | ||
'blue' : ['\033[34m', '\033[39m'], | ||
'cyan' : ['\033[36m', '\033[39m'], | ||
'green' : ['\033[32m', '\033[39m'], | ||
'magenta' : ['\033[35m', '\033[39m'], | ||
'red' : ['\033[31m', '\033[39m'], | ||
'yellow' : ['\033[33m', '\033[39m'] | ||
}; | ||
} else if (exports.mode == 'browser') { | ||
var styles = { | ||
//styles | ||
'bold' : ['<b>', '</b>'], | ||
'italic' : ['<i>', '</i>'], | ||
'underline' : ['<u>', '</u>'], | ||
'inverse' : ['<span style="background-color:black;color:white;">', '</span>'], | ||
//grayscale | ||
'white' : ['<span style="color:white;">', '</span>'], | ||
'grey' : ['<span style="color:grey;">', '</span>'], | ||
'black' : ['<span style="color:black;">', '</span>'], | ||
//colors | ||
'blue' : ['<span style="color:blue;">', '</span>'], | ||
'cyan' : ['<span style="color:cyan;">', '</span>'], | ||
'green' : ['<span style="color:green;">', '</span>'], | ||
'magenta' : ['<span style="color:magenta;">', '</span>'], | ||
'red' : ['<span style="color:red;">', '</span>'], | ||
'yellow' : ['<span style="color:yellow;">', '</span>'] | ||
}; | ||
} else if (exports.mode == 'none') { | ||
return str; | ||
if (typeof theme === 'string') { | ||
try { | ||
exports.themes[theme] = require(theme); | ||
applyTheme(exports.themes[theme]); | ||
return exports.themes[theme]; | ||
} catch (err) { | ||
console.log(err); | ||
return err; | ||
} | ||
} else { | ||
console.log('unsupported mode, try "browser", "console" or "none"'); | ||
applyTheme(theme); | ||
} | ||
return styles[style][0] + str + styles[style][1]; | ||
}; | ||
// don't summon zalgo | ||
addProperty('zalgo', function () { | ||
return zalgo(this); | ||
addProperty('stripColors', function () { | ||
return ("" + this).replace(/\x1B\[\d+m/g, ''); | ||
}); | ||
@@ -174,36 +255,36 @@ | ||
"up" : [ | ||
'̍','̎','̄','̅', | ||
'̿','̑','̆','̐', | ||
'͒','͗','͑','̇', | ||
'̈','̊','͂','̓', | ||
'̈','͊','͋','͌', | ||
'̃','̂','̌','͐', | ||
'̀','́','̋','̏', | ||
'̒','̓','̔','̽', | ||
'̉','ͣ','ͤ','ͥ', | ||
'ͦ','ͧ','ͨ','ͩ', | ||
'ͪ','ͫ','ͬ','ͭ', | ||
'ͮ','ͯ','̾','͛', | ||
'͆','̚' | ||
], | ||
'̍', '̎', '̄', '̅', | ||
'̿', '̑', '̆', '̐', | ||
'͒', '͗', '͑', '̇', | ||
'̈', '̊', '͂', '̓', | ||
'̈', '͊', '͋', '͌', | ||
'̃', '̂', '̌', '͐', | ||
'̀', '́', '̋', '̏', | ||
'̒', '̓', '̔', '̽', | ||
'̉', 'ͣ', 'ͤ', 'ͥ', | ||
'ͦ', 'ͧ', 'ͨ', 'ͩ', | ||
'ͪ', 'ͫ', 'ͬ', 'ͭ', | ||
'ͮ', 'ͯ', '̾', '͛', | ||
'͆', '̚' | ||
], | ||
"down" : [ | ||
'̖','̗','̘','̙', | ||
'̜','̝','̞','̟', | ||
'̠','̤','̥','̦', | ||
'̩','̪','̫','̬', | ||
'̭','̮','̯','̰', | ||
'̱','̲','̳','̹', | ||
'̺','̻','̼','ͅ', | ||
'͇','͈','͉','͍', | ||
'͎','͓','͔','͕', | ||
'͖','͙','͚','̣' | ||
], | ||
'̖', '̗', '̘', '̙', | ||
'̜', '̝', '̞', '̟', | ||
'̠', '̤', '̥', '̦', | ||
'̩', '̪', '̫', '̬', | ||
'̭', '̮', '̯', '̰', | ||
'̱', '̲', '̳', '̹', | ||
'̺', '̻', '̼', 'ͅ', | ||
'͇', '͈', '͉', '͍', | ||
'͎', '͓', '͔', '͕', | ||
'͖', '͙', '͚', '̣' | ||
], | ||
"mid" : [ | ||
'̕','̛','̀','́', | ||
'͘','̡','̢','̧', | ||
'̨','̴','̵','̶', | ||
'͜','͝','͞', | ||
'͟','͠','͢','̸', | ||
'̷','͡',' ҉' | ||
] | ||
'̕', '̛', '̀', '́', | ||
'͘', '̡', '̢', '̧', | ||
'̨', '̴', '̵', '̶', | ||
'͜', '͝', '͞', | ||
'͟', '͠', '͢', '̸', | ||
'̷', '͡', ' ҉' | ||
] | ||
}, | ||
@@ -214,10 +295,10 @@ all = [].concat(soul.up, soul.down, soul.mid), | ||
function randomNumber(range) { | ||
r = Math.floor(Math.random()*range); | ||
var r = Math.floor(Math.random() * range); | ||
return r; | ||
}; | ||
} | ||
function is_char(character) { | ||
var bool = false; | ||
all.filter(function(i){ | ||
bool = (i == character); | ||
all.filter(function (i) { | ||
bool = (i === character); | ||
}); | ||
@@ -227,53 +308,53 @@ return bool; | ||
function heComes(text, options){ | ||
result = ''; | ||
options = options || {}; | ||
options["up"] = options["up"] || true; | ||
options["mid"] = options["mid"] || true; | ||
options["down"] = options["down"] || true; | ||
options["size"] = options["size"] || "maxi"; | ||
var counts; | ||
text = text.split(''); | ||
for(var l in text){ | ||
if(is_char(l)) { continue; } | ||
result = result + text[l]; | ||
function heComes(text, options) { | ||
var result = '', counts, l; | ||
options = options || {}; | ||
options["up"] = options["up"] || true; | ||
options["mid"] = options["mid"] || true; | ||
options["down"] = options["down"] || true; | ||
options["size"] = options["size"] || "maxi"; | ||
text = text.split(''); | ||
for (l in text) { | ||
if (is_char(l)) { | ||
continue; | ||
} | ||
result = result + text[l]; | ||
counts = {"up" : 0, "down" : 0, "mid" : 0}; | ||
switch (options.size) { | ||
case 'mini': | ||
counts.up = randomNumber(8); | ||
counts.min = randomNumber(2); | ||
counts.down = randomNumber(8); | ||
break; | ||
case 'maxi': | ||
counts.up = randomNumber(16) + 3; | ||
counts.min = randomNumber(4) + 1; | ||
counts.down = randomNumber(64) + 3; | ||
break; | ||
default: | ||
counts.up = randomNumber(8) + 1; | ||
counts.mid = randomNumber(6) / 2; | ||
counts.down = randomNumber(8) + 1; | ||
break; | ||
} | ||
counts = {"up" : 0, "down" : 0, "mid" : 0}; | ||
switch(options.size) { | ||
case 'mini': | ||
counts.up = randomNumber(8); | ||
counts.min= randomNumber(2); | ||
counts.down = randomNumber(8); | ||
break; | ||
case 'maxi': | ||
counts.up = randomNumber(16) + 3; | ||
counts.min = randomNumber(4) + 1; | ||
counts.down = randomNumber(64) + 3; | ||
break; | ||
default: | ||
counts.up = randomNumber(8) + 1; | ||
counts.mid = randomNumber(6) / 2; | ||
counts.down= randomNumber(8) + 1; | ||
break; | ||
} | ||
var arr = ["up", "mid", "down"]; | ||
for(var d in arr){ | ||
var index = arr[d]; | ||
for (var i = 0 ; i <= counts[index]; i++) | ||
{ | ||
if(options[index]) { | ||
result = result + soul[index][randomNumber(soul[index].length)]; | ||
} | ||
} | ||
var arr = ["up", "mid", "down"]; | ||
for (var d in arr) { | ||
var index = arr[d]; | ||
for (var i = 0 ; i <= counts[index]; i++) { | ||
if (options[index]) { | ||
result = result + soul[index][randomNumber(soul[index].length)]; | ||
} | ||
} | ||
return result; | ||
}; | ||
} | ||
} | ||
return result; | ||
} | ||
return heComes(text); | ||
} | ||
addProperty('stripColors', function() { | ||
return ("" + this).replace(/\u001b\[\d+m/g,''); | ||
// don't summon zalgo | ||
addProperty('zalgo', function () { | ||
return zalgo(this); | ||
}); |
@@ -12,5 +12,9 @@ var colors = require('./colors'); | ||
console.log("a".grey + " b".black); | ||
console.log("Zebras are so fun!".zebra); | ||
console.log('background color attack!'.black.whiteBG) | ||
// | ||
// Remark: .strikethrough may not work with Mac OS Terminal App | ||
// | ||
console.log("This is " + "not".strikethrough + " fun."); | ||
console.log(colors.rainbow('Rainbows are fun!')); | ||
@@ -47,2 +51,3 @@ console.log(colors.italic('So ') + colors.underline('are') + colors.bold(' styles! ') + colors.inverse('inverse')); // styles not widely supported | ||
// Load theme with JSON literal | ||
colors.setTheme({ | ||
@@ -67,2 +72,9 @@ silly: 'rainbow', | ||
// outputs grey text | ||
console.log("this is an input".input); | ||
// Load a theme from file | ||
colors.setTheme('./themes/winston-dark.js'); | ||
console.log("this is an input".input); | ||
{ | ||
"name": "colors", | ||
"description": "get colors in your node.js console like what", | ||
"version": "0.6.0", | ||
"version": "0.6.1", | ||
"author": "Marak Squires", | ||
"homepage": "https://github.com/Marak/colors.js", | ||
"bugs": "https://github.com/Marak/colors.js/issues", | ||
"keywords": [ "ansi", "terminal", "colors" ], | ||
"repository": { | ||
@@ -7,0 +10,0 @@ "type": "git", |
@@ -43,3 +43,3 @@ # colors.js - get color and style in your node.js console ( and browser ) like what | ||
var require('colors'); | ||
var colors = require('colors'); | ||
@@ -46,0 +46,0 @@ colors.setTheme({ |
31
test.js
var assert = require('assert'), | ||
colors = require('./colors'); | ||
// | ||
// This is a pretty nice example on how tests shouldn't be written. However, | ||
// it's more about API stability than about really testing it (although it's | ||
// a pretty complete test suite). | ||
// | ||
var s = 'string'; | ||
function a(s, code) { | ||
return '\033[' + code.toString() + 'm' + s + '\033[39m'; | ||
return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m'; | ||
} | ||
@@ -26,13 +20,13 @@ | ||
return '<span style="color:' + color + ';">' + s + '</span>'; | ||
// that's pretty dumb approach to testing it | ||
} | ||
var stylesColors = ['white', 'grey', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; | ||
var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; | ||
var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']); | ||
colors.mode = 'console'; | ||
assert.equal(s.bold, '\033[1m' + s + '\033[22m'); | ||
assert.equal(s.italic, '\033[3m' + s + '\033[23m'); | ||
assert.equal(s.underline, '\033[4m' + s + '\033[24m'); | ||
assert.equal(s.inverse, '\033[7m' + s + '\033[27m'); | ||
assert.equal(s.bold, '\x1B[1m' + s + '\x1B[22m'); | ||
assert.equal(s.italic, '\x1B[3m' + s + '\x1B[23m'); | ||
assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m'); | ||
assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m'); | ||
assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m'); | ||
assert.ok(s.rainbow); | ||
@@ -50,2 +44,7 @@ aE(s, 'white', 37); | ||
colors.setTheme({error:'red'}); | ||
assert.equal(typeof("astring".red),'string'); | ||
assert.equal(typeof("astring".error),'string'); | ||
colors.mode = 'browser'; | ||
@@ -55,2 +54,3 @@ assert.equal(s.bold, '<b>' + s + '</b>'); | ||
assert.equal(s.underline, '<u>' + s + '</u>'); | ||
assert.equal(s.strikethrough, '<del>' + s + '</del>'); | ||
assert.equal(s.inverse, '<span style="background-color:black;color:white;">' + s + '</span>'); | ||
@@ -63,2 +63,5 @@ assert.ok(s.rainbow); | ||
assert.equal(typeof("astring".red),'string'); | ||
assert.equal(typeof("astring".error),'string'); | ||
colors.mode = 'none'; | ||
@@ -70,1 +73,3 @@ stylesAll.forEach(function (style) { | ||
assert.equal(typeof("astring".red),'string'); | ||
assert.equal(typeof("astring".error),'string'); |
Sorry, the diff of this file is not supported yet
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
21203
9
458
1
0
1