Skip to content

Commit 37ff527

Browse files
committed
Customize the way we render sidebar
1 parent 0f1c0a4 commit 37ff527

File tree

3 files changed

+146
-60
lines changed

3 files changed

+146
-60
lines changed

docs/_sidebar.md

+59-59
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,62 @@
11
- [CHANGELOG](/CHANGELOG.md)
22
- [CONTRIBUTING](/CONTRIBUTING.md)
33
- [DEVELOPMENT](/DEVELOPMENT.md)
4-
- [allow_unused_http_interactions](/allow_unused_http_interactions.md)
5-
- cassettes
6-
- [allow_unused_http_interactions](/cassettes/allow_unused_http_interactions.md)
7-
- [automatic_re_recording](/cassettes/automatic_re_recording.md)
8-
- [decompress](/cassettes/decompress.md)
9-
- [drop_unused_requests](/cassettes/drop_unused_requests.md)
10-
- [dynamic_erb](/cassettes/dynamic_erb.md)
11-
- [exclusive](/cassettes/exclusive.md)
12-
- [format](/cassettes/format.md)
13-
- [freezing_time](/cassettes/freezing_time.md)
14-
- [naming](/cassettes/naming.md)
15-
- [no_cassette](/cassettes/no_cassette.md)
16-
- [update_content_length_header](/cassettes/update_content_length_header.md)
17-
- configuration
18-
- [allow_http_connections_when_no_cassette](/configuration/allow_http_connections_when_no_cassette.md)
19-
- [cassette_library_dir](/configuration/cassette_library_dir.md)
20-
- [debug_logging](/configuration/debug_logging.md)
21-
- [default_cassette_options](/configuration/default_cassette_options.md)
22-
- [filter_sensitive_data](/configuration/filter_sensitive_data.md)
23-
- [hook_into](/configuration/hook_into.md)
24-
- [ignore_request](/configuration/ignore_request.md)
25-
- [preserve_exact_body_bytes](/configuration/preserve_exact_body_bytes.md)
26-
- [query_parser](/configuration/query_parser.md)
27-
- [uri_parser](/configuration/uri_parser.md)
28-
- hooks
29-
- [after_http_request](/hooks/after_http_request.md)
30-
- [around_http_request](/hooks/around_http_request.md)
31-
- [before_http_request](/hooks/before_http_request.md)
32-
- [before_playback](/hooks/before_playback.md)
33-
- [before_record](/hooks/before_record.md)
34-
- http_libraries
35-
- [em_http_request](/http_libraries/em_http_request.md)
36-
- [net_http](/http_libraries/net_http.md)
37-
- middleware
38-
- [faraday](/middleware/faraday.md)
39-
- [rack](/middleware/rack.md)
40-
- record_modes
41-
- [all](/record_modes/all.md)
42-
- [new_episodes](/record_modes/new_episodes.md)
43-
- [none](/record_modes/none.md)
44-
- [once](/record_modes/once.md)
45-
- [record_on_error](/record_modes/record_on_error.md)
46-
- request_matching
47-
- [body](/request_matching/body.md)
48-
- [body_as_json](/request_matching/body_as_json.md)
49-
- [custom_matcher](/request_matching/custom_matcher.md)
50-
- [headers](/request_matching/headers.md)
51-
- [host](/request_matching/host.md)
52-
- [identical_request_sequence](/request_matching/identical_request_sequence.md)
53-
- [method](/request_matching/method.md)
54-
- [path](/request_matching/path.md)
55-
- [playback_repeats](/request_matching/playback_repeats.md)
56-
- [query](/request_matching/query.md)
57-
- [uri](/request_matching/uri.md)
58-
- [uri_without_param](/request_matching/uri_without_param.md)
59-
- test_frameworks
60-
- [cucumber](/test_frameworks/cucumber.md)
61-
- [rspec_metadata](/test_frameworks/rspec_metadata.md)
62-
- [test_unit](/test_frameworks/test_unit.md)
4+
- [Allow unused http interactions](/allow_unused_http_interactions.md)
5+
- Cassettes
6+
- [Allow unused http interactions](/cassettes/allow_unused_http_interactions.md)
7+
- [Automatic re recording](/cassettes/automatic_re_recording.md)
8+
- [Decompress](/cassettes/decompress.md)
9+
- [Drop unused requests](/cassettes/drop_unused_requests.md)
10+
- [Dynamic erb](/cassettes/dynamic_erb.md)
11+
- [Exclusive](/cassettes/exclusive.md)
12+
- [Format](/cassettes/format.md)
13+
- [Freezing time](/cassettes/freezing_time.md)
14+
- [Naming](/cassettes/naming.md)
15+
- [No cassette](/cassettes/no_cassette.md)
16+
- [Update content length header](/cassettes/update_content_length_header.md)
17+
- Configuration
18+
- [Allow http connections when no cassette](/configuration/allow_http_connections_when_no_cassette.md)
19+
- [Cassette library dir](/configuration/cassette_library_dir.md)
20+
- [Debug logging](/configuration/debug_logging.md)
21+
- [Default cassette options](/configuration/default_cassette_options.md)
22+
- [Filter sensitive data](/configuration/filter_sensitive_data.md)
23+
- [Hook into](/configuration/hook_into.md)
24+
- [Ignore request](/configuration/ignore_request.md)
25+
- [Preserve exact body bytes](/configuration/preserve_exact_body_bytes.md)
26+
- [Query parser](/configuration/query_parser.md)
27+
- [Uri parser](/configuration/uri_parser.md)
28+
- Hooks
29+
- [After http request](/hooks/after_http_request.md)
30+
- [Around http request](/hooks/around_http_request.md)
31+
- [Before http request](/hooks/before_http_request.md)
32+
- [Before playback](/hooks/before_playback.md)
33+
- [Before record](/hooks/before_record.md)
34+
- Http libraries
35+
- [Em http request](/http_libraries/em_http_request.md)
36+
- [Net http](/http_libraries/net_http.md)
37+
- Middleware
38+
- [Faraday](/middleware/faraday.md)
39+
- [Rack](/middleware/rack.md)
40+
- Record modes
41+
- [All](/record_modes/all.md)
42+
- [New episodes](/record_modes/new_episodes.md)
43+
- [None](/record_modes/none.md)
44+
- [Once](/record_modes/once.md)
45+
- [Record on error](/record_modes/record_on_error.md)
46+
- Request matching
47+
- [Body](/request_matching/body.md)
48+
- [Body as json](/request_matching/body_as_json.md)
49+
- [Custom matcher](/request_matching/custom_matcher.md)
50+
- [Headers](/request_matching/headers.md)
51+
- [Host](/request_matching/host.md)
52+
- [Identical request sequence](/request_matching/identical_request_sequence.md)
53+
- [Method](/request_matching/method.md)
54+
- [Path](/request_matching/path.md)
55+
- [Playback repeats](/request_matching/playback_repeats.md)
56+
- [Query](/request_matching/query.md)
57+
- [Uri](/request_matching/uri.md)
58+
- [Uri without param](/request_matching/uri_without_param.md)
59+
- Test frameworks
60+
- [Cucumber](/test_frameworks/cucumber.md)
61+
- [Rspec metadata](/test_frameworks/rspec_metadata.md)
62+
- [Test unit](/test_frameworks/test_unit.md)

script/doc

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ gherkin2markdown features/ docs/
77
echo ">> Feature file to markdown ok"
88
cp -f CHANGELOG.md CONTRIBUTING.md DEVELOPMENT.md README.md docs/
99
echo ">> Copy ok"
10-
npx docsify-auto-sidebar -d docs/
10+
node script/docsify-auto-sidebar.js -d docs
1111
echo ">> Sidebar ok"
1212
npx http-server docs/

script/docsify-auto-sidebar.js

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env node
2+
"use strict";
3+
exports.__esModule = true;
4+
var fs = require("fs");
5+
var path = require("path");
6+
var yargs = require("yargs");
7+
var ignores = /node_modules|^\.|_sidebar|_docsify/;
8+
var isDoc = /.md$/;
9+
function niceName(name) {
10+
var splitName = name.split('-');
11+
if (Number.isNaN(Number(splitName[0]))) {
12+
var str = splitName.join(' ').replace(/_/g, ' ');
13+
return str.charAt(0).toUpperCase() + str.slice(1);
14+
}
15+
return splitName.slice(1).join(' ');
16+
}
17+
function buildTree(dirPath, name, dirLink) {
18+
if (name === void 0) { name = ''; }
19+
if (dirLink === void 0) { dirLink = ''; }
20+
var children = [];
21+
for (var _i = 0, _a = fs.readdirSync(dirPath); _i < _a.length; _i++) {
22+
var fileName = _a[_i];
23+
if (ignores.test(fileName))
24+
continue;
25+
var fileLink = dirLink + '/' + fileName;
26+
var filePath = path.join(dirPath, fileName);
27+
if (fs.statSync(filePath).isDirectory()) {
28+
var sub = buildTree(filePath, fileName, fileLink);
29+
if (sub.children != null && sub.children.length > 0)
30+
children.push(sub);
31+
}
32+
else if (isDoc.test(fileName)) {
33+
children.push({ name: fileName, link: fileLink });
34+
}
35+
}
36+
return { name: name, children: children, link: dirLink };
37+
}
38+
function renderToMd(tree, linkDir) {
39+
if (linkDir === void 0) { linkDir = false; }
40+
if (!tree.children) {
41+
return "- [".concat(niceName(path.basename(tree.name, '.md')), "](").concat(tree.link.replace(/ /g, '%20'), ")");
42+
}
43+
else {
44+
var fileNames_1 = new Set(tree.children.filter(function (c) { return !c.children; }).map(function (c) { return c.name; }));
45+
var dirNames_1 = new Set(tree.children.filter(function (c) { return c.children; }).map(function (c) { return c.name + '.md'; }));
46+
var content = tree.children
47+
.filter(function (c) { return (!fileNames_1.has(c.name) || !dirNames_1.has(c.name)) && c.name != 'README.md'; })
48+
.map(function (c) { return renderToMd(c, dirNames_1.has(c.name + '.md') && fileNames_1.has(c.name + '.md')); })
49+
.join('\n')
50+
.split('\n')
51+
.map(function (item) { return ' ' + item; })
52+
.join('\n');
53+
var prefix = '';
54+
if (tree.name) {
55+
if (linkDir || fileNames_1.has('README.md')) {
56+
var linkPath = tree.link.replace(/ /g, '%20');
57+
if (fileNames_1.has('README.md'))
58+
linkPath += '/README.md';
59+
prefix = "- [".concat(niceName(path.basename(tree.name, '.md')), "](").concat(linkPath, ")\n");
60+
}
61+
else
62+
prefix = "- ".concat(niceName(tree.name), "\n");
63+
}
64+
return prefix + content;
65+
}
66+
}
67+
var args = yargs
68+
.wrap(yargs.terminalWidth() - 1)
69+
.usage('$0 [-d docsDir] ')
70+
.options({
71+
docsDir: {
72+
alias: 'd',
73+
type: 'string',
74+
describe: 'Where to look for the documentation (defaults to docs subdir of repo directory)'
75+
}
76+
}).argv;
77+
var dir = path.resolve(process.cwd(), args.docsDir || './docs');
78+
try {
79+
var root = buildTree(dir);
80+
fs.writeFileSync(path.join(dir, '_sidebar.md'), renderToMd(root));
81+
}
82+
catch (e) {
83+
console.error('Unable to generate sidebar for directory', dir);
84+
console.error('Reason:', e.message);
85+
process.exit(1);
86+
}

0 commit comments

Comments
 (0)