1
0

gulpfile.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. const gulp = require('gulp');
  2. const sourcemaps = require('gulp-sourcemaps');
  3. const source = require('vinyl-source-stream');
  4. const buffer = require('vinyl-buffer');
  5. const browserify = require('browserify');
  6. const watchify = require('watchify');
  7. const babelify = require('babelify');
  8. const pathmod = require('pathmodify');
  9. const babel = require('gulp-babel');
  10. const uglify = require('gulp-uglify');
  11. const gutil = require('gulp-util');
  12. const zip = require('gulp-zip');
  13. const fs = require('fs');
  14. const path = require('path');
  15. const es = require('event-stream');
  16. const Promise = require('bluebird');
  17. function slugify(str)
  18. {
  19. str = str.replace(/^\s+|\s+$/g, ''); // trim
  20. str = str.toLowerCase();
  21. // remove accents, swap ñ for n, etc
  22. var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
  23. var to = "aaaaeeeeiiiioooouuuunc------";
  24. for (var i=0, l=from.length ; i<l ; i++)
  25. str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
  26. str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
  27. .replace(/\s+/g, '-') // collapse whitespace and replace by -
  28. .replace(/-+/g, '-'); // collapse dashes
  29. return str; // Trim - from end of text
  30. }
  31. Promise.promisifyAll(fs);
  32. // const archiveFiles = [
  33. // 'style.css',
  34. // 'screenshot.png',
  35. // '*.php'
  36. // ];
  37. // const builtFiles = [
  38. // 'js/*'
  39. // ];
  40. const watchedFiles = [
  41. 'src/markdown/**/*'
  42. ];
  43. // const themeName = 'reago';
  44. function buildClient(watch, done) {
  45. var bundler =
  46. browserify('./src/index.js', { debug: true })
  47. .plugin(pathmod, {mods: [
  48. pathmod.mod.dir('node_modules', __dirname + '/node_modules'),
  49. ]})
  50. // Transform JSX https://github.com/andreypopp/reactify/issues/58
  51. // Fix unexpected ... https://github.com/babel/babel-loader/issues/170
  52. .transform(babelify, { presets: ['es2015', 'stage-0', 'react'] });
  53. return new Promise(function (resolve, reject) {
  54. bundler.bundle()
  55. .on('error', function(err) { console.error(err); this.emit('end'); })
  56. .pipe(source('bundle.react.js'))
  57. .pipe(buffer())
  58. .pipe(uglify())
  59. .pipe(sourcemaps.init({ loadMaps: true }))
  60. .pipe(sourcemaps.write('./'))
  61. .pipe(gulp.dest(path.normalize(__dirname + '/../js/dist')))
  62. .on('end', resolve);
  63. });
  64. }
  65. function extractMarkdown() {
  66. // return new Promise(function (resolve, reject) {
  67. return fs.readdirAsync('src/markdown')
  68. .then(subdirs => Promise.reduce(
  69. subdirs,
  70. (carry, dir) =>
  71. fs.readdirAsync('src/markdown/' + dir)
  72. .then(files => Promise.reduce(
  73. files,
  74. (carry, f) => fs.readFileAsync('src/markdown/' + dir + '/' + f)
  75. .then(buf => buf.toString())
  76. .then(content => {
  77. const basename = path.basename(f, '.md');
  78. const re = /(\d+)\. (.*)/;
  79. const matches = basename.match(re);
  80. const title = ! matches ? basename :
  81. parseInt(matches[1], 10) + '. ' + matches[2];
  82. return carry.concat({
  83. title,
  84. path: '/' + slugify(title),
  85. content
  86. });
  87. }),
  88. []
  89. ))
  90. .then(items => carry.concat({ title: dir, path: '/' + slugify(dir), items })),
  91. []
  92. ))
  93. .then(JSON.stringify)
  94. .then(markdownJson => fs.writeFileAsync('src/resources/markdown.json', markdownJson))
  95. // });
  96. }
  97. // function makeZip(cb) {
  98. // return extractThemeVersion()
  99. // .then(themeVersion => {
  100. // var base = 'dist/' + themeVersion;
  101. // var tmp = base + '/reago';
  102. // var rebasedFiles = base + '/**/*';
  103. // es.concat(
  104. // gulp.src(archiveFiles)
  105. // .pipe(gulp.dest(tmp)),
  106. // gulp.src(builtFiles)
  107. // .pipe(gulp.dest( tmp + '/js')),
  108. // gulp.src(rebasedFiles, { base })
  109. // .pipe(zip(themeName + '-' + themeVersion + '.zip'))
  110. // .pipe(gulp.dest('dist'))
  111. // ).on('end', cb)
  112. // });
  113. // }
  114. gulp.task('watch', function() {
  115. gulp.watch(['src'], buildClient);
  116. gulp.watch(watchedFiles, extractMarkdown);
  117. });
  118. gulp.task('buildClient', function() {
  119. return buildClient();
  120. });
  121. gulp.task('extractMarkdown', function() {
  122. return extractMarkdown();
  123. });
  124. // gulp.task('makeZip', makeZip);
  125. gulp.task('default', gulp.series('buildClient', 'extractMarkdown', 'watch'));