- 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('stripColors', 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') {
- colors[prop] = colors[theme[prop]];
- 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);
- }
- };
-
- };