UNPKG

@amp-nova/dc-accelerators

Version:

Amplience DC Frontend modules

509 lines (454 loc) 12.9 kB
'use strict'; var es = require('event-stream'); var gulp = require('gulp'); var sass = require('gulp-sass'); var rename = require('gulp-rename'); var autoprefixer = require('gulp-autoprefixer'); var cleanCSS = require('gulp-clean-css'); var sourcemaps = require('gulp-sourcemaps'); var handlebars = require('gulp-handlebars'); var declare = require('gulp-declare'); var uglify = require('gulp-uglify'); var htmlmin = require('gulp-htmlmin'); var pump = require('pump'); var processhtml = require('gulp-processhtml'); var del = require('del'); var concat = require('gulp-concat'); var insert = require('gulp-insert'); var addSrc = require('gulp-add-src'); var connect = require('gulp-connect'); var watch = require('gulp-watch'); var name; var dependencies = require('./dependencies.json'); var contentDependencies = require('./content_dependencies.json'); var toReplace = require('./.replace.json'); var _ = require('lodash'); var libName = 'libs'; var excludeReusable = { text: '!./dist/reusable/showdown.min.js', slider: '!./dist/reusable/lory.js' }; var reusable = './dist/reusable/*.js'; var replace = function() { return es.map(function(file, cb) { var fileContent = file.contents.toString(); fileContent = fileContent.replace(/\{CONTENT_TYPE_BASEPATH\}/g, toReplace.CONTENT_TYPE_BASEPATH); file.contents = new Buffer.from(fileContent); // send the updated file down the pipe cb(null, file); }); }; var replaceVisualization = function() { return es.map(function(file, cb) { var fileContent = file.contents.toString(); fileContent = fileContent.replace(/\{VISUALIZATION_BASEPATH\}/g, toReplace.VISUALIZATION_BASEPATH); fileContent = fileContent.replace(/\{COMPANY_TAG\}/g, toReplace.COMPANY_TAG); file.contents = new Buffer.from(fileContent); cb(null, file); }); }; gulp.task('reusable-js-min', function(cb) { pump( [ gulp.src(['src/**/js/*.js']), //uglify(), rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('js') - 1); path.dirname = name; path.basename = path.basename; }), gulp.dest('dist') ], cb ); }); gulp.task('copy-node-modules', function() { return gulp .src([ 'node_modules/cms-javascript-sdk/dist/cms-javascript-sdk.min.js', 'node_modules/handlebars/dist/handlebars.min.js', 'node_modules/showdown/dist/showdown.min.js', 'node_modules/lory.js/dist/lory.min.js' ]) .pipe(gulp.dest('dist/reusable')); }); gulp.task('addShowdownLicense', function() { return gulp .src('node_modules/showdown/license.txt') .pipe(insert.prepend('/*')) .pipe(insert.append('*/')) .pipe(addSrc.append('dist/reusable/showdown.min.js')) .pipe(concat('showdown.min.js')) .pipe(gulp.dest('dist/reusable')); }); gulp.task('addLoryLicense', function() { return gulp .src('node_modules/lory.js/LICENSE') .pipe(insert.prepend('/*')) .pipe(insert.append('*/')) .pipe(addSrc.append('dist/reusable/lory.min.js')) .pipe(concat('lory.min.js')) .pipe(gulp.dest('dist/reusable')); }); gulp.task('copy-icons', function() { return gulp .src([ 'src/icons/**' ]) .pipe(gulp.dest('dist/icons')); }); gulp.task('renders-js-copy', function() { return gulp .src(['src/renders/**/js/*.js']) .pipe( rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('js') - 1); path.dirname = name + '/package'; }) ) .pipe(gulp.dest('dist/renders')); }); gulp.task('renders-files-copy', function() { return gulp .src([ 'src/renders/**/visualisation.html', 'src/renders/**/templates/*.html' ]) .pipe(replaceVisualization()) .pipe( rename(function(path) { var name = path.dirname.replace('/templates', ''); path.dirname = name + '/package'; }) ) .pipe(gulp.dest('dist/renders')); }); gulp.task('renders-js-min', function(cb) { pump( [ gulp.src(['src/renders/**/js/*.js']), //uglify(), rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('js') - 1); path.dirname = name; path.basename = path.basename; //+ '.min'; }), gulp.dest('dist/renders') ], cb ); }); gulp.task('renders-templates', function() { return gulp .src('src/renders/**/templates/*.hbs') .pipe( rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('templates') - 1); path.dirname = name + '/package'; }) ) .pipe(gulp.dest('dist/renders')) .pipe( handlebars({ handlebars: require('handlebars') }) ) .pipe( declare({ namespace: 'AmpCa.templates' }) ) .pipe(uglify()) .pipe( rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('package') - 1); path.dirname = name; path.basename = path.basename + '.min'; }) ) .pipe(gulp.dest('dist/renders')); }); gulp.task('renders-sass', function() { return ( gulp .src('src/renders/**/sass/*.scss') .pipe( sass({ outputStyle: 'expanded' }).on('error', sass.logError) ) .pipe( autoprefixer({ browsers: ['last 2 versions'], cascade: false }) ) .pipe( rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('sass') - 1); path.dirname = name + '/package'; path.basename = name; }) ) .pipe(gulp.dest('dist/renders')) // .pipe(sourcemaps.init()) .pipe(cleanCSS()) // .pipe(sourcemaps.write()) .pipe( rename(function(path) { name = path.dirname.slice(0, path.dirname.indexOf('package') - 1); path.dirname = name; path.basename = name + '.min'; }) ) .pipe(gulp.dest('dist/renders')) .pipe( rename(function(path) { path.dirname = path.dirname + '/package'; }) ) .pipe(gulp.dest('dist/renders')) ); }); gulp.task('renders-html', function() { return ( gulp .src([ 'src/renders/**/*.html', '!src/renders/*/templates/*.html', '!src/renders/**/visualisation.html' ]) .pipe(processhtml()) //.pipe(htmlmin({collapseWhitespace: true})) .pipe(gulp.dest('dist/renders')) ); }); gulp.task( 'renders-build', gulp.series( 'renders-html', 'renders-sass', 'renders-templates', 'renders-js-copy', 'renders-files-copy', 'renders-js-min' ), function() { } ); gulp.task('del', function() { return del('dist'); }); gulp.task( 'build', gulp.series( 'del', 'renders-build', 'copy-node-modules', 'copy-icons', 'addLoryLicense', 'addShowdownLicense', 'reusable-js-min' ), function() { } ); gulp.task('addContentTypes', function(cb) { var count = Object.keys(dependencies).length; var bindedCb = _.after(count, cb); for (var module in dependencies) { var moduleName = module.toLowerCase(); gulp.src('node_modules/dc-accelerators-content-types/' + moduleName + '.json') .pipe(replace()) .pipe( gulp.dest('dist/contentTypes/') ); if (contentDependencies[module]) { var eachCb = _.after(contentDependencies[module].length, bindedCb); contentDependencies[module].forEach(function(dependency) { gulp.src('./node_modules/dc-accelerators-content-types/' + dependency + '.json') .pipe(replace()) .pipe( gulp.dest('./dist/contentTypes/') ); eachCb(); }); } else { bindedCb(); } } }); gulp.task('addDependencies', function(done) { var countCb = Object.keys(dependencies).length; var cb = _.after(countCb, done); for (var module in dependencies) { var fullReusable = [reusable]; for (var res in excludeReusable) { fullReusable.push(excludeReusable[res]); } if (excludeReusable[module]) { fullReusable.splice(fullReusable.indexOf(excludeReusable[module]), 1); } var eachCb = _.after(dependencies[module].length, cb); dependencies[module].forEach(function(currentDependency) { if (excludeReusable[currentDependency]) { fullReusable.splice( fullReusable.indexOf(excludeReusable[currentDependency]), 1 ); } gulp .src([ './dist/renders/' + currentDependency + '/package/**/*' ]) .pipe( gulp.dest( './dist/renders/' + module + '/package/dependencies/' + currentDependency ) ); eachCb(); }); gulp .src(fullReusable) .pipe(gulp.dest('./dist/renders/' + module + '/package/' + libName)); cb(); } }); gulp.task('minifyPack', function() { for (var mod in dependencies) { (function() { let module = mod; let css = [ './dist/renders/' + module + '/package/' + module + '.min.css' ]; let compiledTemplates = [ './dist/renders/' + module + '/' + module + '.min.js' ]; let fullReusable = [reusable, './src/renders/' + module + '/js/*.js']; for (var res in excludeReusable) { fullReusable.push(excludeReusable[res]); } if (excludeReusable[module]) { fullReusable.splice(fullReusable.indexOf(excludeReusable[module]), 1); } dependencies[module].forEach(function(currentDependency) { css.push( './dist/renders/' + currentDependency + '/package/' + currentDependency + '.min.css' ); compiledTemplates.push( './dist/renders/' + currentDependency + '/' + currentDependency + '.min.js' ); fullReusable.push('./src/renders/' + currentDependency + '/js/*.js'); if (excludeReusable[currentDependency]) { fullReusable.splice( fullReusable.indexOf(excludeReusable[currentDependency]), 1 ); } }); gulp .src(fullReusable) .pipe(uglify()) .pipe(concat('libs.min.js')) .pipe( rename(function(path) { path.dirname = 'renders/' + module + '/min'; }) ) .pipe(gulp.dest('dist')); gulp .src(compiledTemplates) .pipe(concat('templates.min.js')) .pipe( rename(function(path) { path.dirname = 'renders/' + module + '/min'; }) ) .pipe(gulp.dest('dist')); gulp .src(css) .pipe(cleanCSS()) .pipe(concat('styles.min.css')) .pipe( rename(function(path) { path.dirname = 'renders/' + module + '/min'; }) ) .pipe(gulp.dest('dist')); })(); } }); gulp.task('concatAll', function(done) { gulp .src(['./dist/renders/*/acc-template-*']) .pipe(concat('templates.min.js')) .pipe(gulp.dest('./dist/renders/all')); gulp .src([ './dist/reusable/*.js', './src/renders/slider/js/sliderHelper.js', '!./dist/reusable/lory.min.js', '!./dist/reusable/showdown.min.js' ]) .pipe(uglify()) .pipe( addSrc.append([ './dist/reusable/lory.min.js', './dist/reusable/showdown.min.js' ]) ) .pipe(concat('libs.min.js')) .pipe(gulp.dest('./dist/renders/all')); gulp .src(['./dist/renders/*/*.min.css']) .pipe(concat('styles.min.css')) .pipe(gulp.dest('./dist/renders/all')); done(); }); gulp.task('copy-viewer-kit-modules', function() { return gulp .src([ 'bower_components/jquery-ui/ui/jquery.ui.core.js', 'bower_components/jquery-ui/ui/jquery.ui.widget.js', 'node_modules/amplience-sdk-client/dist/video-js/video.min.js', 'node_modules/amplience-sdk-client/dist/amplience-sdk-client.js' ]) .pipe(gulp.dest('src/pdp/js')); }); gulp.task('buildAllWithoutReload', gulp.series('build', 'addDependencies', 'addContentTypes', 'concatAll')); gulp.task('server', function(done) { connect.server({ port: 9100, hostname: '0.0.0.0', livereload: true, debug: true }); done(); }); gulp.task( 'buildAllMin', gulp.series('build', 'addDependencies', 'addContentTypes', 'minifyPack', 'server'), function() { return gulp.src('*').pipe(connect.reload()); } ); gulp.task('buildAll', gulp.series('buildAllWithoutReload'), function() { return gulp.src('*').pipe(connect.reload()); }); gulp.task('watch', function(done) { gulp.watch('src/**/*', gulp.series(['buildAll'])); done(); }); gulp.task('default', gulp.series('buildAll', gulp.parallel(['watch', 'server'])));