You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

176 lines
4.9 KiB

  1. /*******************************
  2. Build Docs
  3. *******************************/
  4. var
  5. gulp = require('gulp'),
  6. // node dependencies
  7. console = require('better-console'),
  8. fs = require('fs'),
  9. map = require('map-stream'),
  10. // gulp dependencies
  11. autoprefixer = require('gulp-autoprefixer'),
  12. chmod = require('gulp-chmod'),
  13. clone = require('gulp-clone'),
  14. flatten = require('gulp-flatten'),
  15. gulpif = require('gulp-if'),
  16. header = require('gulp-header'),
  17. less = require('gulp-less'),
  18. minifyCSS = require('gulp-minify-css'),
  19. plumber = require('gulp-plumber'),
  20. print = require('gulp-print'),
  21. rename = require('gulp-rename'),
  22. replace = require('gulp-replace'),
  23. uglify = require('gulp-uglify'),
  24. // user config
  25. config = require('../config/docs'),
  26. // install config
  27. configSetup = require('../config/project/config'),
  28. tasks = require('../config/project/tasks'),
  29. install = require('../config/project/install'),
  30. // metadata parsing
  31. metadata = require('./metadata'),
  32. // shorthand
  33. globs,
  34. assets,
  35. output,
  36. source,
  37. banner = tasks.banner,
  38. comments = tasks.regExp.comments,
  39. log = tasks.log,
  40. settings = tasks.settings
  41. ;
  42. // add internal tasks (concat release)
  43. require('../collections/internal')(gulp);
  44. module.exports = function(callback) {
  45. var
  46. stream,
  47. compressedStream,
  48. uncompressedStream
  49. ;
  50. // use a different config
  51. config = configSetup.addDerivedValues(config);
  52. // shorthand
  53. globs = config.globs;
  54. assets = config.paths.assets;
  55. output = config.paths.output;
  56. source = config.paths.source;
  57. /*--------------
  58. Parse metadata
  59. ---------------*/
  60. // parse all *.html.eco in docs repo, data will end up in
  61. // metadata.result object. Note this assumes that the docs
  62. // repository is present and in proper directory location as
  63. // specified by docs.json.
  64. gulp.src(config.paths.template.eco + '**/*.html.eco')
  65. .pipe(map(metadata.parser))
  66. .on('end', function() {
  67. fs.writeFile(output.less + '/metadata.json', JSON.stringify(metadata.result, null, 2));
  68. });
  69. ;
  70. /*--------------
  71. Copy Source
  72. ---------------*/
  73. // copy src/ to server
  74. gulp.src('src/**/*.*')
  75. .pipe(gulp.dest(output.less))
  76. .pipe(print(log.created))
  77. ;
  78. /*--------------
  79. Build
  80. ---------------*/
  81. console.info('Building Semantic for docs');
  82. if( !install.isSetup() ) {
  83. console.error('Cannot build files. Run "gulp install" to set-up Semantic');
  84. return;
  85. }
  86. // unified css stream
  87. stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')
  88. .pipe(plumber())
  89. .pipe(less(settings.less))
  90. .pipe(autoprefixer(settings.prefix))
  91. .pipe(flatten())
  92. ;
  93. // two concurrent streams from same source to concat release
  94. uncompressedStream = stream.pipe(clone());
  95. compressedStream = stream.pipe(clone());
  96. uncompressedStream
  97. .pipe(plumber())
  98. .pipe(replace(comments.variables.in, comments.variables.out))
  99. .pipe(replace(comments.large.in, comments.large.out))
  100. .pipe(replace(comments.small.in, comments.small.out))
  101. .pipe(replace(comments.tiny.in, comments.tiny.out))
  102. .pipe(replace(assets.source, assets.uncompressed))
  103. .pipe(header(banner, settings.header))
  104. .pipe(gulpif(config.hasPermission, chmod(config.permission)))
  105. .pipe(gulp.dest(output.uncompressed))
  106. .pipe(print(log.created))
  107. .on('end', function() {
  108. gulp.start('package uncompressed docs css');
  109. })
  110. ;
  111. compressedStream = stream
  112. .pipe(plumber())
  113. .pipe(clone())
  114. .pipe(replace(assets.source, assets.compressed))
  115. .pipe(minifyCSS(settings.minify))
  116. .pipe(rename(settings.rename.minCSS))
  117. .pipe(header(banner, settings.header))
  118. .pipe(gulpif(config.hasPermission, chmod(config.permission)))
  119. .pipe(gulp.dest(output.compressed))
  120. .pipe(print(log.created))
  121. .on('end', function() {
  122. callback();
  123. gulp.start('package compressed docs css');
  124. })
  125. ;
  126. // copy assets
  127. gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*')
  128. .pipe(gulpif(config.hasPermission, chmod(config.permission)))
  129. .pipe(gulp.dest(output.themes))
  130. ;
  131. // copy source javascript
  132. gulp.src(source.definitions + '/**/' + globs.components + '.js')
  133. .pipe(plumber())
  134. .pipe(flatten())
  135. .pipe(gulp.dest(output.uncompressed))
  136. .pipe(gulpif(config.hasPermission, chmod(config.permission)))
  137. .pipe(print(log.created))
  138. .pipe(uglify(settings.uglify))
  139. .pipe(rename(settings.rename.minJS))
  140. .pipe(header(banner, settings.header))
  141. .pipe(gulp.dest(output.compressed))
  142. .pipe(gulpif(config.hasPermission, chmod(config.permission)))
  143. .pipe(print(log.created))
  144. .on('end', function() {
  145. gulp.start('package compressed docs js');
  146. gulp.start('package uncompressed docs js');
  147. })
  148. ;
  149. };