113 lines
3 KiB
JavaScript
113 lines
3 KiB
JavaScript
|
var colors = require('./colors');
|
||
|
|
||
|
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("");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
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 colors.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 = colors[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);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
};
|