Skip to content

Commit df8e634

Browse files
committed
Completed theme support
- Removed colors from config as it wasn't used anymore - Added couple more themes - Added tests to check for invalid values
1 parent 5cc6fee commit df8e634

File tree

8 files changed

+76
-35
lines changed

8 files changed

+76
-35
lines changed

bin/tldr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ program
2323
.option('--linux', 'Override the operating system with Linux')
2424
.option('--osx', 'Override the operating system with OSX')
2525
.option('--sunos', 'Override the operating system with SunOS')
26-
.option('-t, --theme [theme]', 'Color theme (bw, bw-simple, original)')
26+
.option('-t, --theme [theme]', 'Color theme (simple, base16, ocean)')
2727
//
2828
// CACHE MANAGEMENT
2929
//

config.json

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,42 @@
11
{
22
"pagesRepository": "tldr-pages/tldr",
33
"url": "http://tldr-pages.github.io/assets/tldr.zip",
4-
"colors": {
5-
"text": "green",
6-
"command-background": "black",
7-
"command-foreground": "red",
8-
"command-token": "white"
9-
},
104
"themes": {
11-
"bw": {
12-
"name": "bold, underline",
5+
"simple": {
6+
"name": "bold,underline",
137
"description": "bold",
148
"exampleDescription": "",
159
"exampleCode": "",
16-
"exampleArgument": "underline"
17-
},
18-
"plain": {
19-
"name": "",
20-
"description": "",
21-
"exampleDescription": "",
22-
"exampleCode": "",
23-
"exampleArgument": ""
10+
"exampleToken": "underline"
2411
},
25-
"original": {
12+
"base16": {
2613
"name": "bold",
2714
"description": "",
2815
"exampleDescription": "green",
2916
"exampleCode": "red",
30-
"exampleArgument": ""
17+
"exampleToken": "cyan"
3118
},
32-
"simple": {
19+
"ocean": {
3320
"name": "bold,cyan",
3421
"description": "",
3522
"exampleDescription": "green",
36-
"exampleCode": "",
37-
"exampleArgument": "dim"
23+
"exampleCode": "cyan",
24+
"exampleToken": "dim"
25+
},
26+
"inverse": {
27+
"name": "bold,inverse",
28+
"description": "inverse",
29+
"exampleDescription": "black",
30+
"exampleCode": "inverse",
31+
"exampleToken": "green,bgBlack,inverse"
32+
},
33+
"matrix": {
34+
"name": "bold",
35+
"description": "underline",
36+
"exampleDescription": "green,bgBlack",
37+
"exampleCode": "green,bgBlack",
38+
"exampleToken": "green,bold,bgBlack"
3839
}
3940
},
40-
"theme": "bw"
41+
"theme": "simple"
4142
}

lib/config.js

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function load() {
3636
}
3737

3838
var merged = defaults(customConfig, defaultConfig);
39-
var errors = map(merged.colors, validateColor);
39+
var errors = map(merged.themes, validateThemeItem);
4040
errors.push(validatePlatform(merged.platform));
4141
errors = compact(errors);
4242

@@ -54,10 +54,42 @@ function validatePlatform(os) {
5454
return null;
5555
}
5656

57-
function validateColor(colorName, key) {
58-
var ansi = ['white','black','blue','cyan','green','magenta','red','yellow'];
59-
if (ansi.indexOf(colorName) < 0) {
60-
return 'Invalid ANSI color : ' + key + ' = ' + colorName;
57+
function validateThemeItem(field, key) {
58+
var validValues = ['',
59+
'reset',
60+
'bold',
61+
'dim',
62+
'italic',
63+
'underline',
64+
'inverse',
65+
'hidden',
66+
'black',
67+
'red',
68+
'green',
69+
'yellow',
70+
'blue',
71+
'magenta',
72+
'cyan',
73+
'white',
74+
'gray',
75+
'bgBlack',
76+
'bgRed',
77+
'bgGreen',
78+
'bgYellow',
79+
'bgBlue',
80+
'bgMagenta',
81+
'bgCyan',
82+
'bgWhite'
83+
];
84+
for (var item in field) {
85+
if (field.hasOwnProperty(item)) {
86+
var tokens = field[item].split(',');
87+
for (var i=0; i < tokens.length; i++) {
88+
if (validValues.indexOf(tokens[i]) < 0) {
89+
return 'Invalid ANSI color : ' + tokens[i] + ' in ' + key + ' theme';
90+
}
91+
}
92+
}
6193
}
6294
return null;
6395
}

lib/render.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ exports.toANSI = function(page) {
1111
// every second part is a token
1212
return ' ' + parts.reduce(function(memo, item, i) {
1313
if (i % 2) {
14-
return memo + theme.renderExampleArgument(item);
14+
return memo + theme.renderExampleToken(item);
1515
}
1616
return memo + theme.renderExampleCode(item);
1717
}, '');

lib/theme.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var Theme = function(options) {
3434
renderDescription: renderPartMemoized('description'),
3535
renderExampleDescription: renderPartMemoized('exampleDescription'),
3636
renderExampleCode: renderPartMemoized('exampleCode'),
37-
renderExampleArgument: renderPartMemoized('exampleArgument')
37+
renderExampleToken: renderPartMemoized('exampleToken')
3838
};
3939
};
4040

test/config.spec.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,18 @@ describe('Config', function() {
1616

1717
var CUSTOM_INVALID =
1818
'{' +
19-
' "colors": {' +
20-
' "text": "pretty" ' +
19+
'"themes": {' +
20+
' "simple": {' +
21+
' "name": "bold,underline",' +
22+
' "description": "#876992",' +
23+
' "exampleDescription": "",' +
24+
' "exampleCode": "",' +
25+
' "exampleToken": "underline"' +
2126
' }' +
27+
'}' +
2228
'}';
2329

30+
2431
beforeEach(function() {
2532
sinon.stub(fs, 'readFileSync');
2633
config.reset();

test/render.spec.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ var config = require('../lib/config');
77
describe('Render', function() {
88

99
beforeEach(function() {
10-
config.get().theme = 'plain';
10+
config.reset();
11+
config.get().theme = 'base16';
1112
});
1213

1314
it('surrounds the output with blank lines', function() {

test/theme.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ describe('Theme', function() {
1010
description: 'red, underline',
1111
exampleDescription: 'blue',
1212
exampleCode: 'bold',
13-
exampleArgument: 'yellow,dim,underline'
13+
exampleToken: 'yellow,dim,underline'
1414
});
1515

1616
it('should render name with green and bold', function () {
@@ -38,7 +38,7 @@ describe('Theme', function() {
3838
});
3939

4040
it('should render example argument with yellow, dim, underline', function() {
41-
theme.renderExampleArgument('text')
41+
theme.renderExampleToken('text')
4242
.should.equal(
4343
chalk.yellow.dim.underline('text'));
4444
});

0 commit comments

Comments
 (0)