mirror of
				https://github.com/flynx/colors.js.git
				synced 2025-10-30 19:40:09 +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