| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- const gulp = require('gulp');
- const sourcemaps = require('gulp-sourcemaps');
- const source = require('vinyl-source-stream');
- const buffer = require('vinyl-buffer');
- const browserify = require('browserify');
- const watchify = require('watchify');
- const babelify = require('babelify');
- const pathmod = require('pathmodify');
- const babel = require('gulp-babel');
- const uglify = require('gulp-uglify');
- const gutil = require('gulp-util');
- const zip = require('gulp-zip');
- const fs = require('fs');
- const path = require('path');
- const es = require('event-stream');
- const Promise = require('bluebird');
- function slugify(str)
- {
- str = str.replace(/^\s+|\s+$/g, ''); // trim
- str = str.toLowerCase();
- // remove accents, swap ñ for n, etc
- var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
- var to = "aaaaeeeeiiiioooouuuunc------";
- for (var i=0, l=from.length ; i<l ; i++)
- str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
- str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
- .replace(/\s+/g, '-') // collapse whitespace and replace by -
- .replace(/-+/g, '-'); // collapse dashes
- return str; // Trim - from end of text
- }
- Promise.promisifyAll(fs);
- // const archiveFiles = [
- // 'style.css',
- // 'screenshot.png',
- // '*.php'
- // ];
- // const builtFiles = [
- // 'js/*'
- // ];
- const watchedFiles = [
- 'src/markdown/**/*'
- ];
- // const themeName = 'reago';
- function buildClient(watch, done) {
- var bundler =
- browserify('./src/index.js', { debug: true })
- .plugin(pathmod, {mods: [
- pathmod.mod.dir('node_modules', __dirname + '/node_modules'),
- ]})
- // Transform JSX https://github.com/andreypopp/reactify/issues/58
- // Fix unexpected ... https://github.com/babel/babel-loader/issues/170
- .transform(babelify, { presets: ['es2015', 'stage-0', 'react'] });
- return new Promise(function (resolve, reject) {
- bundler.bundle()
- .on('error', function(err) { console.error(err); this.emit('end'); })
- .pipe(source('bundle.react.js'))
- .pipe(buffer())
- .pipe(uglify())
- .pipe(sourcemaps.init({ loadMaps: true }))
- .pipe(sourcemaps.write('./'))
- .pipe(gulp.dest(path.normalize(__dirname + '/../js/dist')))
- .on('end', resolve);
- });
- }
- function extractMarkdown() {
- // return new Promise(function (resolve, reject) {
- return fs.readdirAsync('src/markdown')
- .then(subdirs => Promise.reduce(
- subdirs,
- (carry, dir) =>
- fs.readdirAsync('src/markdown/' + dir)
- .then(files => Promise.reduce(
- files,
- (carry, f) => fs.readFileAsync('src/markdown/' + dir + '/' + f)
- .then(buf => buf.toString())
- .then(content => {
- const basename = path.basename(f, '.md');
- const re = /(\d+)\. (.*)/;
- const matches = basename.match(re);
- const title = ! matches ? basename :
- parseInt(matches[1], 10) + '. ' + matches[2];
- return carry.concat({
- title,
- path: '/' + slugify(title),
- content
- });
- }),
- []
- ))
- .then(items => carry.concat({ title: dir, path: '/' + slugify(dir), items })),
- []
- ))
- .then(JSON.stringify)
- .then(markdownJson => fs.writeFileAsync('src/markdown.json', markdownJson))
- // });
- }
- // function makeZip(cb) {
- // return extractThemeVersion()
- // .then(themeVersion => {
- // var base = 'dist/' + themeVersion;
- // var tmp = base + '/reago';
- // var rebasedFiles = base + '/**/*';
- // es.concat(
- // gulp.src(archiveFiles)
- // .pipe(gulp.dest(tmp)),
- // gulp.src(builtFiles)
- // .pipe(gulp.dest( tmp + '/js')),
- // gulp.src(rebasedFiles, { base })
- // .pipe(zip(themeName + '-' + themeVersion + '.zip'))
- // .pipe(gulp.dest('dist'))
- // ).on('end', cb)
- // });
- // }
- gulp.task('watch', function() {
- gulp.watch(['src'], buildClient);
- gulp.watch(watchedFiles, extractMarkdown);
- });
- gulp.task('buildClient', function() {
- return buildClient();
- });
- gulp.task('extractMarkdown', function() {
- return extractMarkdown();
- });
- // gulp.task('makeZip', makeZip);
- gulp.task('default', gulp.series('buildClient', 'extractMarkdown', 'watch'));
|