Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 81e938c

Browse filesBrowse files
committed
Move pages source into main branch
This is an incremental step to move the gh-pages documentation into the master branch, and ideally make things one step simpler for updating and deploying documentation. Tested building pages after a clean npm install. Next steps include automatically deploying to the gh-pages branch on pushing the master branch.
1 parent 67afd39 commit 81e938c
Copy full SHA for 81e938c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner
Expand file treeCollapse file tree

66 files changed

+91891
-3
lines changed

‎.gitignore

Copy file name to clipboardExpand all lines: .gitignore
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ npm-debug.log
77
*.swp
88
TODO
99
build
10+
immutable.d.json
11+
readme.json
12+
/pages/out

‎gulpfile.js

Copy file name to clipboard
+351Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
require("harmonize")();
2+
3+
var browserify = require('browserify');
4+
var browserSync = require('browser-sync');
5+
var buffer = require('vinyl-buffer');
6+
var child_process = require('child_process');
7+
var concat = require('gulp-concat');
8+
var del = require('del');
9+
var filter = require('gulp-filter');
10+
var fs = require('fs');
11+
var gulp = require('gulp');
12+
var gutil = require('gulp-util');
13+
var header = require('gulp-header');
14+
var Immutable = require('./');
15+
var jest = require('gulp-jest');
16+
var jshint = require('gulp-jshint');
17+
var less = require('gulp-less');
18+
var path = require('path');
19+
var React = require('react/addons');
20+
var reactTools = require('react-tools');
21+
var sequence = require('run-sequence');
22+
var size = require('gulp-size');
23+
var source = require('vinyl-source-stream');
24+
var sourcemaps = require('gulp-sourcemaps');
25+
var stylish = require('jshint-stylish');
26+
var through = require('through2');
27+
var uglify = require('gulp-uglify');
28+
var vm = require('vm');
29+
30+
var genTypeDefData = require('./pages/lib/genTypeDefData');
31+
var genMarkdownDoc = require('./pages/lib/genMarkdownDoc');
32+
33+
var SRC_DIR = './pages/src/';
34+
var BUILD_DIR = './pages/out/';
35+
36+
gulp.task('clean', function (done) {
37+
del([
38+
BUILD_DIR,
39+
], {force: true}, done);
40+
});
41+
42+
gulp.task('readme', function() {
43+
var readmePath = 'README.md';
44+
return gulp.src(readmePath)
45+
.pipe(through.obj(function(file, enc, cb) {
46+
var fileSource = file.contents.toString(enc);
47+
file.path = path.join(path.dirname(file.path), 'readme.json');
48+
file.contents = new Buffer(JSON.stringify(
49+
genMarkdownDoc(fileSource)
50+
));
51+
this.push(file);
52+
cb();
53+
}))
54+
.pipe(gulp.dest('./resources/'));
55+
});
56+
57+
gulp.task('typedefs', function() {
58+
var typeDefPath = 'type-definitions/immutable.d.ts';
59+
return gulp.src(typeDefPath)
60+
.pipe(through.obj(function(file, enc, cb) {
61+
var fileSource = file.contents.toString(enc).replace(
62+
'module \'immutable\'',
63+
'module Immutable'
64+
);
65+
file.path = path.join(path.dirname(file.path), 'immutable.d.json');
66+
file.contents = new Buffer(JSON.stringify(
67+
genTypeDefData(file.relative, fileSource)
68+
));
69+
this.push(file);
70+
cb();
71+
}))
72+
.pipe(gulp.dest('./resources/'));
73+
});
74+
75+
gulp.task('lint', function() {
76+
return gulp.src('./app/**/*.js')
77+
.pipe(reactTransform())
78+
.on('error', handleError)
79+
.pipe(jshint({
80+
asi: true,
81+
browser: true,
82+
curly: false,
83+
eqeqeq: true,
84+
eqnull: true,
85+
esnext: true,
86+
expr: true,
87+
forin: true,
88+
freeze: true,
89+
immed: true,
90+
indent: 2,
91+
iterator: true,
92+
newcap: false,
93+
noarg: true,
94+
node: true,
95+
noempty: true,
96+
nonstandard: true,
97+
trailing: true,
98+
undef: true,
99+
unused: 'vars',
100+
}))
101+
.pipe(jshint.reporter(stylish))
102+
.pipe(jshint.reporter('fail'))
103+
.on('error', handleError);
104+
});
105+
106+
gulp.task('test', function () {
107+
return gulp.src('./')
108+
.pipe(jest({
109+
scriptPreprocessor: './resources/jest-preprocessor.js',
110+
unmockedModulePathPatterns: ['./node_modules/react'],
111+
}))
112+
.on('error', handleError);
113+
});
114+
115+
gulp.task('js', gulpJS(''));
116+
gulp.task('js-docs', gulpJS('docs/'));
117+
118+
function gulpJS(subDir) {
119+
var reactGlobalModulePath = path.relative(
120+
path.resolve(SRC_DIR+subDir),
121+
path.resolve('./resources/react-global.js')
122+
);
123+
var immutableGlobalModulePath = path.relative(
124+
path.resolve(SRC_DIR+subDir),
125+
path.resolve('./resources/immutable-global.js')
126+
);
127+
return function() {
128+
return browserify({
129+
debug: true,
130+
basedir: SRC_DIR+subDir,
131+
})
132+
.add('./src/index.js')
133+
.require('./src/index.js')
134+
.require(reactGlobalModulePath, { expose: 'react' })
135+
.require(immutableGlobalModulePath, { expose: 'immutable' })
136+
// Helpful when developing with no wifi
137+
// .require('react', { expose: 'react' })
138+
// .require('immutable', { expose: 'immutable' })
139+
.transform(reactTransformify)
140+
.bundle()
141+
.on('error', handleError)
142+
.pipe(source('bundle.js'))
143+
.pipe(buffer())
144+
.pipe(sourcemaps.init({
145+
loadMaps: true,
146+
}))
147+
.pipe(uglify())
148+
.pipe(sourcemaps.write('./maps'))
149+
.pipe(gulp.dest(BUILD_DIR+subDir))
150+
.pipe(filter('**/*.js'))
151+
.pipe(size({ showFiles: true }))
152+
.on('error', handleError);
153+
}
154+
}
155+
156+
gulp.task('pre-render', gulpPreRender(''));
157+
gulp.task('pre-render-docs', gulpPreRender('docs/'));
158+
159+
function gulpPreRender(subDir) {
160+
return function () {
161+
return gulp.src(SRC_DIR+subDir+'index.html')
162+
.pipe(preRender(subDir))
163+
.pipe(size({ showFiles: true }))
164+
.pipe(gulp.dest(BUILD_DIR+subDir))
165+
.on('error', handleError);
166+
}
167+
}
168+
169+
gulp.task('less', gulpLess(''));
170+
gulp.task('less-docs', gulpLess('docs/'));
171+
172+
function gulpLess(subDir) {
173+
return function () {
174+
return gulp.src(SRC_DIR+subDir+'src/*.less')
175+
.pipe(sourcemaps.init())
176+
.pipe(less({
177+
compress: true
178+
}))
179+
.on('error', handleError)
180+
.pipe(concat('bundle.css'))
181+
.pipe(sourcemaps.write('./maps'))
182+
.pipe(gulp.dest(BUILD_DIR+subDir))
183+
.pipe(filter('**/*.css'))
184+
.pipe(size({ showFiles: true }))
185+
.pipe(browserSync.reload({ stream:true }))
186+
.on('error', handleError);
187+
}
188+
}
189+
190+
gulp.task('statics', gulpStatics(''));
191+
gulp.task('statics-docs', gulpStatics('docs/'));
192+
193+
function gulpStatics(subDir) {
194+
return function() {
195+
return gulp.src(SRC_DIR+subDir+'static/**/*')
196+
.pipe(gulp.dest(BUILD_DIR+subDir+'static'))
197+
.on('error', handleError)
198+
.pipe(browserSync.reload({ stream:true }))
199+
.on('error', handleError);
200+
}
201+
}
202+
203+
gulp.task('build', function (done) {
204+
sequence(
205+
['readme', 'typedefs', 'js', 'js-docs', 'less', 'less-docs', 'statics', 'statics-docs'],
206+
['pre-render', 'pre-render-docs'],
207+
done
208+
);
209+
});
210+
211+
gulp.task('default', function (done) {
212+
sequence('clean', 'lint', /*'test',*/ 'build', done);
213+
});
214+
215+
// watch files for changes and reload
216+
gulp.task('dev', ['default'], function() {
217+
browserSync({
218+
port: 8040,
219+
server: {
220+
baseDir: BUILD_DIR
221+
}
222+
});
223+
224+
gulp.watch('./app/**/*.less', ['less', 'less-docs']);
225+
gulp.watch('./app/src/**/*.js', ['rebuild-js']);
226+
gulp.watch('./app/docs/src/**/*.js', ['rebuild-js-docs']);
227+
gulp.watch('./app/**/*.html', ['pre-render', 'pre-render-docs']);
228+
gulp.watch('./app/static/**/*', ['statics', 'statics-docs']);
229+
});
230+
231+
gulp.task('rebuild-js', function (done) {
232+
sequence('lint', 'js', /*'test',*/ ['pre-render'], function () {
233+
browserSync.reload();
234+
done();
235+
});
236+
});
237+
238+
gulp.task('rebuild-js-docs', function (done) {
239+
sequence('lint', 'js-docs', /*'test',*/ ['pre-render-docs'], function () {
240+
browserSync.reload();
241+
done();
242+
});
243+
});
244+
245+
function handleError(error) {
246+
gutil.log(error.message);
247+
}
248+
249+
function preRender(subDir) {
250+
return through.obj(function(file, enc, cb) {
251+
var src = file.contents.toString(enc);
252+
var components = [];
253+
src = src.replace(
254+
/<!--\s*React\(\s*(.*)\s*\)\s*-->/g,
255+
function (_, component) {
256+
var id = 'r' + components.length;
257+
components.push(component);
258+
try {
259+
return (
260+
'<div id="' + id + '">'+
261+
vm.runInNewContext(
262+
fs.readFileSync(BUILD_DIR+subDir+'bundle.js') + // ugly
263+
'\nrequire("react").renderToString('+
264+
'require("react").createElement(require(component)))',
265+
{
266+
global: {
267+
React: React,
268+
Immutable: Immutable
269+
},
270+
window: {},
271+
component: component,
272+
console: console,
273+
}
274+
) +
275+
'</div>'
276+
);
277+
} catch (error) {
278+
return '<div id="' + id + '">' + error.message + '</div>';
279+
}
280+
}
281+
);
282+
if (components.length) {
283+
src = src.replace(
284+
/<!--\s*ReactRender\(\)\s*-->/g,
285+
'<script>' + components.map(function (component, index) {
286+
return (
287+
'var React = require("react");'+
288+
'React.render('+
289+
'React.createElement(require("'+component+'")),'+
290+
'document.getElementById("r' + (index) + '")'+
291+
');'
292+
);
293+
}) + '</script>'
294+
);
295+
}
296+
file.contents = new Buffer(src, enc);
297+
this.push(file);
298+
cb();
299+
});
300+
}
301+
302+
function reactTransform() {
303+
var parseError;
304+
return through.obj(function(file, enc, cb) {
305+
if (path.extname(file.path) !== '.js') {
306+
this.push(file);
307+
return cb();
308+
}
309+
try {
310+
file.contents = new Buffer(reactTools.transform(
311+
file.contents.toString(enc),
312+
{harmony: true}
313+
), enc);
314+
this.push(file);
315+
cb();
316+
} catch (error) {
317+
parseError = new gutil.PluginError('transform', {
318+
message: file.relative + ' : ' + error.message,
319+
showStack: false
320+
});
321+
cb();
322+
}
323+
}, function (done) {
324+
parseError && this.emit('error', parseError);
325+
done();
326+
});
327+
}
328+
329+
330+
function reactTransformify(filePath) {
331+
if (path.extname(filePath) !== '.js') {
332+
return through();
333+
}
334+
var code = '';
335+
var parseError;
336+
return through.obj(function(file, enc, cb) {
337+
code += file;
338+
cb();
339+
}, function (done) {
340+
try {
341+
this.push(reactTools.transform(code, {harmony:true}));
342+
} catch (error) {
343+
parseError = new gutil.PluginError('transform', {
344+
message: error.message,
345+
showStack: false
346+
});
347+
}
348+
parseError && this.emit('error', parseError);
349+
done();
350+
});
351+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.