blob: 1ca50695a254bf71f100168ab863582fc88ed4ec [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var git = require('git-rev');
module.exports = function(grunt) {
var classPathSep = (process.platform === "win32") ? ';' : ':',
gitHash = '',
pkg = grunt.file.readJSON('package.json'),
distPath = 'dist',
publicPath = 'public',
libPath = distPath + '/js/libs',
isDashboardDirectory = grunt.file.isDir('public'),
modulesPath = 'public/';
if (!isDashboardDirectory) {
modulesPath = '../public/'
}
grunt.initConfig({
watch: {
js: {
files: ['public/**/*.js'],
tasks: ['copy:dist']
},
html: {
files: ['public/**/*.html'],
tasks: ['copy:dist']
},
css: {
files: ['public/**/*.scss', 'public/**/*.css'],
tasks: ['copy:dist', 'sass']
},
image: {
files: ['public/**/*.{ico,gif,png}'],
tasks: ['copy:dist']
}
},
connect: {
server: {
options: {
port: 9999,
base: distPath,
// change this to '0.0.0.0' to access the server from outside
hostname: '0.0.0.0',
middleware: function(connect, options, defaultMiddleware) {
var proxy = require('grunt-connect-proxy/lib/utils').proxyRequest;
return [
// Include the proxy first
proxy
].concat(defaultMiddleware);
}
},
proxies: [{
context: '/api', // the context of the data service
host: '127.0.0.1',
port: 21000, // the port that the data service is running on
ws: true,
changeOrigin: false,
https: false,
xforward: false,
//xforward: false
}],
},
},
devUpdate: {
main: {
options: {
updateType: 'force'
}
}
},
compress: {
release: {
options: {
archive: function() {
return [pkg.name, pkg.version, gitHash].join('_') + '.tgz';
}
},
src: ['node_modules/**', 'package.json', 'server.js', 'server/**', 'public/**', '!public/js/**', '!public/modules/**/*.js']
}
},
npmcopy: {
// Javascript
js: {
options: {
destPrefix: libPath
},
files: {
'jquery/js': 'jquery/dist/jquery.min.js',
'requirejs': 'requirejs/require.js',
'requirejs-text': 'requirejs-text/text.js',
'underscore': 'underscore/underscore-min.js',
'bootstrap/js': 'bootstrap/dist/js/bootstrap.min.js',
'backbone': 'backbone/backbone-min.js',
'backbone-babysitter': 'backbone.babysitter/lib/backbone.babysitter.min.js',
'backbone-marionette': 'backbone.marionette/lib/backbone.marionette.min.js',
'backbone-paginator': 'backbone.paginator/lib/backbone.paginator.min.js',
'backbone-wreqr': 'backbone.wreqr/lib/backbone.wreqr.min.js',
'backgrid/js': 'backgrid/lib/backgrid.js',
'backgrid-filter/js': 'backgrid-filter/backgrid-filter.min.js',
'backgrid-orderable-columns/js': 'backgrid-orderable-columns/backgrid-orderable-columns.js',
'backgrid-paginator/js': 'backgrid-paginator/backgrid-paginator.min.js',
'backgrid-sizeable-columns/js': 'backgrid-sizeable-columns/backgrid-sizeable-columns.js',
'backgrid-columnmanager/js': 'backgrid-columnmanager/src/Backgrid.ColumnManager.js',
'jquery-asBreadcrumbs/js': 'jquery-asBreadcrumbs/dist/jquery-asBreadcrumbs.min.js',
'd3': 'd3/d3.min.js',
'd3/': 'd3-tip/index.js',
'dagre-d3': 'dagre-d3/dist/dagre-d3.min.js',
'select2': 'select2/dist/js/select2.full.min.js',
'backgrid-select-all': 'backgrid-select-all/backgrid-select-all.min.js',
'moment/js': 'moment/min/moment.min.js',
'jquery-placeholder/js': 'jquery-placeholder/jquery.placeholder.js',
'platform': 'platform/platform.js',
'jQueryQueryBuilder/js': 'jQuery-QueryBuilder/dist/js/query-builder.standalone.min.js',
'bootstrap-daterangepicker/js': 'bootstrap-daterangepicker/daterangepicker.js'
}
},
css: {
options: {
destPrefix: libPath
},
files: {
'bootstrap/css': 'bootstrap/dist/css/bootstrap.min.css',
'bootstrap/fonts': 'bootstrap/fonts/glyphicons-halflings-regular.woff2',
'backgrid/css': 'backgrid/lib/backgrid.css',
'backgrid-filter/css': 'backgrid-filter/backgrid-filter.min.css',
'backgrid-orderable-columns/css': 'backgrid-orderable-columns/backgrid-orderable-columns.css',
'backgrid-paginator/css': 'backgrid-paginator/backgrid-paginator.css',
'backgrid-sizeable-columns/css': 'backgrid-sizeable-columns/backgrid-sizeable-columns.css',
'backgrid-columnmanager/css': 'backgrid-columnmanager/lib/Backgrid.ColumnManager.css',
'jquery-asBreadcrumbs/css': 'jquery-asBreadcrumbs/dist/css/asBreadcrumbs.min.css',
'select2/css': 'select2/dist/css/select2.min.css',
'backgrid-select-all': 'backgrid-select-all/backgrid-select-all.min.css',
'font-awesome/css': 'font-awesome/css/font-awesome.min.css',
'font-awesome/fonts': 'font-awesome/fonts',
'jQueryQueryBuilder/css': 'jQuery-QueryBuilder/dist/css/query-builder.default.min.css',
'bootstrap-daterangepicker/css': 'bootstrap-daterangepicker/daterangepicker.css'
}
},
license: {
options: {
destPrefix: libPath
},
files: {
'jquery': 'jquery/LICENSE.txt',
'requirejs-text': 'requirejs-text/LICENSE',
'underscore': 'underscore/LICENSE',
'bootstrap': 'bootstrap/LICENSE',
'backbone-babysitter': 'backbone.babysitter/LICENSE.md',
'backbone-marionette': 'backbone.marionette/license.txt',
'backbone-paginator': 'backbone.paginator/LICENSE-MIT',
'backbone-wreqr': 'backbone.wreqr/LICENSE.md',
'backgrid': 'backgrid/LICENSE-MIT',
'backgrid-filter': 'backgrid-filter/LICENSE-MIT',
'backgrid-orderable-columns': 'backgrid-orderable-columns/LICENSE-MIT',
'backgrid-paginator': 'backgrid-paginator/LICENSE-MIT',
'backgrid-sizeable-columns': 'backgrid-sizeable-columns/LICENSE-MIT',
'backgrid-columnmanager': 'backgrid-columnmanager/LICENSE',
'jquery-asBreadcrumbs': 'jquery-asBreadcrumbs/LICENSE',
'd3': 'd3/LICENSE',
'd3/': 'd3-tip/LICENSE',
'dagre-d3': 'dagre-d3/LICENSE',
'backgrid-select-all': 'backgrid-select-all/LICENSE-MIT',
'jquery-placeholder': 'jquery-placeholder/LICENSE.txt',
'platform/': 'platform/LICENSE',
'jQueryQueryBuilder/': 'jQuery-QueryBuilder/LICENSE'
}
}
},
sass: {
dist: {
files: {
'dist/css/style.css': 'public/css/scss/style.scss'
}
},
build: {
files: {
'dist/css/style.css': 'dist/css/scss/style.scss'
}
}
},
copy: {
dist: {
expand: true,
cwd: modulesPath,
src: ['**', '!**/scss/**'],
dest: distPath
},
build: {
expand: true,
cwd: modulesPath,
src: ['**'],
dest: distPath
}
},
clean: {
build: [distPath, libPath],
options: {
force: true
}
},
uglify: {
build: {
files: [{
expand: true,
cwd: 'dist/js',
src: '**/*.js',
dest: 'dist/js'
}]
}
},
cssmin: {
build: {
files: [{
expand: true,
cwd: 'dist/css',
src: '*.css',
dest: 'dist/css'
}]
}
},
htmlmin: {
build: {
options: {
removeComments: true,
collapseWhitespace: true
},
files: [{
expand: true,
cwd: 'dist/js/templates',
src: '**/*.html',
dest: 'dist/js/templates'
}]
}
}
});
grunt.loadNpmTasks('grunt-connect-proxy');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-npmcopy');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', [
'devUpdate',
'npmcopy:js',
'npmcopy:css'
]);
grunt.registerTask('server', ['clean', 'copy:dist', 'concurrent', 'watch']);
grunt.registerTask('dev', [
'clean',
'npmcopy:js',
'npmcopy:css',
'npmcopy:license',
'copy:dist',
'sass:dist',
'configureProxies:server',
'connect:server',
'watch'
]);
grunt.registerTask('build', [
'clean',
'npmcopy:js',
'npmcopy:css',
'npmcopy:license',
'copy:build',
'sass:build'
]);
grunt.registerTask('dev-minify', [
'clean',
'npmcopy:js',
'npmcopy:css',
'npmcopy:license',
'copy:dist',
'sass:dist',
'uglify:build',
'cssmin:build',
'htmlmin:build',
'configureProxies:server',
'connect:server',
'watch'
]);
grunt.registerTask('build-minify', [
'clean',
'npmcopy:js',
'npmcopy:css',
'npmcopy:license',
'copy:build',
'sass:build',
'uglify:build',
'cssmin:build',
'htmlmin:build'
]);
};