freeswitch/html5/verto/verto_communicator/Gruntfile.js
Ken Rice c9bb3a2a3e FS-8102 #resolve #comment Add auto-provision/config support to VC
Add support for loading config from external json. config.json in the
base path of VC will allow over-ride of arbitrary settings and setting
of arbitrary data in the verto.data data store.

add ability to specify autologin flag in the configs.

add autocall to config.json and make it actually autocall.

additionally refactor the call function so that it will actually call
something.
2015-09-21 16:01:15 -05:00

357 lines
8.5 KiB
JavaScript

/*jslint node: true */
'use strict';
// var pkg = require('./package.json');
module.exports = function (grunt) {
// Time how long tasks take. Can help when optimizing build times
require('time-grunt')(grunt);
// load all grunt tasks
require('jit-grunt')(grunt, {
includereplace: 'grunt-include-replace',
useminPrepare: 'grunt-usemin'
});
// Configurable paths
var config = {
app: './src',
dist: 'dist'
};
var ip = grunt.option('ip');
var debug = grunt.option('debug');
var uglify_config = {
};
if (debug) {
uglify_config = {
options: {
beautify: debug ? true : false,
compress: debug ? false : true,
mangle: debug ? false : true
}
};
}
// Project configuration.
grunt.initConfig({
uglify: uglify_config,
// Project settings
config: config,
// Watch things
watch: {
bower: {
files: ['bower.json'],
tasks: ['wiredep']
},
styles: {
files: ['<%= config.app %>/css/{,*/}*.css'],
tasks: ['newer:copy:styles', 'postcss']
},
gruntfile: {
files: ['Gruntfile.js']
}
},
wiredep: {
app: {
src: ['src/index.html'],
ignorePath: /\.\.\//
}
},
postcss: {
options: {
map: true,
processors: [
// Add vendor prefixed styles
require('autoprefixer-core')({
browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']
})
]
},
dist: {
files: [{
expand: true,
cwd: '.tmp/css/',
src: '{,*/}*.css',
dest: '.tmp/css/'
}]
}
},
browserSync: {
options: {
notify: false,
background: true,
https: true,
open: false,
// logLevel: "debug",
ghostMode: false,
logConnections: true,
ui: false
},
livereload: {
options: {
files: [
'<%= config.app %>/**/*.html',
'.tmp/styles/{,*/}*.css',
'<%= config.app %>/images/{,*/}*',
'.tmp/**/*.js',
'<%= config.app %>/**/*.js'
],
port: 9001,
server: {
baseDir: ['../js/src/', './js', '.'],
index: 'src/index.html',
middleware: [
require("connect-logger")(),
function(req, res, next) {
if (ip) {
var parsed = require("url").parse(req.url);
if (!parsed.pathname.match(/vertoService\.js$/)) {
next();
return;
} else {
grunt.log.writeln('Providing replaced data.');
var path = require('path');
var theFilePath = path.resolve('./src', 'vertoService', 'services', 'vertoService.js');
var f = require('fs').readFileSync(theFilePath).toString();
res.setHeader('Content-Type', 'text/javascript');
res.end(f.replace(/window\.location\.hostname/gi, ip));
return;
}
}
next();
}
],
routes: {
'/partials': 'src/partials',
'/bower_components': './bower_components',
'/js/src': '../js/src',
'/js': './js'
}
}
}
},
dist: {
options: {
port: 9001,
background: false,
server: {
baseDir: ['dist']
}
}
}
},
jshint: {
options: {
jshintrc: '.jshintrc',
reporter: require('jshint-stylish'),
ignores: ['js/3rd-party/**/*.js'],
force: true // TODO: Remove this once we get files linted correctly!!!
},
all: {
src: [
'Gruntfile.js',
'src/**/*.js'
]
}
},
clean: {
dist: {
files: [{
dot: true,
src: [
'.tmp',
'dist/{,*/}*',
'!dist/.git{,*/}*'
]
}]
}
},
// Renames files for browser caching purposes
filerev: {
dist: {
src: [
'dist/scripts/{,*/}*.js',
'dist/css/{,*/}*.css',
'dist/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'dist/css/fonts/*'
]
}
},
// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
options: {
dest: '<%= config.dist %>'
},
html: '<%= config.app %>/index.html'
},
// Performs rewrites based on rev and the useminPrepare configuration
usemin: {
options: {
assetsDirs: [
'<%= config.dist %>',
'<%= config.dist %>/images',
'<%= config.dist %>/styles'
]
},
html: ['<%= config.dist %>/**/*.html'],
css: ['<%= config.dist %>/styles/{,*/}*.css']
},
// The following *-min tasks produce minified files in the dist folder
imagemin: {
dist: {
files: [{
expand: true,
cwd: '<%= config.app %>/images',
src: '{,*/}*.{gif,jpeg,jpg,png}',
dest: '<%= config.dist %>/images'
}]
}
},
svgmin: {
dist: {
files: [{
expand: true,
cwd: '<%= config.app %>/images',
src: '{,*/}*.svg',
dest: '<%= config.dist %>/images'
}]
}
},
// htmlmin: {
// dist: {
// options: {
// collapseBooleanAttributes: true,
// collapseWhitespace: true,
// conservativeCollapse: true,
// removeAttributeQuotes: true,
// removeCommentsFromCDATA: true,
// removeEmptyAttributes: true,
// removeOptionalTags: true,
// // true would impact styles with attribute selectors
// removeRedundantAttributes: false,
// useShortDoctype: true
// },
// files: [{
// expand: true,
// cwd: '<%= config.dist %>',
// src: '{,*/}*.html',
// dest: '<%= config.dist %>'
// },
// {
// expand: true,
// cwd: '<%= config.dist %>/partials',
// src: '{,*/}*.html',
// dest: '<%= config.dist %>/partials'
// }]
// }
// },
// ng-annotate tries to make the code safe for minification automatically
// by using the Angular long form for dependency injection.
ngAnnotate: {
dist: {
files: [{
expand: true,
cwd: '.tmp/concat/scripts',
src: '*.js',
dest: '.tmp/concat/scripts'
}]
}
},
// Copies remaining files to places other tasks can use
copy: {
dist: {
files: [{
expand: true,
dot: true,
cwd: '<%= config.app %>',
dest: 'dist',
src: [
'*.{ico,png,txt}',
'*.html',
'*.json',
'partials/**/*.html',
'images/{,*/}*.{webp}',
'css/fonts/{,*/}*.*',
'sounds/*.*'
]
}, {
expand: true,
cwd: '.tmp/images',
dest: 'dist/images',
src: ['generated/*']
}, {
expand: true,
cwd: 'bower_components/bootstrap/dist',
src: 'fonts/*',
dest: 'dist'
}, {
expand: true,
cwd: 'bower_components/bootstrap-material-design/dist',
src: 'fonts/*',
dest: 'dist'
}]
},
styles: {
expand: true,
cwd: '<%= config.app %>/css',
dest: '.tmp/css/',
src: '{,*/}*.css'
}
},
// Run some tasks in parallel to speed up the build process
concurrent: {
server: [
'copy:styles'
],
dist: [
'copy:styles',
'imagemin',
'svgmin'
]
},
});
grunt.registerTask('serve', function (target) {
var tasks = [
'wiredep',
'concurrent:server',
'postcss'];
tasks = tasks.concat(['browserSync:livereload',
'watch']);
grunt.task.run(tasks);
});
grunt.registerTask('build', [
'clean:dist',
'wiredep',
'useminPrepare',
'concurrent:dist',
'postcss',
'concat',
'cssmin',
'ngAnnotate',
'uglify',
'copy:dist',
'filerev',
'usemin',
// 'htmlmin'
]);
};