diff --git a/lib/extendStringPrototype.js b/lib/extendStringPrototype.js index 0d48614..f56bd26 100644 --- a/lib/extendStringPrototype.js +++ b/lib/extendStringPrototype.js @@ -73,18 +73,16 @@ module['exports'] = function() { } 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; - }); + var tmp = colors[theme[prop][0]]; + for (var t = 1; t < theme[prop].length; t++) { + tmp = tmp[theme[prop][t]]; + } + colors[prop] = tmp; } + addProperty(prop, function() { + return colors[prop](this); + }); } }); } diff --git a/tests/basic-test.js b/tests/basic-test.js index 4cabf1a..8ffb149 100644 --- a/tests/basic-test.js +++ b/tests/basic-test.js @@ -61,3 +61,13 @@ assert.equal(typeof ('astring'.red), 'string'); assert.equal(typeof ('astring'.error), 'string'); assert.equal(s, 'string'); + +colors.setTheme({custom: ['blue', 'bold', 'underline']}); +assert.equal(colors.custom(s), + '\x1b[34m' + '\x1b[1m' + '\x1b[4m' + s + + '\x1b[24m' + '\x1b[22m' + '\x1b[39m' ); + +colors.setTheme({custom: ['red', 'italic', 'inverse']}); +assert.equal(colors.custom(s), + '\x1b[31m' + '\x1b[3m' + '\x1b[7m' + s + + '\x1b[27m' + '\x1b[23m' + '\x1b[39m' ); \ No newline at end of file diff --git a/tests/safe-test.js b/tests/safe-test.js index db886eb..b2a091c 100644 --- a/tests/safe-test.js +++ b/tests/safe-test.js @@ -57,3 +57,12 @@ colors.setTheme({error: 'red'}); assert.equal(typeof (colors.red('astring')), 'string'); assert.equal(typeof (colors.error('astring')), 'string'); +colors.setTheme({custom: ['blue', 'bold', 'underline']}); +assert.equal(colors.custom(s), + '\x1b[4m' + '\x1b[1m' + '\x1b[34m' + s + + '\x1b[39m' + '\x1b[22m' + '\x1b[24m' ); + +colors.setTheme({custom: ['red', 'italic', 'inverse']}); +assert.equal(colors.custom(s), + '\x1b[7m' + '\x1b[3m' + '\x1b[31m' + s + + '\x1b[39m' + '\x1b[23m' + '\x1b[27m' );