blob: 157ab67c20aa5c23ac023fdaf82a5bdb9337d99b [file] [log] [blame]
Matteo Scandolo2b626742015-11-04 16:03:59 +01001var gulp = require('gulp');
2var uglify = require('gulp-uglify');
Matteo Scandolo57404dc2016-04-13 16:20:13 -07003var concat = require('gulp-concat');
Matteo Scandolo2b626742015-11-04 16:03:59 +01004var ngAnnotate = require('gulp-ng-annotate');
5var angularFilesort = require('gulp-angular-filesort');
Matteo Scandolo57404dc2016-04-13 16:20:13 -07006var gulpDocs = require('gulp-ngdocs');
Matteo Scandolo582cc812016-04-13 17:23:28 -07007var del = require('del');
Matteo Scandolob7a86dc2016-04-14 11:46:30 -07008var babel = require('gulp-babel');
9const sourcemaps = require('gulp-sourcemaps');
Matteo Scandoloaa683dd2016-04-14 15:34:12 -070010var browserSync = require('browser-sync').create();
Matteo Scandolo90ed0642016-04-25 10:11:56 -070011var rename = require('gulp-rename');
12var sass = require('gulp-sass');
Matteo Scandolo2b626742015-11-04 16:03:59 +010013
14module.exports = function(options){
Matteo Scandolob7a86dc2016-04-14 11:46:30 -070015
Matteo Scandolo90ed0642016-04-25 10:11:56 -070016 gulp.task('style', function(){
Matteo Scandolob0280752016-04-25 10:31:22 -070017 return gulp.src(`${options.xosHelperSource}styles/main.scss`)
Matteo Scandolo90ed0642016-04-25 10:11:56 -070018 .pipe(sourcemaps.init())
19 .pipe(sass().on('error', sass.logError))
20 .pipe(rename('xosNgLib.css'))
21 .pipe(sourcemaps.write())
22 .pipe(gulp.dest(options.ngXosStyles));
23 });
24
Matteo Scandolob7a86dc2016-04-14 11:46:30 -070025 // transpile js with sourceMaps
26 gulp.task('babel', function(){
27 return gulp.src(options.xosHelperSource + '**/*.js')
28 .pipe(babel({
29 presets: ['es2015']
30 }))
31 .pipe(gulp.dest(options.xosHelperTmp));
32 });
33
34 gulp.task('babelDev', function(){
35 return gulp.src(options.xosHelperSource + '**/*.js')
36 .pipe(sourcemaps.init())
37 .pipe(babel({
38 presets: ['es2015']
39 }))
40 .pipe(sourcemaps.write('./maps'))
41 .pipe(gulp.dest(options.xosHelperTmp));
42 });
43
44 // build
Matteo Scandolo90ed0642016-04-25 10:11:56 -070045 gulp.task('helpers', ['babel', 'style'], function(){
Matteo Scandolob7a86dc2016-04-14 11:46:30 -070046 return gulp.src([options.xosHelperTmp + '**/*.js'])
Matteo Scandolo2b626742015-11-04 16:03:59 +010047 .pipe(angularFilesort())
48 .pipe(concat('ngXosHelpers.js'))
49 .pipe(ngAnnotate())
50 .pipe(uglify())
51 .pipe(gulp.dest(options.ngXosVendor));
52 });
Matteo Scandolo57404dc2016-04-13 16:20:13 -070053
Matteo Scandolob7a86dc2016-04-14 11:46:30 -070054 // build Dev (no minify, sourcemaps)
55 gulp.task('helpersDev', ['babelDev'], function(){
56 return gulp.src([options.xosHelperTmp + '**/*.js'])
57 .pipe(angularFilesort())
58 .pipe(concat('ngXosHelpers.js'))
59 .pipe(ngAnnotate())
60 .pipe(gulp.dest(options.ngXosVendor));
61 });
62
Matteo Scandolo582cc812016-04-13 17:23:28 -070063 gulp.task('cleanDocs', function(){
Matteo Scandolo582cc812016-04-13 17:23:28 -070064 return del([options.docs + '**/*']);
65 });
66
Matteo Scandoloaa683dd2016-04-14 15:34:12 -070067 gulp.task('makeDocs', ['cleanDocs'], function(){
Matteo Scandolo582cc812016-04-13 17:23:28 -070068 var ngOptions = {
69 scripts: [
Matteo Scandolo199ec002016-04-22 10:53:49 -070070 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.js',
71 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-animate.js',
72 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-cookies.min.js',
73 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-resource.js',
Matteo Scandolo840260d2016-04-22 09:56:48 -070074 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.2/lodash.js',
Matteo Scandolo199ec002016-04-22 10:53:49 -070075 `./${options.ngXosVendor}ngXosHelpers.js`
Matteo Scandoloaa683dd2016-04-14 15:34:12 -070076 ],
77 styles: [
Matteo Scandolo199ec002016-04-22 10:53:49 -070078 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css',
Matteo Scandolo582cc812016-04-13 17:23:28 -070079 ],
Matteo Scandoloa6a9e612016-04-14 16:52:13 -070080 html5Mode: false,
Matteo Scandolo582cc812016-04-13 17:23:28 -070081 title: 'XOS Helpers documentation',
82 startPage: '/module',
83 }
84
85 return gulpDocs.sections({
86 module: {
87 glob: [
88 options.xosHelperSource + '*.js',
Matteo Scandoloaa683dd2016-04-14 15:34:12 -070089 options.xosHelperSource + 'services/*.js',
90 options.xosHelperSource + 'ui_components/**/*.js'
Matteo Scandolo582cc812016-04-13 17:23:28 -070091 ],
92 title: 'Module Documentation',
93 },
94 'rest-api': {
95 glob: [
96 options.xosHelperSource + 'services/rest/*.js'
97 ],
98 api: true,
99 title: 'API Documentation',
100 }
101 }).pipe(gulpDocs.process(ngOptions)).pipe(gulp.dest('./docs'));
Matteo Scandolo57404dc2016-04-13 16:20:13 -0700102 });
Matteo Scandolob7a86dc2016-04-14 11:46:30 -0700103
Matteo Scandoloaa683dd2016-04-14 15:34:12 -0700104 gulp.task('serveDocs', function(){
105 browserSync.init({
106 server: {
107 baseDir: './docs',
108 routes: {
109 '/xos/core/xoslib/static/js/vendor': options.ngXosVendor
110 }
111 }
112 });
113 });
114
115 gulp.task('docs', ['makeDocs', 'serveDocs'], function(){
116
117 var files = [
118 options.xosHelperSource + '*.js',
119 options.xosHelperSource + 'services/*.js',
120 options.xosHelperSource + 'ui_components/**/*.js'
121 ];
122
123 gulp.watch(files, ['makeDocs']);
124
125 gulp.watch(files, function(){
Matteo Scandoloaa683dd2016-04-14 15:34:12 -0700126 browserSync.reload();
127 });
128 })
129
Matteo Scandolob7a86dc2016-04-14 11:46:30 -0700130 gulp.task('dev', function(){
Matteo Scandolo90ed0642016-04-25 10:11:56 -0700131 gulp.watch(`${options.xosHelperSource}**/*.scss`, ['style']);
Matteo Scandolob7a86dc2016-04-14 11:46:30 -0700132 gulp.watch(options.xosHelperSource + '**/*.js', ['helpersDev']);
133 });
Matteo Scandolo2b626742015-11-04 16:03:59 +0100134};