Skip to content

Commit 51aed5d

Browse files
committed
tools: build doc/api/all.html by combining generated HTML
Combine the toc and api contents from the generated doc/api/*.html files. This ensures that the single page version of the documentation exactly matches the individual pages. Fixes nodejs#20100
1 parent 8836a0d commit 51aed5d

File tree

2,711 files changed

+295574
-492
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,711 files changed

+295574
-492
lines changed

Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,9 @@ out/doc/api/%.json: doc/api/%.md
635635
out/doc/api/%.html: doc/api/%.md
636636
$(call available-node, $(gen-html))
637637

638+
out/doc/api/all.html: $(filter-out out/doc/api/all.html, $(apidocs_html))
639+
$(call available-node, tools/doc/allhtml.js)
640+
638641
.PHONY: docopen
639642
docopen: $(apidocs_html)
640643
@$(PYTHON) -mwebbrowser file://$(PWD)/out/doc/api/all.html

tools/doc/allhtml.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'use strict';
2+
3+
// Build all.html by combining the generated toc and apicontent from each
4+
// of the generated html files.
5+
6+
const fs = require('fs');
7+
const { JSDOM } = require('jsdom');
8+
9+
const source = `${__dirname}/../../out/doc/api`;
10+
11+
const html_files = fs.readdirSync(source, 'utf8')
12+
.filter((name) => name.includes('.html') && name !== 'all.html');
13+
14+
const all = {};
15+
for (const file of html_files) {
16+
all[file] = new JSDOM(fs.readFileSync(source + '/' + file, 'utf8'))
17+
.window.document;
18+
}
19+
20+
const doc = all['_toc.html'].documentElement;
21+
const list = Array.from(doc.querySelectorAll('#column2 ul li a'))
22+
.map((node) => node.getAttribute('href'));
23+
24+
const canonical = doc.querySelector('link[rel=canonical]');
25+
canonical.setAttribute('href',
26+
canonical.getAttribute('href').replace('_toc', 'all'));
27+
28+
doc.querySelector('body').setAttribute('id', 'api-section-all');
29+
30+
const owner = doc.ownerDocument;
31+
const toc = doc.querySelector('#toc');
32+
const ul = owner.createElement('ul');
33+
toc.appendChild(ul);
34+
const api = doc.querySelector('#apicontent');
35+
while (api.firstChild) api.firstChild.remove();
36+
37+
const title = doc.querySelector('title');
38+
title.textContent = title.textContent.replace(/.* \| /, '');
39+
doc.querySelector('#column1').setAttribute('data-id', 'all');
40+
doc.querySelector('a[href="_toc.json"]').setAttribute('href', 'all.json');
41+
42+
for (const file of list) {
43+
if (!all[file]) continue;
44+
45+
let source = all[file].querySelector('#toc ul');
46+
while (source.firstChild) ul.appendChild(owner.adoptNode(source.firstChild));
47+
48+
source = all[file].querySelector('#apicontent');
49+
while (source.firstChild) api.appendChild(owner.adoptNode(source.firstChild));
50+
}
51+
52+
const output = `<!doctype html>\n${doc.outerHTML}`;
53+
fs.writeFileSync(source + '/all.html', output, 'utf8');

tools/doc/node_modules/.bin/acorn

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/escodegen

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/esgenerate

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/esparse

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/esvalidate

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/sshpk-conv

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/sshpk-sign

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/sshpk-verify

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/.bin/uuid

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/abab/LICENSE.md

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/abab/README.md

+52
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/abab/index.js

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/abab/lib/atob.js

+109
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/doc/node_modules/abab/lib/btoa.js

+65
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)