Preparation to bower release
diff --git a/gulp/dev.js b/gulp/dev.js
new file mode 100644
index 0000000..ee51e3f
--- /dev/null
+++ b/gulp/dev.js
@@ -0,0 +1,84 @@
+/*eslint-env node */
+(function () {
+ 'use strict';
+
+ const gulp = require('gulp');
+ const inject = require('gulp-inject');
+ const angularFilesort = require('gulp-angular-filesort');
+ const wiredep = require('wiredep').stream;
+ const path = require('path');
+ const babel = require('gulp-babel');
+ const sourcemaps = require('gulp-sourcemaps');
+ const browserSync = require('browser-sync').create();
+ module.exports = function(options){
+
+ console.log(options.xosHelperTmp, path.join(__dirname, `../${options.xosHelperTmp}`));
+
+ gulp.task('serveDevEnv', ['babelDev', 'wiredep', 'inject', 'injectStyle'], function(){
+ browserSync.init({
+ server: {
+ baseDir: ['./dev', './.tmp', './dist'],
+ // directory: true,
+ routes: {
+ '/bower_components': 'bower_components'
+ },
+ }
+ });
+
+ gulp.watch([
+ './src/**/*.js'
+ ], ['babelDev']);
+
+ gulp.watch([
+ './src/**/*.scss'
+ ], ['style']);
+
+ gulp.watch([
+ './dev/*.html',
+ './dev/*.js',
+ './.tmp/**/*.js'
+ ], function(){
+ browserSync.reload();
+ });
+ });
+
+ gulp.task('babelDev', function(){
+ return gulp.src(options.xosHelperSource + '**/*.js')
+ .pipe(sourcemaps.init())
+ .pipe(babel({
+ presets: ['es2015']
+ }))
+ .pipe(sourcemaps.write('./maps'))
+ .pipe(gulp.dest(options.xosHelperTmp));
+ });
+
+ gulp.task('inject', function(){
+ const files = gulp.src([
+ `${options.xosHelperTmp}**/*.js`
+ ])
+ .pipe(angularFilesort())
+
+ return gulp.src('./dev/index.html')
+ .pipe(inject(files, {ignorePath: ['.tmp/']}))
+ .pipe(gulp.dest('./dev/'));
+ });
+
+ gulp.task('injectStyle', function(){
+ const files = gulp.src([
+ `${options.ngXosStyles}*.css`
+ ])
+
+ return gulp.src('./dev/index.html')
+ .pipe(inject(files, {ignorePath: ['dist/']}))
+ .pipe(gulp.dest('./dev/'));
+ });
+
+
+ // inject bower dependencies with wiredep
+ gulp.task('wiredep', function () {
+ return gulp.src('./dev/index.html')
+ .pipe(wiredep({devDependencies: false}))
+ .pipe(gulp.dest('./dev'));
+ });
+ };
+})();
\ No newline at end of file
diff --git a/gulp/docs.js b/gulp/docs.js
new file mode 100644
index 0000000..ab77e1a
--- /dev/null
+++ b/gulp/docs.js
@@ -0,0 +1,74 @@
+/*eslint-env node */
+
+const gulp = require('gulp');
+const gulpDocs = require('gulp-ngdocs');
+const del = require('del');
+const browserSync = require('browser-sync').create();
+
+module.exports = function(options){
+
+ gulp.task('cleanDocs', function(){
+ return del([options.docs + '**/*']);
+ });
+
+ gulp.task('makeDocs', ['cleanDocs'], function(){
+
+ const ngOptions = {
+ scripts: [].concat([
+ `./${options.ngXosVendor}ngXosVendor.min.js`,
+ `./${options.ngXosVendor}ngXosHelpers.min.js`,
+ 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-mocks.js',
+ ]),
+ styles: [
+ `./${options.ngXosStyles}xosNgLib.css`,
+ 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css',
+ ],
+ html5Mode: false,
+ title: 'XOS Helpers documentation',
+ startPage: '/ngXosLib',
+ }
+
+ return gulpDocs.sections({
+ ngXosLib: {
+ glob: [
+ options.xosHelperSource + '*.js',
+ options.xosHelperSource + 'services/helpers/**/*.js',
+ options.xosHelperSource + 'services/*.js',
+ options.xosHelperSource + 'ui_components/**/*.js'
+ ],
+ title: 'Module Documentation',
+ },
+ 'rest-api': {
+ glob: [
+ options.xosHelperSource + 'services/rest/*.js'
+ ],
+ api: true,
+ title: 'API Documentation',
+ }
+ }).pipe(gulpDocs.process(ngOptions)).pipe(gulp.dest('./docs'));
+ });
+
+ gulp.task('serveDocs', function(){
+ browserSync.init({
+ server: {
+ baseDir: './docs',
+ }
+ });
+ });
+
+ gulp.task('docs', ['makeDocs', 'serveDocs'], function(){
+
+ const files = [
+ options.xosHelperSource + '**/*.js',
+ ];
+
+ gulp.watch(files, ['makeDocs']);
+
+ // uncomment to enable autoreload, now it is broken (reload a wrong page)
+ // https://github.com/nikhilmodak/gulp-ngdocs/issues/81
+
+ // gulp.watch(files, function(){
+ // browserSync.reload();
+ // });
+ });
+};
\ No newline at end of file
diff --git a/gulp/ngXosHelpers.js b/gulp/ngXosHelpers.js
new file mode 100644
index 0000000..4888bdf
--- /dev/null
+++ b/gulp/ngXosHelpers.js
@@ -0,0 +1,85 @@
+/*eslint-env node */
+
+(function () {
+ 'use strict';
+
+ const gulp = require('gulp');
+ const uglify = require('gulp-uglify');
+ const concat = require('gulp-concat');
+ const ngAnnotate = require('gulp-ng-annotate');
+ const angularFilesort = require('gulp-angular-filesort');
+ const del = require('del');
+ const babel = require('gulp-babel');
+ const sourcemaps = require('gulp-sourcemaps');
+ const rename = require('gulp-rename');
+ const sass = require('gulp-sass');
+
+ module.exports = function(options){
+
+ // delete previous builded file
+ gulp.task('cleanLib', function(){
+ return del(
+ [
+ `${options.ngXosVendor}/ngXosHelpers.min.js`,
+ `${options.ngXosVendor}/xosUiComponents.js`,
+ `${options.ngXosVendor}/ngXos.css`
+ ],
+ {force: true}
+ );
+ });
+
+ gulp.task('style', function(){
+ return gulp.src(`${options.xosHelperSource}styles/main.scss`)
+ .pipe(sourcemaps.init())
+ .pipe(sass().on('error', sass.logError))
+ .pipe(rename('xosNgLib.css'))
+ .pipe(sourcemaps.write())
+ .pipe(gulp.dest(options.ngXosStyles));
+ });
+
+ // transpile js with sourceMaps
+ gulp.task('babel', function(){
+ return gulp.src(options.xosHelperSource + '**/*.js')
+ .pipe(babel({
+ presets: ['es2015']
+ }))
+ .pipe(gulp.dest(options.xosHelperTmp));
+ });
+
+ // build
+ gulp.task('helpers', ['cleanLib', 'babel', 'style'], function(){
+ return gulp.src([options.xosHelperTmp + '**/*.js'])
+ .pipe(angularFilesort())
+ .pipe(concat('ngXosHelpers.min.js'))
+ .pipe(ngAnnotate())
+ .pipe(uglify())
+ .pipe(gulp.dest(options.ngXosVendor));
+ });
+
+ // build Dev (no minify, sourcemaps), for development purposes
+ // gulp.task('helpersDev', ['babelDev'], function(){
+ // return gulp.src([options.xosHelperTmp + '**/*.js'])
+ // .pipe(angularFilesort())
+ // .pipe(concat('ngXosHelpers.js'))
+ // .pipe(ngAnnotate())
+ // .pipe(gulp.dest(options.ngXosVendor));
+ // });
+
+ // concat only UI Components (for free use)
+ gulp.task('uiLibrary', function(){
+ return gulp.src([
+ options.xosHelperTmp + '**/*.js',
+ !options.xosHelperTmp + 'services/rest/*.js'
+ ])
+ .pipe(angularFilesort())
+ .pipe(concat('xosUiComponents.js'))
+ .pipe(ngAnnotate())
+ .pipe(gulp.dest(options.ngXosVendor));
+ });
+
+ gulp.task('dev', function(){
+ gulp.watch(`${options.xosHelperSource}**/*.scss`, ['style']);
+ gulp.watch(options.xosHelperSource + '**/*.js', ['helpersDev']);
+ });
+ };
+})();
\ No newline at end of file
diff --git a/gulp/ngXosVendor.js b/gulp/ngXosVendor.js
new file mode 100644
index 0000000..9e82c23
--- /dev/null
+++ b/gulp/ngXosVendor.js
@@ -0,0 +1,30 @@
+/*eslint-env node */
+(function () {
+
+ 'use strict';
+ const gulp = require('gulp');
+ const uglify = require('gulp-uglify');
+ const concat = require('gulp-concat');
+ const wiredep = require('wiredep');
+ const del = require('del');
+
+ module.exports = function(options){
+
+ gulp.task('cleanVendor', function(){
+ return del(
+ [
+ `${options.ngXosVendor}/ngXosVendor.min.js`
+ ],
+ {force: true}
+ );
+ });
+
+ gulp.task('vendor', ['cleanVendor'], function(){
+ const bowerDeps = wiredep().js;
+ return gulp.src(bowerDeps)
+ .pipe(concat('ngXosVendor.min.js'))
+ .pipe(uglify())
+ .pipe(gulp.dest(options.ngXosVendor));
+ });
+ };
+})();
\ No newline at end of file