forked from Mirrors/freeswitch
391 lines
9.4 KiB
JavaScript
391 lines
9.4 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 = {
|
|
options: {
|
|
sourceMap: true,
|
|
sourceMapIncludeSources:true
|
|
}
|
|
};
|
|
|
|
if (debug) {
|
|
uglify_config['options']['mangle'] = debug ? false : true;
|
|
uglify_config['options']['beautify'] = debug ? false : true;
|
|
uglify_config['options']['compress'] = 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: /\.\.\//
|
|
}
|
|
},
|
|
|
|
revision: {
|
|
options: {
|
|
property: 'meta.revision',
|
|
ref: 'HEAD',
|
|
short: true
|
|
}
|
|
},
|
|
|
|
preprocess: {
|
|
options: {
|
|
context: {
|
|
revision: '<%= meta.revision %>'
|
|
}
|
|
},
|
|
js: {
|
|
src: 'src/vertoControllers/controllers/AboutController.source.js',
|
|
dest: 'src/vertoControllers/controllers/AboutController.js'
|
|
},
|
|
},
|
|
|
|
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/{,*/}*',
|
|
'<%= config.app %>/locales/{,*/}*',
|
|
'.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',
|
|
'/locales': 'src/locales',
|
|
'/config.json': 'src/config.json',
|
|
'/contributors.txt': 'src/contributors.txt',
|
|
'/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',
|
|
'img/*.png',
|
|
'images/{,*/}*.{webp}',
|
|
'css/fonts/{,*/}*.*',
|
|
'sounds/*.*',
|
|
'locales/*.*'
|
|
]
|
|
}, {
|
|
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.loadNpmTasks('grunt-git-revision');
|
|
grunt.loadNpmTasks('grunt-preprocess');
|
|
|
|
grunt.registerTask('serve', function (target) {
|
|
var tasks = [
|
|
'wiredep',
|
|
'concurrent:server',
|
|
'postcss'];
|
|
|
|
|
|
tasks = tasks.concat(['browserSync:livereload',
|
|
'watch']);
|
|
|
|
grunt.task.run(tasks);
|
|
});
|
|
|
|
grunt.registerTask('default', ['build']);
|
|
|
|
grunt.registerTask('build', [
|
|
'clean:dist',
|
|
'revision',
|
|
'preprocess',
|
|
'wiredep',
|
|
'useminPrepare',
|
|
'concurrent:dist',
|
|
'postcss',
|
|
'concat',
|
|
'cssmin',
|
|
'ngAnnotate',
|
|
'uglify',
|
|
'copy:dist',
|
|
'filerev',
|
|
'usemin',
|
|
// 'htmlmin'
|
|
]);
|
|
|
|
};
|