github.com/fanux/shipyard@v0.0.0-20161009071005-6515ce223235/controller/static/semantic/tasks/docs/serve.js (about)

     1  /*******************************
     2             Serve Docs
     3  *******************************/
     4  var
     5    gulp         = require('gulp'),
     6  
     7    // node dependencies
     8    console      = require('better-console'),
     9    fs           = require('fs'),
    10  
    11    // gulp dependencies
    12    autoprefixer = require('gulp-autoprefixer'),
    13    chmod        = require('gulp-chmod'),
    14    clone        = require('gulp-clone'),
    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    util         = require('gulp-util'),
    25    watch        = require('gulp-watch'),
    26  
    27    // user config
    28    config       = require('../config/docs'),
    29  
    30    // task config
    31    configSetup  = require('../config/project/config'),
    32    tasks        = require('../config/project/tasks'),
    33    install      = require('../config/project/install'),
    34  
    35    // shorthand
    36    banner       = tasks.banner,
    37    comments     = tasks.regExp.comments,
    38    log          = tasks.log,
    39    settings     = tasks.settings,
    40  
    41    globs,
    42    assets,
    43    output,
    44    source
    45  ;
    46  
    47  require('../collections/internal')(gulp);
    48  
    49  module.exports = function () {
    50  
    51    // use a different config
    52    config = configSetup.addDerivedValues(config);
    53  
    54    // shorthand
    55    globs  = config.globs;
    56    assets = config.paths.assets;
    57    output = config.paths.output;
    58    source = config.paths.source;
    59  
    60  
    61    /*--------------
    62       Copy Source
    63    ---------------*/
    64  
    65    gulp
    66      .watch([
    67        'src/**/*.*'
    68      ], function(file) {
    69        console.clear();
    70        return gulp.src(file.path, {
    71            base: 'src/'
    72          })
    73          .pipe(gulp.dest(output.less))
    74          .pipe(print(log.created))
    75        ;
    76      })
    77    ;
    78  
    79    /*--------------
    80        Watch CSS
    81    ---------------*/
    82  
    83    gulp
    84      .watch([
    85        source.config,
    86        source.definitions   + '/**/*.less',
    87        source.site          + '/**/*.{overrides,variables}',
    88        source.themes        + '/**/*.{overrides,variables}'
    89      ], function(file) {
    90  
    91        var
    92          lessPath,
    93  
    94          stream,
    95          compressedStream,
    96          uncompressedStream,
    97  
    98          isDefinition,
    99          isPackagedTheme,
   100          isSiteTheme,
   101          isConfig
   102        ;
   103  
   104        // log modified file
   105        gulp.src(file.path)
   106          .pipe(print(log.modified))
   107        ;
   108  
   109        /*--------------
   110           Find Source
   111        ---------------*/
   112  
   113        // recompile on *.override , *.variable change
   114        isConfig        = (file.path.indexOf('theme.config') !== -1);
   115        isPackagedTheme = (file.path.indexOf(source.themes) !== -1);
   116        isSiteTheme     = (file.path.indexOf(source.site) !== -1);
   117        isDefinition    = (file.path.indexOf(source.definitions) !== -1);
   118  
   119        if(isConfig) {
   120          console.info('Change detected in theme config, rebuild docs with `build-docs`');
   121          // impossible to tell which file was updated in theme.config
   122          return;
   123        }
   124        else if(isPackagedTheme) {
   125          console.log('Change detected in packaged theme');
   126          lessPath = util.replaceExtension(file.path, '.less');
   127          lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);
   128        }
   129        else if(isSiteTheme) {
   130          console.log('Change detected in site theme');
   131          lessPath = util.replaceExtension(file.path, '.less');
   132          lessPath = lessPath.replace(source.site, source.definitions);
   133        }
   134        else {
   135          console.log('Change detected in definition');
   136          lessPath = file.path;
   137        }
   138  
   139        /*--------------
   140          Create CSS
   141        ---------------*/
   142  
   143        if( fs.existsSync(lessPath) ) {
   144  
   145          // unified css stream
   146          stream = gulp.src(lessPath)
   147            .pipe(plumber())
   148            .pipe(less(settings.less))
   149            .pipe(replace(comments.variables.in, comments.variables.out))
   150            .pipe(replace(comments.large.in, comments.large.out))
   151            .pipe(replace(comments.small.in, comments.small.out))
   152            .pipe(replace(comments.tiny.in, comments.tiny.out))
   153            .pipe(autoprefixer(settings.prefix))
   154            .pipe(gulpif(config.hasPermission, chmod(config.permission)))
   155          ;
   156  
   157          // use 2 concurrent streams from same pipe
   158          uncompressedStream = stream.pipe(clone());
   159          compressedStream   = stream.pipe(clone());
   160  
   161          uncompressedStream
   162            .pipe(plumber())
   163            .pipe(replace(assets.source, assets.uncompressed))
   164            .pipe(header(banner, settings.header))
   165            .pipe(gulp.dest(output.uncompressed))
   166            .pipe(print(log.created))
   167            .on('end', function() {
   168              gulp.start('package uncompressed docs css');
   169            })
   170          ;
   171  
   172          compressedStream = stream
   173            .pipe(plumber())
   174            .pipe(replace(assets.source, assets.compressed))
   175            .pipe(minifyCSS(settings.minify))
   176            .pipe(rename(settings.rename.minCSS))
   177            .pipe(header(banner, settings.header))
   178            .pipe(gulp.dest(output.compressed))
   179            .pipe(print(log.created))
   180            .on('end', function() {
   181              gulp.start('package compressed docs css');
   182            })
   183          ;
   184  
   185        }
   186        else {
   187          console.log('Cannot find UI definition at path', lessPath);
   188        }
   189      })
   190    ;
   191  
   192    /*--------------
   193        Watch JS
   194    ---------------*/
   195  
   196    gulp
   197      .watch([
   198        source.definitions   + '/**/*.js'
   199      ], function(file) {
   200        gulp.src(file.path)
   201          .pipe(plumber())
   202          .pipe(gulpif(config.hasPermission, chmod(config.permission)))
   203          .pipe(gulp.dest(output.uncompressed))
   204          .pipe(print(log.created))
   205          .pipe(uglify(settings.uglify))
   206          .pipe(rename(settings.rename.minJS))
   207          .pipe(gulp.dest(output.compressed))
   208          .pipe(print(log.created))
   209          .on('end', function() {
   210            gulp.start('package compressed docs js');
   211            gulp.start('package uncompressed docs js');
   212          })
   213        ;
   214      })
   215    ;
   216  
   217    /*--------------
   218      Watch Assets
   219    ---------------*/
   220  
   221    // only copy assets that match component names (or their plural)
   222    gulp
   223      .watch([
   224        source.themes   + '/**/assets/**/' + globs.components + '?(s).*'
   225      ], function(file) {
   226        // copy assets
   227        gulp.src(file.path, { base: source.themes })
   228          .pipe(gulpif(config.hasPermission, chmod(config.permission)))
   229          .pipe(gulp.dest(output.themes))
   230          .pipe(print(log.created))
   231        ;
   232      })
   233    ;
   234  
   235  
   236  };