diff --git a/colors.js b/colors.js
index 083e459..b981317 100644
--- a/colors.js
+++ b/colors.js
@@ -45,103 +45,20 @@ if (!isHeadless) {
// Prototypes the string object to have additional method calls that add terminal colors
//
var addProperty = function (color, func) {
- exports[color] = function(str) {
+ exports[color] = function (str) {
return func.apply(str);
};
String.prototype.__defineGetter__(color, func);
-}
+};
-//
-// Iterate through all default styles and colors
-//
-var x = ['bold', 'underline', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
-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("");
- var 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) {
- return err;
- }
- } else {
- applyTheme(theme);
- }
-}
-
-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 {
- addProperty(prop, function(){
- return exports[theme[prop]](this);
- });
- }
- });
-}
function stylize(str, style) {
- if (exports.mode == 'console') {
- var styles = {
+ var styles;
+
+ if (exports.mode === 'console') {
+ styles = {
//styles
'bold' : ['\033[1m', '\033[22m'],
'italic' : ['\033[3m', '\033[23m'],
@@ -159,8 +76,8 @@ function stylize(str, style) {
'red' : ['\033[31m', '\033[39m'],
'yellow' : ['\033[33m', '\033[39m']
};
- } else if (exports.mode == 'browser') {
- var styles = {
+ } else if (exports.mode === 'browser') {
+ styles = {
//styles
'bold' : ['', ''],
'italic' : ['', ''],
@@ -178,123 +95,210 @@ function stylize(str, style) {
'red' : ['', ''],
'yellow' : ['', '']
};
- } else if (exports.mode == 'none') {
+ } 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 {
+ addProperty(prop, function () {
+ return exports[theme[prop]](this);
+ });
+ }
+ });
+}
+
+
+//
+// Iterate through all default styles and colors
+//
+var x = ['bold', 'underline', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
+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));
};
-// don't summon zalgo
-addProperty('zalgo', function () {
- return zalgo(this);
+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(/\u001b\[\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) {
- r = Math.floor(Math.random()*range);
+ var r = Math.floor(Math.random() * range);
return r;
- };
+ }
function is_char(character) {
var bool = false;
- all.filter(function(i){
- bool = (i == character);
+ all.filter(function (i) {
+ bool = (i === character);
});
return bool;
}
- function heComes(text, options){
- result = '';
- options = options || {};
- options["up"] = options["up"] || true;
- options["mid"] = options["mid"] || true;
- options["down"] = options["down"] || true;
- options["size"] = options["size"] || "maxi";
- var counts;
- text = text.split('');
- for(var l in text){
- if(is_char(l)) { continue; }
- result = result + text[l];
+ function heComes(text, options) {
+ var result = '', counts, l;
+ options = options || {};
+ options["up"] = options["up"] || true;
+ options["mid"] = options["mid"] || true;
+ options["down"] = options["down"] || true;
+ options["size"] = options["size"] || "maxi";
+ text = text.split('');
+ for (l in text) {
+ if (is_char(l)) {
+ continue;
+ }
+ result = result + text[l];
+ counts = {"up" : 0, "down" : 0, "mid" : 0};
+ switch (options.size) {
+ case 'mini':
+ counts.up = randomNumber(8);
+ counts.min = randomNumber(2);
+ counts.down = randomNumber(8);
+ break;
+ case 'maxi':
+ counts.up = randomNumber(16) + 3;
+ counts.min = randomNumber(4) + 1;
+ counts.down = randomNumber(64) + 3;
+ break;
+ default:
+ counts.up = randomNumber(8) + 1;
+ counts.mid = randomNumber(6) / 2;
+ counts.down = randomNumber(8) + 1;
+ break;
+ }
- counts = {"up" : 0, "down" : 0, "mid" : 0};
-
- switch(options.size) {
- case 'mini':
- counts.up = randomNumber(8);
- counts.min= randomNumber(2);
- counts.down = randomNumber(8);
- break;
- case 'maxi':
- counts.up = randomNumber(16) + 3;
- counts.min = randomNumber(4) + 1;
- counts.down = randomNumber(64) + 3;
- break;
- default:
- counts.up = randomNumber(8) + 1;
- counts.mid = randomNumber(6) / 2;
- counts.down= randomNumber(8) + 1;
- break;
- }
-
- var arr = ["up", "mid", "down"];
- for(var d in arr){
- var index = arr[d];
- for (var i = 0 ; i <= counts[index]; i++)
- {
- if(options[index]) {
- result = result + soul[index][randomNumber(soul[index].length)];
- }
- }
+ var arr = ["up", "mid", "down"];
+ for (var d in arr) {
+ var index = arr[d];
+ for (var i = 0 ; i <= counts[index]; i++) {
+ if (options[index]) {
+ result = result + soul[index][randomNumber(soul[index].length)];
}
}
- return result;
- };
+ }
+ }
+ return result;
+ }
return heComes(text);
}
-addProperty('stripColors', function() {
- return ("" + this).replace(/\u001b\[\d+m/g,'');
-});
+
+// don't summon zalgo
+addProperty('zalgo', function () {
+ return zalgo(this);
+});
\ No newline at end of file