Created
August 31, 2016 08:50
-
-
Save jirkadev/fd7eadbbf607aa111cbeb770a9cd971c to your computer and use it in GitHub Desktop.
Revisions
-
jirkadev created this gist
Aug 31, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,263 @@ // Gulp with Symfony framework: http://knpuniversity.com/screencast/gulp // run "gulp" in development environment // run "gulp --production" in production environment var gulp = require('gulp'), minifyCss = require('gulp-minify-css'), less = require('gulp-less'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), ngAnnotate = require('gulp-ng-annotate'), sourcemaps = require('gulp-sourcemaps'), plumber = require('gulp-plumber'), // http://knpuniversity.com/screencast/gulp/errors-call-the-plumber util = require('gulp-util'), // http://knpuniversity.com/screencast/gulp/minify-only-production gulpIf = require('gulp-if'), rev = require('gulp-rev'), browserSync = require('browser-sync'), reload = browserSync.reload, rename = require("gulp-rename"), replace = require('gulp-replace'), del = require('del'); var c = function () { var assetDir = 'app/Resources/assets/'; var lessDir = assetDir + 'less/'; var fontDir = assetDir + 'fonts/'; var scriptsDir = assetDir + 'js/'; var controllers = scriptsDir + 'controllers/'; var dateControllers = controllers + 'dateCalculators/'; var financialControllers = controllers + 'financialCalculators/'; var fitnessControllers = controllers + 'fitnessCalculators/'; var mathControllers = controllers + 'mathCalculators/'; var womenControllers = controllers + 'womenCalculators/'; var physicsControllers = controllers + 'physicsCalculators/'; var otherControllers = controllers + 'otherCalculators/'; var serviceDir = scriptsDir + 'services/'; var directivesDir = scriptsDir + 'directives/'; var dateService = serviceDir + 'dateService.js'; var convertService = serviceDir + 'convertService.js'; var jsTranslator = 'vendor/willdurand/js-translation-bundle/Bazinga/Bundle/JsTranslationBundle/Resources/public/js/translator.min.js'; var bowerDir = 'vendor/bower_components/'; var momentJs = [bowerDir + 'moment/moment.js', bowerDir + 'moment/locale/cs.js', bowerDir + 'moment/locale/de.js']; var calcViewsDir = 'src/CalcBundle/Resources/views/'; var manifestFile = 'app/Resources/assets/rev-manifest.json'; return { production: !!util.env.production, // responds to "gulp --production" command development: !util.env.production, assetDir: assetDir, lessDir: lessDir, fontDir: fontDir, jsAssetsDir: scriptsDir, controllers: controllers, dateControllers: dateControllers, financialControllers: financialControllers, fitnessControllers: fitnessControllers, mathControllers: mathControllers, womenControllers: womenControllers, physicsControllers: physicsControllers, otherControllers: otherControllers, serviceDir: serviceDir, directivesDir: directivesDir, dateService: dateService, convertService: convertService, jsTranslator: jsTranslator, bowerDir: bowerDir, momentJs: momentJs, calcViewsDir: calcViewsDir, manifestFile: manifestFile } }(); var app = {}; /** * In this function I isolate (put in one place) logic for processing less.* -> css.* * @param {Array} paths -- array with source paths * @param {string} outputFilename -- if defined concat source files into that filename. In undefined do not concat files (for calculator's pages specific style file) **/ app.addStyle = function (paths, outputFilename) { var renameFile = rename(function (path) { path.basename = 'css/' + path.basename; }); return gulp.src(paths) .pipe(plumber()) .pipe(gulpIf(c.development, sourcemaps.init())) .pipe(less()) .pipe(outputFilename ? concat('css/' + outputFilename) : renameFile) .pipe(minifyCss({keepSpecialComments: 0})) .pipe(rev()) .pipe(gulpIf(c.development, sourcemaps.write('.'))) .pipe(gulp.dest('web/')) .pipe(rev.manifest(c.manifestFile, {merge: true})) .pipe(gulp.dest('.')); }; /** * In this function I isolate (put in one place) logic for processing javascript files. * @param {Array} paths -- array with source paths * @param {string} outputFilename -- if defined concat source files into that filename. In undefined do not concat files (for calculator's pages specific style file) * @param {boolean} doNgAnnotate -- if true, annotate Angular's DI **/ app.addJavaScript = function (paths, outputFilename, doNgAnnotate) { var renameFile = rename(function (path) { path.basename = 'js/' + path.basename; }); return gulp.src(paths) .pipe(gulpIf(c.development, sourcemaps.init())) .pipe(outputFilename ? concat('js/' + outputFilename) : renameFile) // https://github.com/gulpjs/gulp-util#noop .pipe(doNgAnnotate ? ngAnnotate() : util.noop()) .pipe(c.production ? uglify() : uglify({mangle: false, compress: false})) .pipe(rev()) .pipe(gulpIf(c.development, sourcemaps.write('.'))) .pipe(gulp.dest('web/')) .pipe(rev.manifest(c.manifestFile, {merge: true})) .pipe(gulp.dest('.')); }; gulp.task('clean', function () { del(['web/js', 'web/css', c.manifestFile], function (err, paths) { console.log('Deleted files/folders:\n', paths.join('\n')); }); }); // Process with Less separate calculator style files (They won't be concatenated). gulp.task('less', ['clean'], function () { return app.addStyle([c.lessDir + 'svgShapes.less', c.lessDir + 'onlineCalc.less'], null); }); // Create common 'app.css' production css file. Bootstrap library has be here on first place (others depend on it). gulp.task('app.css', ['less'], function () { return app.addStyle([c.assetDir + 'bootstrapCustom/css/bootstrap.css', c.fontDir + 'font_awesome_by_icomoon/style.css', c.lessDir + 'sb-admin.less', c.lessDir + 'app.less'], 'app.css'); }); gulp.task('app.js', ['app.css'], function () { var paths = [c.bowerDir + 'jquery/dist/jquery.js', c.assetDir + 'bootstrapCustom/js/bootstrap.js', c.bowerDir + 'angular/angular.js', c.jsAssetsDir + '*.js']; return app.addJavaScript(paths, 'app.js', true); }); gulp.task('contactUs.js', ['app.js'], function () { return app.addJavaScript([c.controllers + 'contactUsCtrl.js'], 'contactUs.js', true); }); // DATE CALCULATORS gulp.task('age.js', ['contactUs.js'], function () { return app.addJavaScript([c.dateControllers + 'ageCtrl.js', c.dateService, c.jsTranslator].concat(c.momentJs), 'age.js', true); }); gulp.task('zodiac.js', ['age.js'], function () { return app.addJavaScript([c.dateControllers + 'zodiacCtrl.js', c.dateService, c.jsTranslator].concat(c.momentJs), 'zodiac.js', true); }); // FINANCIAL CALCULATORS gulp.task('compoundInterest.js', ['zodiac.js'], function () { return app.addJavaScript([c.financialControllers + 'compoundInterestCtrl.js'], 'compoundInterest.js', true); }); gulp.task('currency.js', ['compoundInterest.js'], function () { return app.addJavaScript([c.financialControllers + 'currencyCtrl.js'], 'currency.js', true); }); gulp.task('presentValue.js', ['currency.js'], function () { return app.addJavaScript([c.financialControllers + 'presentValueCtrl.js'], 'presentValue.js', true); }); gulp.task('tip.js', ['presentValue.js'], function () { return app.addJavaScript([c.financialControllers + 'tipCtrl.js'], 'tip.js', true); }); // FITNESS CALCULATORS gulp.task('bmi.js', ['tip.js'], function () { return app.addJavaScript([c.fitnessControllers + 'bmiCtrl.js', c.convertService], 'bmi.js', true); }); gulp.task('bmr.js', ['bmi.js'], function () { return app.addJavaScript([c.fitnessControllers + 'bmrCtrl.js', c.convertService], 'bmr.js', true); }); gulp.task('bodyFat.js', ['bmr.js'], function () { return app.addJavaScript([c.fitnessControllers + 'bodyFatCtrl.js', c.convertService], 'bodyFat.js', true); }); gulp.task('idealWeight.js', ['bodyFat.js'], function () { return app.addJavaScript([c.fitnessControllers + 'idealWeightCtrl.js', c.convertService], 'idealWeight.js', true); }); // MATH CALCULATORS gulp.task('onlineCalc.js', ['idealWeight.js'], function () { paths = [c.mathControllers + 'onlineCalcCtrl.js', c.serviceDir + 'highlightNumbersService.js', c.serviceDir + 'parserService.js', c.serviceDir + 'parserHelperService.js', c.directivesDir + 'keyboardShortcutsDirective.js', c.serviceDir + 'keyboardShortcutsService.js', c.bowerDir + 'underscore/underscore.js']; return app.addJavaScript(paths, 'onlineCalc.js', true); }); gulp.task('percentage.js', ['onlineCalc.js'], function () { return app.addJavaScript([c.mathControllers + 'percentageCtrl.js', c.convertService], 'percentage.js', true); }); gulp.task('primeNumber.js', ['percentage.js'], function () { return app.addJavaScript([c.mathControllers + 'primeNumberCtrl.js', c.jsTranslator], 'primeNumber.js', true); }); gulp.task('circleCircumference.js', ['primeNumber.js'], function () { return app.addJavaScript([c.mathControllers + 'shapes/circleCircumferenceCtrl.js'], 'circleCircumference.js', true); }); gulp.task('circleArea.js', ['circleCircumference.js'], function () { return app.addJavaScript([c.mathControllers + 'shapes/circleAreaCtrl.js'], 'circleArea.js', true); }); gulp.task('cylinderArea.js', ['circleArea.js'], function () { return app.addJavaScript([c.mathControllers + 'shapes/cylinderAreaCtrl.js'], 'cylinderArea.js', true); }); gulp.task('cylinderVolume.js', ['cylinderArea.js'], function () { return app.addJavaScript([c.mathControllers + 'shapes/cylinderVolumeCtrl.js'], 'cylinderVolume.js', true); }); // WOMEN CALCULATORS gulp.task('ovulation.js', ['cylinderVolume.js'], function () { return app.addJavaScript([c.womenControllers + 'ovulationCtrl.js', c.dateService].concat(c.momentJs), 'ovulation.js', true); }); gulp.task('pregnancy.js', ['ovulation.js'], function () { return app.addJavaScript([c.womenControllers + 'pregnancyCtrl.js', c.dateService].concat(c.momentJs), 'pregnancy.js', true); }); // PHYSICS CALCULATORS gulp.task('averageVelocity.js', ['pregnancy.js'], function () { return app.addJavaScript([c.physicsControllers + 'averageVelocityCtrl.js'], 'averageVelocity.js', true); }); // OTHER CALCULATORS gulp.task('love.js', ['averageVelocity.js'], function () { return app.addJavaScript([c.otherControllers + 'loveCtrl.js'], 'love.js', true); }); gulp.task('death.js', ['love.js'], function () { return app.addJavaScript([c.otherControllers + 'deathCtrl.js', c.convertService, c.dateService, c.serviceDir + 'deathCountries.js'].concat(c.momentJs), 'death.js', true); }); gulp.task('pixelDensity.js', ['death.js'], function () { return app.addJavaScript([c.otherControllers + 'pixelDensityCtrl.js', c.convertService, c.jsTranslator], 'pixelDensity.js', true); }); gulp.task('averageSpeed.js', ['pixelDensity.js'], function () { return app.addJavaScript([c.otherControllers + 'averageSpeedCtrl.js', c.convertService], 'averageSpeed.js', true); }); // replaces "css\\svgShapes.css" -> "css/svgShapes.css" gulp.task('manifest-replace', ['averageSpeed.js'], function () { gulp.src([c.manifestFile]) .pipe(replace('\\\\', '/')) .pipe(gulp.dest(c.assetDir)); }); gulp.task('copy', ['manifest-replace'], function () { // Copy fonts. gulp.src([c.fontDir + 'stix/fonts/*', c.fontDir + 'font_awesome_by_icomoon/fonts/*', c.fontDir + 'digital-7/*', c.fontDir + 'digital-7-mono/*']) .pipe(gulp.dest('web/fonts/')); // Copy images gulp.src([c.assetDir + 'images/*']).pipe(gulp.dest('web/images/')); }); gulp.task('watch', function () { // watch 'less' task for less files gulp.watch(c.lessDir + '*.less', ['less']); gulp.watch(c.jsAssetsDir + '*.js', ['js']); gulp.watch(c.jsAssetsDir + '**/*.js', ['js']); gulp.watch(c.calcViewsDir + '**/*.html.twig', ['bs-reload']); }); // Starts browser-sync gulp.task('browser-sync', function () { browserSync({ proxy: "localhost/kingsCalcSymfony2.6/web/app_dev.php" }); }); // Reload all Browsers gulp.task('bs-reload', function () { browserSync.reload(); }); // Default development Task //gulp.task('default', ['copy', 'watch', 'browser-sync']); gulp.task('default', ['copy']); // Production Task used for deployment gulp.task('deploy', ['copy']);