Skip to content

Commit 9e4f58b

Browse files
committed
Switch to custom build script instead of gulp
1 parent b315a37 commit 9e4f58b

19 files changed

+171
-4082
lines changed

README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,13 @@ build the site's html files.
3939

4040
Prerequisites for building
4141
* [Node](http://nodejs.org/download/)
42-
* [Sass](http://sass-lang.com/install)
43-
* [Gulp](http://gulpjs.com/)
4442
* Run: npm install
4543

4644
To build the documentation, run:
4745

48-
* gulp
46+
* node build.js
4947

50-
From the root folder. The generated files are in the site/ folder.
48+
From the root folder. The generated files are in the docs/ folder.
5149

5250
### Documentation File Format
5351
The information for each type is stored in a .jsdoc file. This is a

build.js

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
'use strict';
2+
3+
const fs = require('fs');
4+
const path = require('path');
5+
const util = require('util');
6+
const jsdoc = require('./jsdocparser.js');
7+
const ejs = require('ejs');
8+
const template = require('./template.js');
9+
10+
const sets = {};
11+
12+
const generateMetadata = filename => {
13+
const obj = jsdoc.processFile(filename);
14+
obj.jsdocSourceFile = filename;
15+
16+
const setName = path.basename(path.dirname(filename));
17+
18+
const hasDescriptions = !!obj.description ||
19+
obj.constructors.some(constructor => !!constructor.description) ||
20+
obj.instanceMembers.some(member => !!member.description) ||
21+
obj.prototypeMembers.some(member => !!member.description);
22+
23+
const metadata = {
24+
name: obj.name,
25+
setName: setName,
26+
hasDescriptions: hasDescriptions
27+
};
28+
29+
const addMembers = name => {
30+
metadata[name] = obj[name].map(member => ({ name: member.name, onname: member.onname }));
31+
};
32+
33+
addMembers('instanceProperties');
34+
addMembers('instanceMethods');
35+
addMembers('instanceEvents');
36+
addMembers('properties');
37+
addMembers('methods');
38+
39+
let set = sets[setName];
40+
if (!set) {
41+
set = sets[setName] = [];
42+
}
43+
set.push(metadata);
44+
45+
const pretty = false;
46+
const json = JSON.stringify(metadata, null, pretty ? ' ' : undefined);
47+
48+
fs.writeFileSync(`./tmp/metadata/${obj.name}.json`, json, { flag: 'wx' });
49+
50+
obj.apiSet = { name: setName };
51+
createPage(obj);
52+
};
53+
54+
55+
const createPage = (obj) => {
56+
// Validation
57+
const errors = [];
58+
const all = [].concat(obj.overloads, obj.constructors, obj.instanceProperties, obj.instanceMethods, obj.properties, obj.methods);
59+
60+
all.forEach(member => {
61+
if (!member) {
62+
errors.push('undefined member in ' + obj.name);
63+
return;
64+
}
65+
66+
if (!member.spec) {
67+
errors.push('No spec for ' + obj.name + '.' + member.name);
68+
}
69+
70+
if (!member.description) {
71+
errors.push('No description for ' + obj.name + '.' + member.name);
72+
}
73+
74+
if (member.type === 'Function') {
75+
// TODO: check member.parameters
76+
}
77+
});
78+
79+
80+
if (errors.length) {
81+
console.warn(errors.join('\n'));
82+
}
83+
84+
const body = template.render('object', { obj });
85+
86+
const title = obj.name + ' JavaScript API';
87+
const html = template.render('page', { title, body, obj });
88+
89+
fs.writeFileSync(`./docs/${obj.name}.html`, html);
90+
};
91+
92+
93+
fs.rmdirSync('./tmp', { recursive: true });
94+
fs.mkdirSync('./tmp/metadata', { recursive: true });
95+
96+
fs.readdirSync('./docs').map(doc => {
97+
fs.unlinkSync(`./docs/${doc}`);
98+
});
99+
100+
fs.readdirSync('./content').map(set => {
101+
fs.readdirSync(`./content/${set}/`).map(doc => {
102+
generateMetadata(`./content/${set}/${doc}`);
103+
});
104+
});
105+
106+
fs.writeFileSync('./tmp/apisets.json', JSON.stringify(sets));
107+
108+
const makeCustomPage = (page, extension = 'html') => {
109+
const locals = {
110+
apiSets: sets,
111+
wrapInPageTemplate: true
112+
};
113+
114+
let output = template.render(page, locals);
115+
if (locals.wrapInPageTemplate) {
116+
locals.body = output;
117+
output = template.render('page', locals);
118+
}
119+
120+
fs.writeFileSync(`./docs/${page}.${extension}`, output);
121+
};
122+
123+
makeCustomPage('feedback');
124+
makeCustomPage('index');
125+
makeCustomPage('license');
126+
makeCustomPage('thankyou');
127+
makeCustomPage('javascripture', 'js');
128+
129+
fs.readdirSync('./static').map(file => {
130+
fs.copyFile(`./static/${file}`, `./docs/${file}`, err => { if (err) { throw err } });
131+
});
132+

docs/CSSStyleDeclaration.html

+2-2
Large diffs are not rendered by default.

docs/PointerEvent.html

+2-2
Large diffs are not rendered by default.

docs/ResizeObserver.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!DOCTYPE html><html><head><meta charset="utf-8"><title>ResizeObserver JavaScript API</title><meta name="description" content="Interactive API reference for the JavaScript ResizeObserver Object. ReszieObserver allows you to provide a function that is called asynchronously when the size of observed elements change."><link rel="stylesheet" type="text/css" href="styles.css"><script type="text/javascript">var _gaq = _gaq || [];
1+
<!DOCTYPE html><html><head><meta charset="utf-8"><title>ResizeObserver JavaScript API</title><meta name="description" content="Interactive API reference for the JavaScript ResizeObserver Object. ResizeObserver allows you to provide a function that is called asynchronously when the size of observed elements change."><link rel="stylesheet" type="text/css" href="styles.css"><script type="text/javascript">var _gaq = _gaq || [];
22
_gaq.push(['_setAccount', 'UA-23450559-1']);
33
_gaq.push(['_trackPageview']);
44
(function() {
@@ -71,4 +71,4 @@
7171
observer.observe(foo);
7272
foo.style.height = &#39;10px&#39;;
7373
&lt;/script&gt;
74-
</textarea><a onclick='executeHTMLExample(this.parentNode.parentNode, "ResizeObserver.unobserve"); return false' href="#" class="run">Run</a></div><div class="resultsPanel"><h4>Results:</h4><div style="position: relative"><div class="htmlerrormessage" style="display: none"></div><iframe class="output" width="350" height="200"></iframe><pre class="results"> </pre></div></div></div><p></p><div class="membermetadata"><a href="https://wicg.github.io/ResizeObserver/#dom-resizeobserver-unobserve" class="spec">Spec</a></div></div></div></div><div class="bottomnav"><a href="/">home</a> <a href="/license">license</a> <a href="https://github.com/nkronlage/JavaScripture">contribute</a> <a href="/feedback">feedback</a></div><div class="copyright">Copyright © JavaScripture Contributors</div></div></div></body><script src="javascripture.js"></script></html>
74+
</textarea><a onclick='executeHTMLExample(this.parentNode.parentNode, "ResizeObserver.unobserve"); return false' href="#" class="run">Run</a></div><div class="resultsPanel"><h4>Results:</h4><div style="position: relative"><div class="htmlerrormessage" style="display: none"></div><iframe class="output" width="350" height="200"></iframe><pre class="results"> </pre></div></div></div><p></p><div class="membermetadata"><a href="https://wicg.github.io/ResizeObserver/#dom-resizeobserver-unobserve" class="spec">Spec</a></div></div></div></div><div class="bottomnav"><a href="/">home</a> <a href="/license">license</a> <a href="https://github.com/nkronlage/JavaScripture">contribute</a> <a href="/feedback">feedback</a></div><div class="copyright">Copyright © JavaScripture Contributors</div></div></div></body><script src="javascripture.js"></script></html>

0 commit comments

Comments
 (0)