Skip to content

Commit 984a99a

Browse files
authored
Merge pull request graphql#76 from graphql/new-source
Merge: New source
2 parents 5abf688 + 1a1e8f8 commit 984a99a

File tree

103 files changed

+8269
-4625
lines changed

Some content is hidden

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

103 files changed

+8269
-4625
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ node_modules
66
npm-debug.log
77

88
/build/
9+
.tmp.*

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# WORK IN PROGRESS
2+
3+
This new-source branch represents a work in progress improvement to graphql.org
4+
15
# Contributing
26

37
Organization gh-pages deploy the `master` branch, so active development occurs

package.json

+6-3
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@
2525
"babel-runtime": "^5.8.20",
2626
"express": "^4.13.3",
2727
"js-yaml": "^3.4.0",
28-
"react": "^0.14.3",
28+
"less": "^2.7.1",
29+
"react": "15.3.1",
30+
"react-dom": "15.3.1",
2931
"sane": "^1.2.0",
3032
"webpack": "^1.12.1"
3133
},
3234
"dependencies": {
3335
"codemirror": "^5.6.0",
34-
"codemirror-graphql": "^0.1.1",
35-
"graphql": "^0.4.3",
36+
"codemirror-graphql": "^0.5.7",
37+
"graphql": "^0.7.0",
38+
"graphql-tools": "^0.6.6",
3639
"marked": "^0.3.5"
3740
}
3841
}

resources/Site.js

+27-4
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,29 @@ async function readSite(siteRoot) {
4040
});
4141
});
4242

43+
// Cross-link all prev/next pages
44+
var pageByUrl = Object.create(null);
45+
for (var i = 0; i < site.files.length; i++) {
46+
pageByUrl[path.resolve(site.files[i].url)] = site.files[i];
47+
}
48+
49+
for (var i = 0; i < site.files.length; i++) {
50+
var page = site.files[i];
51+
if (page.next) {
52+
page.nextPage = pageByUrl[path.resolve(page.url, page.next)];
53+
}
54+
}
55+
4356
return site;
4457
}
4558

46-
function buildSite(buildRoot, site) {
47-
return Promise.all(site.files.map(file => {
48-
return writer(buildRoot, file, site);
49-
}));
59+
function buildSite(buildRoot, site, filter) {
60+
return Promise.all(site.files
61+
.filter(file =>
62+
!filter ||
63+
(filter.test ? filter.test(file.absPath) : filter === file.absPath))
64+
.map(file => writer(buildRoot, file, site))
65+
);
5066
}
5167

5268

@@ -91,6 +107,8 @@ function readFileData(absPath, relPath, stat) {
91107
function normalizeData(file) {
92108
file.isPage = file.content && isPageish(file.relPath);
93109
file.url = urlToFile(file);
110+
var dirname = path.dirname(file.relPath);
111+
file.dir = dirname === '.' ? 'docs' : dirname.split('/')[0];
94112
file.date = file.date ?
95113
Date.parse(file.date) :
96114
(file.stat.birthtime || file.stat.ctime);
@@ -123,6 +141,11 @@ function urlToFile(file) {
123141
}
124142
}
125143

144+
// Convert .less to .css
145+
if (path.extname(url) === '.less') {
146+
url = url.slice(0, -5) + '.css';
147+
}
148+
126149
// Assume index.html stands for the parent directory
127150
if (path.basename(url) === 'index.html') {
128151
url = path.dirname(url);

resources/build.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ var Site = require('./Site');
1111

1212
module.exports = build;
1313

14-
process.on('unhandledRejection', error => {
14+
process.on('unhandledRejection', (error, promise) => {
1515
console.error('Unhandled Promise Rejection:');
1616
console.error(error && error.stack || error);
17+
console.error(promise);
1718
});
1819

1920
var pwd = process.env.PWD;
@@ -23,10 +24,10 @@ var buildDir = process.env.npm_package_site_build || './_build';
2324
var SITE_ROOT = path.resolve(pwd, sourceDir);
2425
var BUILD_ROOT = path.resolve(pwd, buildDir);
2526

26-
async function build() {
27+
async function build(filter) {
2728
console.log('building...');
2829
var site = await Site.readSite(SITE_ROOT);
29-
await Site.buildSite(BUILD_ROOT, site);
30+
await Site.buildSite(BUILD_ROOT, site, filter);
3031
console.log('built');
3132
}
3233

resources/renderReactPage.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* LICENSE file in the root directory of this source tree.
77
*/
88

9+
var ReactDOM = require('react-dom/server')
910
var React = require('react');
1011

1112
module.exports = renderReactPage;
@@ -21,7 +22,9 @@ function renderReactPage(options) {
2122
var component = options.component;
2223
var props = options.props;
2324

24-
var html = React.renderToStaticMarkup(React.createElement(component, props));
25+
var html = ReactDOM.renderToStaticMarkup(
26+
React.createElement(component, props)
27+
);
2528

2629
if (html.indexOf('<feed') !== -1) {
2730
// react remove namespace so we re-add manually

resources/watch.js

+38-4
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,48 @@ function startWatch() {
5151
console.log('watching...');
5252
}
5353

54+
function changeFile(fileName) {
55+
enqueue(fileName);
56+
}
57+
5458
function deleteFile(fileName) {
55-
clearCache(fileName);
56-
build().catch(error => console.error(error.stack || error));
59+
enqueue(fileName);
5760
}
5861

59-
function changeFile(fileName) {
62+
const queue = [];
63+
64+
function enqueue(fileName) {
65+
queue.push(fileName);
66+
if (queue.length === 1) {
67+
rebuild();
68+
} else {
69+
console.log('queue', fileName);
70+
}
71+
}
72+
73+
function rebuild() {
74+
const fileName = queue[0];
75+
const filter =
76+
/_core\//.test(fileName) ? /\.(js|md)$/ :
77+
/\.less$/.test(fileName) ? /\.less$/ :
78+
fileName ? SITE_ROOT + '/' + fileName :
79+
null;
6080
clearCache(fileName);
61-
build().catch(error => console.error(error.stack || error));
81+
return build(filter).then(
82+
() => {
83+
queue.shift();
84+
if (queue.length) {
85+
return rebuild();
86+
}
87+
},
88+
error => {
89+
console.error(error.stack || error);
90+
queue.shift();
91+
if (queue.length) {
92+
return rebuild();
93+
}
94+
}
95+
);
6296
}
6397

6498
function clearCache(causeFileName) {

0 commit comments

Comments
 (0)