mirror of
https://github.com/flynx/colors.js.git
synced 2025-10-29 11:00:11 +00:00
[refactor] [major] Code cleanup. Node has changed a bit since 2010.
[api] Added ability to safely require colors without messing with String.prototype [api] Removed browser functionality [dist] Add travis file
This commit is contained in:
parent
b895035f4a
commit
dfb15b5538
6
.travis.yml
Normal file
6
.travis.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "0.11"
|
||||||
|
- "0.10"
|
||||||
|
- "0.8"
|
||||||
|
- "0.6"
|
||||||
@ -1,7 +1,8 @@
|
|||||||
Copyright (c) 2010
|
Original Library
|
||||||
|
- Copyright (c) Marak Squires
|
||||||
|
|
||||||
Marak Squires
|
Additional Functionality
|
||||||
Alexis Sellier (cloudhead)
|
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
145
ReadMe.md
145
ReadMe.md
@ -1,42 +1,107 @@
|
|||||||
# colors.js - get color and style in your node.js console ( and browser ) like what
|
# colors.js
|
||||||
|
|
||||||
<img src="http://i.imgur.com/goJdO.png" border = "0"/>
|
## get color and style in your node.js console
|
||||||
|
|
||||||
|
<img src="https://github.com/Marak/colors.js/raw/master/screenshots/colors.png"/>
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
npm install colors
|
npm install colors -g
|
||||||
|
|
||||||
## colors and styles!
|
## colors and styles!
|
||||||
|
|
||||||
- bold
|
### text colors
|
||||||
- italic
|
|
||||||
- underline
|
- black
|
||||||
- inverse
|
- red
|
||||||
- yellow
|
- green
|
||||||
- cyan
|
- yellow
|
||||||
- white
|
- blue
|
||||||
- magenta
|
- magenta
|
||||||
- green
|
- cyan
|
||||||
- red
|
- white
|
||||||
- grey
|
- gray
|
||||||
- blue
|
- grey
|
||||||
- rainbow
|
|
||||||
- zebra
|
### background colors
|
||||||
- random
|
|
||||||
|
|
||||||
|
|
||||||
|
- bgBlack
|
||||||
|
- bgRed
|
||||||
|
- bgGreen
|
||||||
|
- bgYellow
|
||||||
|
- bgBlue
|
||||||
|
- bgMagenta
|
||||||
|
- bgCyan
|
||||||
|
- bgWhite
|
||||||
|
|
||||||
|
### styles
|
||||||
|
|
||||||
|
- reset
|
||||||
|
- bold
|
||||||
|
- dim
|
||||||
|
- italic
|
||||||
|
- underline
|
||||||
|
- inverse
|
||||||
|
- hidden
|
||||||
|
- strikethrough
|
||||||
|
|
||||||
|
### extras
|
||||||
|
|
||||||
|
- rainbow
|
||||||
|
- zebra
|
||||||
|
- america
|
||||||
|
- trap
|
||||||
|
- random
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
``` js
|
By popular demand, `colors` now ships with two types of usages!
|
||||||
var colors = require('./colors');
|
|
||||||
|
The super nifty way
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('colors');
|
||||||
|
|
||||||
console.log('hello'.green); // outputs green text
|
console.log('hello'.green); // outputs green text
|
||||||
console.log('i like cake and pies'.underline.red) // outputs red underlined text
|
console.log('i like cake and pies'.underline.red) // outputs red underlined text
|
||||||
console.log('inverse the color'.inverse); // inverses the color
|
console.log('inverse the color'.inverse); // inverses the color
|
||||||
console.log('OMG Rainbows!'.rainbow); // rainbow (ignores spaces)
|
console.log('OMG Rainbows!'.rainbow); // rainbow
|
||||||
|
console.log('Run the trap'.trap); // Drops the bass
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# Creating Custom themes
|
or a slightly less nifty way which doesn't extend `String.prototype`
|
||||||
|
|
||||||
|
```js
|
||||||
|
var colors = require('colors/safe');
|
||||||
|
|
||||||
|
console.log(colors.green('hello')); // outputs green text
|
||||||
|
console.log(colors.red.underline('i like cake and pies')) // outputs red underlined text
|
||||||
|
console.log(colors.inverse('inverse the color')); // inverses the color
|
||||||
|
console.log(colors.rainbow('OMG Rainbows!')); // rainbow
|
||||||
|
console.log(colors.trap('Run the trap')); // Drops the bass
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way.
|
||||||
|
|
||||||
|
If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object.
|
||||||
|
|
||||||
|
## Disabling Colors
|
||||||
|
|
||||||
|
To disable colors you can pass the following arguments in the command line to your application:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node myapp.js --no-color
|
||||||
|
```
|
||||||
|
|
||||||
|
## Custom themes
|
||||||
|
|
||||||
|
### Using standard API
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|
||||||
@ -62,16 +127,34 @@ console.log("this is an error".error);
|
|||||||
console.log("this is a warning".warn);
|
console.log("this is a warning".warn);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Using string safe API
|
||||||
|
|
||||||
### Contributors
|
```js
|
||||||
|
var colors = require('colors/safe');
|
||||||
|
|
||||||
Marak (Marak Squires)
|
// set single property
|
||||||
Alexis Sellier (cloudhead)
|
var error = colors.red;
|
||||||
mmalecki (Maciej Małecki)
|
error('this is red');
|
||||||
nicoreed (Nico Reed)
|
|
||||||
morganrallen (Morgan Allen)
|
|
||||||
JustinCampbell (Justin Campbell)
|
|
||||||
ded (Dustin Diaz)
|
|
||||||
|
|
||||||
|
// set theme
|
||||||
|
colors.setTheme({
|
||||||
|
silly: 'rainbow',
|
||||||
|
input: 'grey',
|
||||||
|
verbose: 'cyan',
|
||||||
|
prompt: 'grey',
|
||||||
|
info: 'green',
|
||||||
|
data: 'grey',
|
||||||
|
help: 'cyan',
|
||||||
|
warn: 'yellow',
|
||||||
|
debug: 'blue',
|
||||||
|
error: 'red'
|
||||||
|
});
|
||||||
|
|
||||||
#### , Marak Squires , Justin Campbell, Dustin Diaz (@ded)
|
// outputs red text
|
||||||
|
console.log(colors.error("this is an error"));
|
||||||
|
|
||||||
|
// outputs yellow text
|
||||||
|
console.log(colors.warn("this is a warning"));
|
||||||
|
```
|
||||||
|
|
||||||
|
*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.*
|
||||||
342
colors.js
342
colors.js
@ -1,342 +0,0 @@
|
|||||||
/*
|
|
||||||
colors.js
|
|
||||||
|
|
||||||
Copyright (c) 2010
|
|
||||||
|
|
||||||
Marak Squires
|
|
||||||
Alexis Sellier (cloudhead)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
var isHeadless = false;
|
|
||||||
|
|
||||||
if (typeof module !== 'undefined') {
|
|
||||||
isHeadless = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isHeadless) {
|
|
||||||
var exports = {};
|
|
||||||
var module = {};
|
|
||||||
var colors = exports;
|
|
||||||
exports.mode = "browser";
|
|
||||||
} else {
|
|
||||||
exports.mode = "console";
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Prototypes the string object to have additional method calls that add terminal colors
|
|
||||||
//
|
|
||||||
var addProperty = function (color, func) {
|
|
||||||
exports[color] = function (str) {
|
|
||||||
return func.apply(str);
|
|
||||||
};
|
|
||||||
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', '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) {
|
|
||||||
|
|
||||||
// __defineGetter__ at the least works in more browsers
|
|
||||||
// http://robertnyman.com/javascript/javascript-getters-setters.html
|
|
||||||
// Object.defineProperty only works in Chrome
|
|
||||||
addProperty(style, function () {
|
|
||||||
return stylize(this, style);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function sequencer(map) {
|
|
||||||
return function () {
|
|
||||||
if (!isHeadless) {
|
|
||||||
return this.replace(/( )/, '$1');
|
|
||||||
}
|
|
||||||
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
|
|
||||||
return function (letter, i, exploded) {
|
|
||||||
if (letter === " ") {
|
|
||||||
return letter;
|
|
||||||
} else {
|
|
||||||
return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
|
|
||||||
exports.themes = {};
|
|
||||||
|
|
||||||
exports.addSequencer = function (name, map) {
|
|
||||||
addProperty(name, sequencer(map));
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.addSequencer('rainbow', rainbowMap);
|
|
||||||
exports.addSequencer('zebra', function (letter, i, exploded) {
|
|
||||||
return i % 2 === 0 ? letter : letter.inverse;
|
|
||||||
});
|
|
||||||
|
|
||||||
exports.setTheme = function (theme) {
|
|
||||||
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 {
|
|
||||||
applyTheme(theme);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
addProperty('stripColors', function () {
|
|
||||||
return ("" + this).replace(/\x1B\[\d+m/g, '');
|
|
||||||
});
|
|
||||||
|
|
||||||
// please no
|
|
||||||
function zalgo(text, options) {
|
|
||||||
var soul = {
|
|
||||||
"up" : [
|
|
||||||
'̍', '̎', '̄', '̅',
|
|
||||||
'̿', '̑', '̆', '̐',
|
|
||||||
'͒', '͗', '͑', '̇',
|
|
||||||
'̈', '̊', '͂', '̓',
|
|
||||||
'̈', '͊', '͋', '͌',
|
|
||||||
'̃', '̂', '̌', '͐',
|
|
||||||
'̀', '́', '̋', '̏',
|
|
||||||
'̒', '̓', '̔', '̽',
|
|
||||||
'̉', 'ͣ', 'ͤ', 'ͥ',
|
|
||||||
'ͦ', 'ͧ', 'ͨ', 'ͩ',
|
|
||||||
'ͪ', 'ͫ', 'ͬ', 'ͭ',
|
|
||||||
'ͮ', 'ͯ', '̾', '͛',
|
|
||||||
'͆', '̚'
|
|
||||||
],
|
|
||||||
"down" : [
|
|
||||||
'̖', '̗', '̘', '̙',
|
|
||||||
'̜', '̝', '̞', '̟',
|
|
||||||
'̠', '̤', '̥', '̦',
|
|
||||||
'̩', '̪', '̫', '̬',
|
|
||||||
'̭', '̮', '̯', '̰',
|
|
||||||
'̱', '̲', '̳', '̹',
|
|
||||||
'̺', '̻', '̼', 'ͅ',
|
|
||||||
'͇', '͈', '͉', '͍',
|
|
||||||
'͎', '͓', '͔', '͕',
|
|
||||||
'͖', '͙', '͚', '̣'
|
|
||||||
],
|
|
||||||
"mid" : [
|
|
||||||
'̕', '̛', '̀', '́',
|
|
||||||
'͘', '̡', '̢', '̧',
|
|
||||||
'̨', '̴', '̵', '̶',
|
|
||||||
'͜', '͝', '͞',
|
|
||||||
'͟', '͠', '͢', '̸',
|
|
||||||
'̷', '͡', ' ҉'
|
|
||||||
]
|
|
||||||
},
|
|
||||||
all = [].concat(soul.up, soul.down, soul.mid),
|
|
||||||
zalgo = {};
|
|
||||||
|
|
||||||
function randomNumber(range) {
|
|
||||||
var r = Math.floor(Math.random() * range);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
function is_char(character) {
|
|
||||||
var bool = false;
|
|
||||||
all.filter(function (i) {
|
|
||||||
bool = (i === character);
|
|
||||||
});
|
|
||||||
return bool;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 heComes(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// don't summon zalgo
|
|
||||||
addProperty('zalgo', function () {
|
|
||||||
return zalgo(this);
|
|
||||||
});
|
|
||||||
76
example.html
76
example.html
@ -1,76 +0,0 @@
|
|||||||
<!DOCTYPE HTML>
|
|
||||||
<html lang="en-us">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
|
||||||
<title>Colors Example</title>
|
|
||||||
<script src="colors.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<script>
|
|
||||||
|
|
||||||
var test = colors.red("hopefully colorless output");
|
|
||||||
|
|
||||||
document.write('Rainbows are fun!'.rainbow + '<br/>');
|
|
||||||
document.write('So '.italic + 'are'.underline + ' styles! '.bold + 'inverse'.inverse); // styles not widely supported
|
|
||||||
document.write('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported
|
|
||||||
//document.write('zalgo time!'.zalgo);
|
|
||||||
document.write(test.stripColors);
|
|
||||||
document.write("a".grey + " b".black);
|
|
||||||
|
|
||||||
document.write("Zebras are so fun!".zebra);
|
|
||||||
|
|
||||||
document.write(colors.rainbow('Rainbows are fun!'));
|
|
||||||
document.write("This is " + "not".strikethrough + " fun.");
|
|
||||||
|
|
||||||
document.write(colors.italic('So ') + colors.underline('are') + colors.bold(' styles! ') + colors.inverse('inverse')); // styles not widely supported
|
|
||||||
document.write(colors.bold(colors.italic(colors.underline(colors.red('Chains are also cool.'))))); // styles not widely supported
|
|
||||||
//document.write(colors.zalgo('zalgo time!'));
|
|
||||||
document.write(colors.stripColors(test));
|
|
||||||
document.write(colors.grey("a") + colors.black(" b"));
|
|
||||||
|
|
||||||
colors.addSequencer("america", function(letter, i, exploded) {
|
|
||||||
if(letter === " ") return letter;
|
|
||||||
switch(i%3) {
|
|
||||||
case 0: return letter.red;
|
|
||||||
case 1: return letter.white;
|
|
||||||
case 2: return letter.blue;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
colors.addSequencer("random", (function() {
|
|
||||||
var available = ['bold', 'underline', 'italic', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
|
|
||||||
|
|
||||||
return function(letter, i, exploded) {
|
|
||||||
return letter === " " ? letter : letter[available[Math.round(Math.random() * (available.length - 1))]];
|
|
||||||
};
|
|
||||||
})());
|
|
||||||
|
|
||||||
document.write("AMERICA! F--K YEAH!".america);
|
|
||||||
document.write("So apparently I've been to Mars, with all the little green men. But you know, I don't recall.".random);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Custom themes
|
|
||||||
//
|
|
||||||
|
|
||||||
colors.setTheme({
|
|
||||||
silly: 'rainbow',
|
|
||||||
input: 'grey',
|
|
||||||
verbose: 'cyan',
|
|
||||||
prompt: 'grey',
|
|
||||||
info: 'green',
|
|
||||||
data: 'grey',
|
|
||||||
help: 'cyan',
|
|
||||||
warn: 'yellow',
|
|
||||||
debug: 'blue',
|
|
||||||
error: 'red'
|
|
||||||
});
|
|
||||||
|
|
||||||
// outputs red text
|
|
||||||
document.write("this is an error".error);
|
|
||||||
|
|
||||||
// outputs yellow text
|
|
||||||
document.write("this is a warning".warn);
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
77
example.js
77
example.js
@ -1,77 +0,0 @@
|
|||||||
var colors = require('./colors');
|
|
||||||
|
|
||||||
//colors.mode = "browser";
|
|
||||||
|
|
||||||
var test = colors.red("hopefully colorless output");
|
|
||||||
console.log('Rainbows are fun!'.rainbow);
|
|
||||||
console.log('So '.italic + 'are'.underline + ' styles! '.bold + 'inverse'.inverse); // styles not widely supported
|
|
||||||
console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported
|
|
||||||
//console.log('zalgo time!'.zalgo);
|
|
||||||
console.log(test.stripColors);
|
|
||||||
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!'));
|
|
||||||
console.log(colors.italic('So ') + colors.underline('are') + colors.bold(' styles! ') + colors.inverse('inverse')); // styles not widely supported
|
|
||||||
console.log(colors.bold(colors.italic(colors.underline(colors.red('Chains are also cool.'))))); // styles not widely supported
|
|
||||||
//console.log(colors.zalgo('zalgo time!'));
|
|
||||||
console.log(colors.stripColors(test));
|
|
||||||
console.log(colors.grey("a") + colors.black(" b"));
|
|
||||||
|
|
||||||
colors.addSequencer("america", function(letter, i, exploded) {
|
|
||||||
if(letter === " ") return letter;
|
|
||||||
switch(i%3) {
|
|
||||||
case 0: return letter.red;
|
|
||||||
case 1: return letter.white;
|
|
||||||
case 2: return letter.blue;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
colors.addSequencer("random", (function() {
|
|
||||||
var available = ['bold', 'underline', 'italic', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
|
|
||||||
|
|
||||||
return function(letter, i, exploded) {
|
|
||||||
return letter === " " ? letter : letter[available[Math.round(Math.random() * (available.length - 1))]];
|
|
||||||
};
|
|
||||||
})());
|
|
||||||
|
|
||||||
console.log("AMERICA! F--K YEAH!".america);
|
|
||||||
console.log("So apparently I've been to Mars, with all the little green men. But you know, I don't recall.".random);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Custom themes
|
|
||||||
//
|
|
||||||
|
|
||||||
// Load theme with JSON literal
|
|
||||||
colors.setTheme({
|
|
||||||
silly: 'rainbow',
|
|
||||||
input: 'grey',
|
|
||||||
verbose: 'cyan',
|
|
||||||
prompt: 'grey',
|
|
||||||
info: 'green',
|
|
||||||
data: 'grey',
|
|
||||||
help: 'cyan',
|
|
||||||
warn: 'yellow',
|
|
||||||
debug: 'blue',
|
|
||||||
error: 'red'
|
|
||||||
});
|
|
||||||
|
|
||||||
// outputs red text
|
|
||||||
console.log("this is an error".error);
|
|
||||||
|
|
||||||
// outputs yellow text
|
|
||||||
console.log("this is a warning".warn);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
74
examples/normal-usage.js
Normal file
74
examples/normal-usage.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
var colors = require('../lib/index');
|
||||||
|
|
||||||
|
console.log("First some yellow text".yellow);
|
||||||
|
|
||||||
|
console.log("Underline that text".yellow.underline);
|
||||||
|
|
||||||
|
console.log("Make it bold and red".red.bold);
|
||||||
|
|
||||||
|
console.log(("Double Raindows All Day Long").rainbow)
|
||||||
|
|
||||||
|
console.log("Drop the bass".trap)
|
||||||
|
|
||||||
|
console.log("DROP THE RAINBOW BASS".trap.rainbow)
|
||||||
|
|
||||||
|
|
||||||
|
console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported
|
||||||
|
|
||||||
|
console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + ' styles! '.yellow.bold); // styles not widely supported
|
||||||
|
console.log("Zebras are so fun!".zebra);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remark: .strikethrough may not work with Mac OS Terminal App
|
||||||
|
//
|
||||||
|
console.log("This is " + "not".strikethrough + " fun.");
|
||||||
|
|
||||||
|
console.log('Background color attack!'.black.bgWhite)
|
||||||
|
console.log('Use random styles on everything!'.random)
|
||||||
|
console.log('America, Heck Yeah!'.america)
|
||||||
|
|
||||||
|
|
||||||
|
console.log('Setting themes is useful')
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom themes
|
||||||
|
//
|
||||||
|
console.log('Generic logging theme as JSON'.green.bold.underline);
|
||||||
|
// Load theme with JSON literal
|
||||||
|
colors.setTheme({
|
||||||
|
silly: 'rainbow',
|
||||||
|
input: 'grey',
|
||||||
|
verbose: 'cyan',
|
||||||
|
prompt: 'grey',
|
||||||
|
info: 'green',
|
||||||
|
data: 'grey',
|
||||||
|
help: 'cyan',
|
||||||
|
warn: 'yellow',
|
||||||
|
debug: 'blue',
|
||||||
|
error: 'red'
|
||||||
|
});
|
||||||
|
|
||||||
|
// outputs red text
|
||||||
|
console.log("this is an error".error);
|
||||||
|
|
||||||
|
// outputs yellow text
|
||||||
|
console.log("this is a warning".warn);
|
||||||
|
|
||||||
|
// outputs grey text
|
||||||
|
console.log("this is an input".input);
|
||||||
|
|
||||||
|
console.log('Generic logging theme as file'.green.bold.underline);
|
||||||
|
|
||||||
|
// Load a theme from file
|
||||||
|
colors.setTheme(__dirname + '/../themes/generic-logging.js');
|
||||||
|
|
||||||
|
// outputs red text
|
||||||
|
console.log("this is an error".error);
|
||||||
|
|
||||||
|
// outputs yellow text
|
||||||
|
console.log("this is a warning".warn);
|
||||||
|
|
||||||
|
// outputs grey text
|
||||||
|
console.log("this is an input".input);
|
||||||
|
|
||||||
|
//console.log("Don't summon".zalgo)
|
||||||
76
examples/safe-string.js
Normal file
76
examples/safe-string.js
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
var colors = require('../safe');
|
||||||
|
|
||||||
|
console.log(colors.yellow("First some yellow text"));
|
||||||
|
|
||||||
|
console.log(colors.yellow.underline("Underline that text"));
|
||||||
|
|
||||||
|
console.log(colors.red.bold("Make it bold and red"));
|
||||||
|
|
||||||
|
console.log(colors.rainbow("Double Raindows All Day Long"))
|
||||||
|
|
||||||
|
console.log(colors.trap("Drop the bass"))
|
||||||
|
|
||||||
|
console.log(colors.rainbow(colors.trap("DROP THE RAINBOW BASS")));
|
||||||
|
|
||||||
|
console.log(colors.bold.italic.underline.red('Chains are also cool.')); // styles not widely supported
|
||||||
|
|
||||||
|
|
||||||
|
console.log(colors.green('So ') + colors.underline('are') + ' ' + colors.inverse('inverse') + colors.yellow.bold(' styles! ')); // styles not widely supported
|
||||||
|
|
||||||
|
console.log(colors.zebra("Zebras are so fun!"));
|
||||||
|
|
||||||
|
console.log("This is " + colors.strikethrough("not") + " fun.");
|
||||||
|
|
||||||
|
|
||||||
|
console.log(colors.black.bgWhite('Background color attack!'));
|
||||||
|
console.log(colors.random('Use random styles on everything!'))
|
||||||
|
console.log(colors.america('America, Heck Yeah!'));
|
||||||
|
|
||||||
|
console.log('Setting themes is useful')
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom themes
|
||||||
|
//
|
||||||
|
//console.log('Generic logging theme as JSON'.green.bold.underline);
|
||||||
|
// Load theme with JSON literal
|
||||||
|
colors.setTheme({
|
||||||
|
silly: 'rainbow',
|
||||||
|
input: 'grey',
|
||||||
|
verbose: 'cyan',
|
||||||
|
prompt: 'grey',
|
||||||
|
info: 'green',
|
||||||
|
data: 'grey',
|
||||||
|
help: 'cyan',
|
||||||
|
warn: 'yellow',
|
||||||
|
debug: 'blue',
|
||||||
|
error: 'red'
|
||||||
|
});
|
||||||
|
|
||||||
|
// outputs red text
|
||||||
|
console.log(colors.error("this is an error"));
|
||||||
|
|
||||||
|
// outputs yellow text
|
||||||
|
console.log(colors.warn("this is a warning"));
|
||||||
|
|
||||||
|
// outputs grey text
|
||||||
|
console.log(colors.input("this is an input"));
|
||||||
|
|
||||||
|
|
||||||
|
// console.log('Generic logging theme as file'.green.bold.underline);
|
||||||
|
|
||||||
|
// Load a theme from file
|
||||||
|
colors.setTheme(__dirname + '/../themes/generic-logging.js');
|
||||||
|
|
||||||
|
// outputs red text
|
||||||
|
console.log(colors.error("this is an error"));
|
||||||
|
|
||||||
|
// outputs yellow text
|
||||||
|
console.log(colors.warn("this is a warning"));
|
||||||
|
|
||||||
|
// outputs grey text
|
||||||
|
console.log(colors.input("this is an input"));
|
||||||
|
|
||||||
|
// console.log(colors.zalgo("Don't summon him"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
175
lib/colors.js
Normal file
175
lib/colors.js
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Original Library
|
||||||
|
- Copyright (c) Marak Squires
|
||||||
|
|
||||||
|
Additional functionality
|
||||||
|
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
var colors = {};
|
||||||
|
module['exports'] = colors;
|
||||||
|
|
||||||
|
colors.themes = {};
|
||||||
|
|
||||||
|
var ansiStyles = colors.styles = require('./styles');
|
||||||
|
var defineProps = Object.defineProperties;
|
||||||
|
|
||||||
|
colors.supportsColor = require('./system/supports-colors');
|
||||||
|
|
||||||
|
if (typeof colors.enabled === "undefined") {
|
||||||
|
colors.enabled = colors.supportsColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
colors.strip = function(str){
|
||||||
|
return ("" + str).replace(/\x1B\[\d+m/g, '');
|
||||||
|
};
|
||||||
|
|
||||||
|
var stylize = colors.stylize = function stylize (str, style) {
|
||||||
|
return ansiStyles[style].open + str + ansiStyles[style].close;
|
||||||
|
}
|
||||||
|
|
||||||
|
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
|
||||||
|
var escapeStringRegexp = function (str) {
|
||||||
|
if (typeof str !== 'string') {
|
||||||
|
throw new TypeError('Expected a string');
|
||||||
|
}
|
||||||
|
return str.replace(matchOperatorsRe, '\\$&');
|
||||||
|
}
|
||||||
|
|
||||||
|
function build(_styles) {
|
||||||
|
var builder = function builder() {
|
||||||
|
return applyStyle.apply(builder, arguments);
|
||||||
|
};
|
||||||
|
builder._styles = _styles;
|
||||||
|
// __proto__ is used because we must return a function, but there is
|
||||||
|
// no way to create a function with a different prototype.
|
||||||
|
builder.__proto__ = proto;
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
var styles = (function () {
|
||||||
|
var ret = {};
|
||||||
|
ansiStyles.grey = ansiStyles.gray;
|
||||||
|
Object.keys(ansiStyles).forEach(function (key) {
|
||||||
|
ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
|
||||||
|
ret[key] = {
|
||||||
|
get: function () {
|
||||||
|
return build(this._styles.concat(key));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return ret;
|
||||||
|
})();
|
||||||
|
|
||||||
|
var proto = defineProps(function colors() {}, styles);
|
||||||
|
|
||||||
|
function applyStyle() {
|
||||||
|
var args = arguments;
|
||||||
|
var argsLen = args.length;
|
||||||
|
var str = argsLen !== 0 && String(arguments[0]);
|
||||||
|
if (argsLen > 1) {
|
||||||
|
for (var a = 1; a < argsLen; a++) {
|
||||||
|
str += ' ' + args[a];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!colors.enabled || !str) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
var nestedStyles = this._styles;
|
||||||
|
|
||||||
|
var i = nestedStyles.length;
|
||||||
|
while (i--) {
|
||||||
|
var code = ansiStyles[nestedStyles[i]];
|
||||||
|
str = code.open + str.replace(code.closeRe, code.open) + code.close;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function applyTheme (theme) {
|
||||||
|
for (var style in theme) {
|
||||||
|
(function(style){
|
||||||
|
colors[style] = function(str){
|
||||||
|
return colors[theme[style]](str);
|
||||||
|
};
|
||||||
|
})(style)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
colors.setTheme = function (theme) {
|
||||||
|
if (typeof theme === 'string') {
|
||||||
|
try {
|
||||||
|
colors.themes[theme] = require(theme);
|
||||||
|
applyTheme(colors.themes[theme]);
|
||||||
|
return colors.themes[theme];
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
applyTheme(theme);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
var ret = {};
|
||||||
|
Object.keys(styles).forEach(function (name) {
|
||||||
|
ret[name] = {
|
||||||
|
get: function () {
|
||||||
|
return build([name]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
var sequencer = function sequencer (map, str) {
|
||||||
|
var exploded = str.split(""), i = 0;
|
||||||
|
exploded = exploded.map(map);
|
||||||
|
return exploded.join("");
|
||||||
|
};
|
||||||
|
|
||||||
|
// custom formatter methods
|
||||||
|
colors.trap = require('./custom/trap');
|
||||||
|
colors.zalgo = require('./custom/zalgo');
|
||||||
|
|
||||||
|
// maps
|
||||||
|
colors.maps = {};
|
||||||
|
colors.maps.america = require('./maps/america');
|
||||||
|
colors.maps.zebra = require('./maps/zebra');
|
||||||
|
colors.maps.rainbow = require('./maps/rainbow');
|
||||||
|
colors.maps.random = require('./maps/random')
|
||||||
|
|
||||||
|
for (var map in colors.maps) {
|
||||||
|
(function(map){
|
||||||
|
colors[map] = function (str) {
|
||||||
|
return sequencer(colors.maps[map], str);
|
||||||
|
}
|
||||||
|
})(map)
|
||||||
|
}
|
||||||
|
|
||||||
|
defineProps(colors, init());
|
||||||
44
lib/custom/trap.js
Normal file
44
lib/custom/trap.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
module['exports'] = function runTheTrap (text, options) {
|
||||||
|
var result = "";
|
||||||
|
text = text.split('');
|
||||||
|
var trap = {
|
||||||
|
a: ["\u0040", "\u0104", "\u023a", "\u0245", "\u0394", "\u039b", "\u0414"],
|
||||||
|
b: ["\u00df", "\u0181", "\u0243", "\u026e", "\u03b2", "\u0e3f"],
|
||||||
|
c: ["\u00a9", "\u023b", "\u03fe"],
|
||||||
|
d: ["\u00d0", "\u018a", "\u0500" , "\u0501" ,"\u0502", "\u0503"],
|
||||||
|
e: ["\u00cb", "\u0115", "\u018e", "\u0258", "\u03a3", "\u03be", "\u04bc", "\u0a6c"],
|
||||||
|
f: ["\u04fa"],
|
||||||
|
g: ["\u0262"],
|
||||||
|
h: ["\u0126", "\u0195", "\u04a2", "\u04ba", "\u04c7", "\u050a"],
|
||||||
|
i: ["\u0f0f"],
|
||||||
|
j: ["\u0134"],
|
||||||
|
k: ["\u0138", "\u04a0", "\u04c3", "\u051e"],
|
||||||
|
l: ["\u0139"],
|
||||||
|
m: ["\u028d", "\u04cd", "\u04ce", "\u0520", "\u0521", "\u0d69"],
|
||||||
|
n: ["\u00d1", "\u014b", "\u019d", "\u0376", "\u03a0", "\u048a"],
|
||||||
|
o: ["\u00d8", "\u00f5", "\u00f8", "\u01fe", "\u0298", "\u047a", "\u05dd", "\u06dd", "\u0e4f"],
|
||||||
|
p: ["\u01f7", "\u048e"],
|
||||||
|
q: ["\u09cd"],
|
||||||
|
r: ["\u00ae", "\u01a6", "\u0210", "\u024c", "\u0280", "\u042f"],
|
||||||
|
s: ["\u00a7", "\u03de", "\u03df", "\u03e8"],
|
||||||
|
t: ["\u0141", "\u0166", "\u0373"],
|
||||||
|
u: ["\u01b1", "\u054d"],
|
||||||
|
v: ["\u05d8"],
|
||||||
|
w: ["\u0428", "\u0460", "\u047c", "\u0d70"],
|
||||||
|
x: ["\u04b2", "\u04fe", "\u04fc", "\u04fd"],
|
||||||
|
y: ["\u00a5", "\u04b0", "\u04cb"],
|
||||||
|
z: ["\u01b5", "\u0240"]
|
||||||
|
}
|
||||||
|
text.forEach(function(c){
|
||||||
|
c = c.toLowerCase();
|
||||||
|
var chars = trap[c] || [" "];
|
||||||
|
var rand = Math.floor(Math.random() * chars.length);
|
||||||
|
if (typeof trap[c] !== "undefined") {
|
||||||
|
result += trap[c][rand];
|
||||||
|
} else {
|
||||||
|
result += c;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
103
lib/custom/zalgo.js
Normal file
103
lib/custom/zalgo.js
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
// please no
|
||||||
|
var zalgo = module['exports'] = function zalgo(text, options) {
|
||||||
|
var soul = {
|
||||||
|
"up" : [
|
||||||
|
'̍', '̎', '̄', '̅',
|
||||||
|
'̿', '̑', '̆', '̐',
|
||||||
|
'͒', '͗', '͑', '̇',
|
||||||
|
'̈', '̊', '͂', '̓',
|
||||||
|
'̈', '͊', '͋', '͌',
|
||||||
|
'̃', '̂', '̌', '͐',
|
||||||
|
'̀', '́', '̋', '̏',
|
||||||
|
'̒', '̓', '̔', '̽',
|
||||||
|
'̉', 'ͣ', 'ͤ', 'ͥ',
|
||||||
|
'ͦ', 'ͧ', 'ͨ', 'ͩ',
|
||||||
|
'ͪ', 'ͫ', 'ͬ', 'ͭ',
|
||||||
|
'ͮ', 'ͯ', '̾', '͛',
|
||||||
|
'͆', '̚'
|
||||||
|
],
|
||||||
|
"down" : [
|
||||||
|
'̖', '̗', '̘', '̙',
|
||||||
|
'̜', '̝', '̞', '̟',
|
||||||
|
'̠', '̤', '̥', '̦',
|
||||||
|
'̩', '̪', '̫', '̬',
|
||||||
|
'̭', '̮', '̯', '̰',
|
||||||
|
'̱', '̲', '̳', '̹',
|
||||||
|
'̺', '̻', '̼', 'ͅ',
|
||||||
|
'͇', '͈', '͉', '͍',
|
||||||
|
'͎', '͓', '͔', '͕',
|
||||||
|
'͖', '͙', '͚', '̣'
|
||||||
|
],
|
||||||
|
"mid" : [
|
||||||
|
'̕', '̛', '̀', '́',
|
||||||
|
'͘', '̡', '̢', '̧',
|
||||||
|
'̨', '̴', '̵', '̶',
|
||||||
|
'͜', '͝', '͞',
|
||||||
|
'͟', '͠', '͢', '̸',
|
||||||
|
'̷', '͡', ' ҉'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
all = [].concat(soul.up, soul.down, soul.mid),
|
||||||
|
zalgo = {};
|
||||||
|
|
||||||
|
function randomNumber(range) {
|
||||||
|
var r = Math.floor(Math.random() * range);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_char(character) {
|
||||||
|
var bool = false;
|
||||||
|
all.filter(function (i) {
|
||||||
|
bool = (i === character);
|
||||||
|
});
|
||||||
|
return bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
// don't summon him
|
||||||
|
return heComes(text);
|
||||||
|
}
|
||||||
113
lib/extendStringPrototype.js
Normal file
113
lib/extendStringPrototype.js
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
var colors = require('./colors'),
|
||||||
|
styles = require('./styles');
|
||||||
|
|
||||||
|
module['exports'] = function () {
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extends prototype of native string object to allow for "foo".red syntax
|
||||||
|
//
|
||||||
|
var addProperty = function (color, func) {
|
||||||
|
String.prototype.__defineGetter__(color, func);
|
||||||
|
};
|
||||||
|
|
||||||
|
var sequencer = function sequencer (map, str) {
|
||||||
|
return function () {
|
||||||
|
var exploded = this.split(""), i = 0;
|
||||||
|
exploded = exploded.map(map);
|
||||||
|
return exploded.join("");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var stylize = function stylize (str, style) {
|
||||||
|
return styles[style].open + str + styles[style].close;
|
||||||
|
}
|
||||||
|
|
||||||
|
addProperty('strip', function () {
|
||||||
|
return colors.strip(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("trap", function(){
|
||||||
|
return colors.trap(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("zalgo", function(){
|
||||||
|
return colors.zalgo(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("zebra", function(){
|
||||||
|
return colors.zebra(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("rainbow", function(){
|
||||||
|
return colors.rainbow(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("random", function(){
|
||||||
|
return colors.random(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
addProperty("america", function(){
|
||||||
|
return colors.america(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Iterate through all default styles and colors
|
||||||
|
//
|
||||||
|
var x = Object.keys(colors.styles);
|
||||||
|
x.forEach(function (style) {
|
||||||
|
addProperty(style, function () {
|
||||||
|
return stylize(this, style);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
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 colors[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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
colors.setTheme = function (theme) {
|
||||||
|
if (typeof theme === 'string') {
|
||||||
|
try {
|
||||||
|
colors.themes[theme] = require(theme);
|
||||||
|
applyTheme(colors.themes[theme]);
|
||||||
|
return colors.themes[theme];
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
applyTheme(theme);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
12
lib/index.js
Normal file
12
lib/index.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var colors = require('./colors');
|
||||||
|
module['exports'] = colors;
|
||||||
|
|
||||||
|
// Remark: By default, colors will add style properties to String.prototype
|
||||||
|
//
|
||||||
|
// If you don't wish to extend String.prototype you can do this instead and native String will not be touched
|
||||||
|
//
|
||||||
|
// var colors = require('colors/safe);
|
||||||
|
// colors.red("foo")
|
||||||
|
//
|
||||||
|
//
|
||||||
|
var extendStringPrototype = require('./extendStringPrototype')();
|
||||||
12
lib/maps/america.js
Normal file
12
lib/maps/america.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var colors = require('../colors');
|
||||||
|
|
||||||
|
module['exports'] = (function() {
|
||||||
|
return function (letter, i, exploded) {
|
||||||
|
if(letter === " ") return letter;
|
||||||
|
switch(i%3) {
|
||||||
|
case 0: return colors.red(letter);
|
||||||
|
case 1: return colors.white(letter)
|
||||||
|
case 2: return colors.blue(letter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
13
lib/maps/rainbow.js
Normal file
13
lib/maps/rainbow.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
var colors = require('../colors');
|
||||||
|
|
||||||
|
module['exports'] = (function () {
|
||||||
|
var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
|
||||||
|
return function (letter, i, exploded) {
|
||||||
|
if (letter === " ") {
|
||||||
|
return letter;
|
||||||
|
} else {
|
||||||
|
return colors[rainbowColors[i++ % rainbowColors.length]](letter);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
8
lib/maps/random.js
Normal file
8
lib/maps/random.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
var colors = require('../colors');
|
||||||
|
|
||||||
|
module['exports'] = (function () {
|
||||||
|
var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
|
||||||
|
return function(letter, i, exploded) {
|
||||||
|
return letter === " " ? letter : letter[available[Math.round(Math.random() * (available.length - 1))]];
|
||||||
|
};
|
||||||
|
})();
|
||||||
5
lib/maps/zebra.js
Normal file
5
lib/maps/zebra.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
var colors = require('../colors');
|
||||||
|
|
||||||
|
module['exports'] = function (letter, i, exploded) {
|
||||||
|
return i % 2 === 0 ? letter : colors.inverse(letter);
|
||||||
|
};
|
||||||
77
lib/styles.js
Normal file
77
lib/styles.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
var styles = {};
|
||||||
|
module['exports'] = styles;
|
||||||
|
|
||||||
|
var codes = {
|
||||||
|
reset: [0, 0],
|
||||||
|
|
||||||
|
bold: [1, 22],
|
||||||
|
dim: [2, 22],
|
||||||
|
italic: [3, 23],
|
||||||
|
underline: [4, 24],
|
||||||
|
inverse: [7, 27],
|
||||||
|
hidden: [8, 28],
|
||||||
|
strikethrough: [9, 29],
|
||||||
|
|
||||||
|
black: [30, 39],
|
||||||
|
red: [31, 39],
|
||||||
|
green: [32, 39],
|
||||||
|
yellow: [33, 39],
|
||||||
|
blue: [34, 39],
|
||||||
|
magenta: [35, 39],
|
||||||
|
cyan: [36, 39],
|
||||||
|
white: [37, 39],
|
||||||
|
gray: [90, 39],
|
||||||
|
grey: [90, 39],
|
||||||
|
|
||||||
|
bgBlack: [40, 49],
|
||||||
|
bgRed: [41, 49],
|
||||||
|
bgGreen: [42, 49],
|
||||||
|
bgYellow: [43, 49],
|
||||||
|
bgBlue: [44, 49],
|
||||||
|
bgMagenta: [45, 49],
|
||||||
|
bgCyan: [46, 49],
|
||||||
|
bgWhite: [47, 49],
|
||||||
|
|
||||||
|
// legacy styles for colors pre v1.0.0
|
||||||
|
blackBG: [40, 49],
|
||||||
|
redBG: [41, 49],
|
||||||
|
greenBG: [42, 49],
|
||||||
|
yellowBG: [43, 49],
|
||||||
|
blueBG: [44, 49],
|
||||||
|
magentaBG: [45, 49],
|
||||||
|
cyanBG: [46, 49],
|
||||||
|
whiteBG: [47, 49]
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.keys(codes).forEach(function (key) {
|
||||||
|
var val = codes[key];
|
||||||
|
var style = styles[key] = [];
|
||||||
|
style.open = '\u001b[' + val[0] + 'm';
|
||||||
|
style.close = '\u001b[' + val[1] + 'm';
|
||||||
|
});
|
||||||
61
lib/system/supports-colors.js
Normal file
61
lib/system/supports-colors.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
var argv = process.argv;
|
||||||
|
|
||||||
|
module.exports = (function () {
|
||||||
|
if (argv.indexOf('--no-color') !== -1 ||
|
||||||
|
argv.indexOf('--color=false') !== -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.indexOf('--color') !== -1 ||
|
||||||
|
argv.indexOf('--color=true') !== -1 ||
|
||||||
|
argv.indexOf('--color=always') !== -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.stdout && !process.stdout.isTTY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('COLORTERM' in process.env) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.TERM === 'dumb') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
})();
|
||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "colors",
|
"name": "colors",
|
||||||
"description": "get colors in your node.js console like what",
|
"description": "get colors in your node.js console like what",
|
||||||
"version": "0.6.2",
|
"version": "1.0.0",
|
||||||
"author": "Marak Squires",
|
"author": "Marak Squires",
|
||||||
"homepage": "https://github.com/Marak/colors.js",
|
"homepage": "https://github.com/Marak/colors.js",
|
||||||
"bugs": "https://github.com/Marak/colors.js/issues",
|
"bugs": "https://github.com/Marak/colors.js/issues",
|
||||||
@ -10,8 +10,11 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "http://github.com/Marak/colors.js.git"
|
"url": "http://github.com/Marak/colors.js.git"
|
||||||
},
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "node tests/basic-test.js && node tests/safe-test.js"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.1.90"
|
"node": ">=0.1.90"
|
||||||
},
|
},
|
||||||
"main": "colors"
|
"main": "./lib/index"
|
||||||
}
|
}
|
||||||
|
|||||||
9
safe.js
Normal file
9
safe.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
//
|
||||||
|
// Remark: Requiring this file will use the "safe" colors API which will not touch String.prototype
|
||||||
|
//
|
||||||
|
// var colors = require('colors/safe);
|
||||||
|
// colors.red("foo")
|
||||||
|
//
|
||||||
|
//
|
||||||
|
var colors = require('./lib/colors');
|
||||||
|
module['exports'] = colors;
|
||||||
BIN
screenshots/colors.png
Normal file
BIN
screenshots/colors.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
@ -1,5 +1,5 @@
|
|||||||
var assert = require('assert'),
|
var assert = require('assert'),
|
||||||
colors = require('./colors');
|
colors = require('../lib/index');
|
||||||
|
|
||||||
var s = 'string';
|
var s = 'string';
|
||||||
|
|
||||||
@ -11,8 +11,8 @@ function aE(s, color, code) {
|
|||||||
assert.equal(s[color], a(s, code));
|
assert.equal(s[color], a(s, code));
|
||||||
assert.equal(colors[color](s), a(s, code));
|
assert.equal(colors[color](s), a(s, code));
|
||||||
assert.equal(s[color], colors[color](s));
|
assert.equal(s[color], colors[color](s));
|
||||||
assert.equal(s[color].stripColors, s);
|
assert.equal(s[color].strip, s);
|
||||||
assert.equal(s[color].stripColors, colors.stripColors(s));
|
assert.equal(s[color].strip, colors.strip(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
function h(s, color) {
|
function h(s, color) {
|
||||||
@ -28,7 +28,9 @@ assert.equal(s.italic, '\x1B[3m' + s + '\x1B[23m');
|
|||||||
assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m');
|
assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m');
|
||||||
assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m');
|
assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m');
|
||||||
assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m');
|
assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m');
|
||||||
|
|
||||||
assert.ok(s.rainbow);
|
assert.ok(s.rainbow);
|
||||||
|
|
||||||
aE(s, 'white', 37);
|
aE(s, 'white', 37);
|
||||||
aE(s, 'grey', 90);
|
aE(s, 'grey', 90);
|
||||||
aE(s, 'black', 30);
|
aE(s, 'black', 30);
|
||||||
@ -38,6 +40,7 @@ aE(s, 'green', 32);
|
|||||||
aE(s, 'magenta', 35);
|
aE(s, 'magenta', 35);
|
||||||
aE(s, 'red', 31);
|
aE(s, 'red', 31);
|
||||||
aE(s, 'yellow', 33);
|
aE(s, 'yellow', 33);
|
||||||
|
|
||||||
assert.equal(s, 'string');
|
assert.equal(s, 'string');
|
||||||
|
|
||||||
colors.setTheme({error:'red'});
|
colors.setTheme({error:'red'});
|
||||||
@ -45,26 +48,3 @@ colors.setTheme({error:'red'});
|
|||||||
assert.equal(typeof("astring".red),'string');
|
assert.equal(typeof("astring".red),'string');
|
||||||
assert.equal(typeof("astring".error),'string');
|
assert.equal(typeof("astring".error),'string');
|
||||||
|
|
||||||
colors.mode = 'browser';
|
|
||||||
assert.equal(s.bold, '<b>' + s + '</b>');
|
|
||||||
assert.equal(s.italic, '<i>' + s + '</i>');
|
|
||||||
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>');
|
|
||||||
assert.ok(s.rainbow);
|
|
||||||
stylesColors.forEach(function (color) {
|
|
||||||
assert.equal(s[color], h(s, color));
|
|
||||||
assert.equal(colors[color](s), h(s, color));
|
|
||||||
});
|
|
||||||
|
|
||||||
assert.equal(typeof("astring".red),'string');
|
|
||||||
assert.equal(typeof("astring".error),'string');
|
|
||||||
|
|
||||||
colors.mode = 'none';
|
|
||||||
stylesAll.forEach(function (style) {
|
|
||||||
assert.equal(s[style], s);
|
|
||||||
assert.equal(colors[style](s), s);
|
|
||||||
});
|
|
||||||
|
|
||||||
assert.equal(typeof("astring".red),'string');
|
|
||||||
assert.equal(typeof("astring".error),'string');
|
|
||||||
45
tests/safe-test.js
Normal file
45
tests/safe-test.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
var assert = require('assert'),
|
||||||
|
colors = require('../safe');
|
||||||
|
|
||||||
|
var s = 'string';
|
||||||
|
|
||||||
|
function a(s, code) {
|
||||||
|
return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m';
|
||||||
|
}
|
||||||
|
|
||||||
|
function aE(s, color, code) {
|
||||||
|
assert.equal(colors[color](s), a(s, code));
|
||||||
|
assert.equal(colors.strip(s), s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function h(s, color) {
|
||||||
|
return '<span style="color:' + color + ';">' + s + '</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow'];
|
||||||
|
var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']);
|
||||||
|
|
||||||
|
colors.mode = 'console';
|
||||||
|
assert.equal(colors.bold(s), '\x1B[1m' + s + '\x1B[22m');
|
||||||
|
assert.equal(colors.italic(s), '\x1B[3m' + s + '\x1B[23m');
|
||||||
|
assert.equal(colors.underline(s), '\x1B[4m' + s + '\x1B[24m');
|
||||||
|
assert.equal(colors.strikethrough(s), '\x1B[9m' + s + '\x1B[29m');
|
||||||
|
assert.equal(colors.inverse(s), '\x1B[7m' + s + '\x1B[27m');
|
||||||
|
|
||||||
|
assert.ok(colors.rainbow);
|
||||||
|
|
||||||
|
aE(s, 'white', 37);
|
||||||
|
aE(s, 'grey', 90);
|
||||||
|
aE(s, 'black', 30);
|
||||||
|
aE(s, 'blue', 34);
|
||||||
|
aE(s, 'cyan', 36);
|
||||||
|
aE(s, 'green', 32);
|
||||||
|
aE(s, 'magenta', 35);
|
||||||
|
aE(s, 'red', 31);
|
||||||
|
aE(s, 'yellow', 33);
|
||||||
|
|
||||||
|
assert.equal(s, 'string');
|
||||||
|
colors.setTheme({error:'red'});
|
||||||
|
|
||||||
|
assert.equal(typeof(colors.red("astring")), 'string');
|
||||||
|
assert.equal(typeof(colors.error("astring")), 'string');
|
||||||
@ -1,12 +0,0 @@
|
|||||||
module['exports'] = {
|
|
||||||
silly: 'rainbow',
|
|
||||||
input: 'black',
|
|
||||||
verbose: 'cyan',
|
|
||||||
prompt: 'grey',
|
|
||||||
info: 'green',
|
|
||||||
data: 'grey',
|
|
||||||
help: 'cyan',
|
|
||||||
warn: 'yellow',
|
|
||||||
debug: 'blue',
|
|
||||||
error: 'red'
|
|
||||||
};
|
|
||||||
Loading…
x
Reference in New Issue
Block a user