2014-09-07 09:56:17 +02:00
|
|
|
module.exports = function (grunt) {
|
|
|
|
|
2015-05-14 12:08:19 +02:00
|
|
|
var webpack = require('webpack');
|
|
|
|
var webpackConfig = require('./webpack.config.js');
|
2015-05-15 12:37:27 +02:00
|
|
|
var fs = require('fs');
|
|
|
|
var path = require('path');
|
|
|
|
// var pkg = grunt.file.readJSON('package.json');
|
|
|
|
// var version = pkg.version;
|
|
|
|
var testDir = 'test';
|
|
|
|
var testHost = 'http://localhost:8080/';
|
2015-05-02 11:54:24 +02:00
|
|
|
|
2015-04-28 09:50:53 +02:00
|
|
|
grunt.initConfig({
|
2015-05-02 11:54:24 +02:00
|
|
|
|
2015-05-10 13:12:31 +02:00
|
|
|
jshint: {
|
|
|
|
src: [
|
|
|
|
'Gruntfile.js',
|
2015-05-15 16:26:21 +02:00
|
|
|
'webpack.config.js',
|
2015-05-10 13:12:31 +02:00
|
|
|
'src-es6/**/*.js'
|
|
|
|
],
|
|
|
|
options: {
|
|
|
|
jshintrc: '.jshintrc'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
qunit: {
|
2015-05-15 12:37:27 +02:00
|
|
|
// files: ['test/**/*.html'],
|
|
|
|
// urls: ['http://localhost:9000/test/test.html']
|
|
|
|
all: {
|
|
|
|
options: {
|
|
|
|
urls: getTestFiles(testDir, testHost)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
only: {
|
|
|
|
options: {
|
|
|
|
urls: []
|
|
|
|
}
|
|
|
|
}
|
2015-05-10 13:12:31 +02:00
|
|
|
},
|
|
|
|
|
2015-05-14 12:08:19 +02:00
|
|
|
copy: {
|
|
|
|
build: {
|
|
|
|
src: ['**'],
|
|
|
|
cwd: 'static/style',
|
|
|
|
dest: 'build/tablefilter',
|
|
|
|
expand: true
|
|
|
|
},
|
|
|
|
dist: {
|
|
|
|
src: ['**'],
|
|
|
|
cwd: 'static/style',
|
|
|
|
dest: 'dist/tablefilter',
|
|
|
|
expand: true
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
'webpack-dev-server': {
|
2015-05-02 11:54:24 +02:00
|
|
|
options: {
|
|
|
|
webpack: webpack.dev,
|
2015-05-15 12:37:27 +02:00
|
|
|
publicPath: '/build/'
|
2015-05-02 11:54:24 +02:00
|
|
|
},
|
|
|
|
start: {
|
|
|
|
keepAlive: true,
|
|
|
|
webpack: {
|
2015-05-14 12:08:19 +02:00
|
|
|
devtool: 'eval',
|
2015-05-02 11:54:24 +02:00
|
|
|
debug: true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
webpack: {
|
2015-05-14 12:08:19 +02:00
|
|
|
dist: webpackConfig.dist,
|
|
|
|
build: webpackConfig.build
|
|
|
|
// 'dev': {
|
2015-05-10 13:12:31 +02:00
|
|
|
// entry: __dirname + '/src-es6/tablefilter.js',
|
|
|
|
// // entry: {
|
|
|
|
// // tablefilter: __dirname + '/src-es6/tablefilter.js',
|
|
|
|
// // colsVisibility: __dirname +
|
2015-05-15 16:26:21 +02:00
|
|
|
// // '/src-es6/extensions/colsVisibility/colsVisibility.js'
|
2015-05-10 13:12:31 +02:00
|
|
|
// // },
|
|
|
|
// output: {
|
2015-05-14 12:08:19 +02:00
|
|
|
// publicPath: '/src/',
|
|
|
|
// path: __dirname + '/src',
|
|
|
|
// filename: 'tablefilter.js',
|
|
|
|
// chunkFilename: '[name].js',
|
2015-05-10 13:12:31 +02:00
|
|
|
// libraryTarget: 'umd'
|
|
|
|
// },
|
|
|
|
// resolve: {
|
|
|
|
// extensions: ['', '.js']
|
|
|
|
// },
|
|
|
|
// module: {
|
|
|
|
// loaders: [{
|
|
|
|
// test: path.join(__dirname, 'src-es6'),
|
|
|
|
// exclude: /node_modules/,
|
|
|
|
// query: {
|
|
|
|
// compact: false
|
|
|
|
// },
|
|
|
|
// loader: 'babel-loader'
|
|
|
|
// }]
|
|
|
|
// },
|
2015-05-14 12:08:19 +02:00
|
|
|
// devtool: 'sourcemap',
|
2015-05-10 13:12:31 +02:00
|
|
|
// debug: true
|
|
|
|
// },
|
2015-05-13 12:54:29 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
babel: {
|
|
|
|
options: {
|
|
|
|
sourceMap: true,
|
|
|
|
modules: 'amd',
|
|
|
|
compact: false
|
|
|
|
},
|
|
|
|
dist: {
|
|
|
|
files: [{
|
|
|
|
expand: true,
|
|
|
|
cwd: 'src-es6',
|
|
|
|
src: ['**/*.js'],
|
2015-05-15 12:37:27 +02:00
|
|
|
dest: 'build/tablefilter'
|
2015-05-13 12:54:29 +02:00
|
|
|
}]
|
|
|
|
}
|
2015-05-02 11:54:24 +02:00
|
|
|
}
|
|
|
|
|
2014-09-07 09:56:17 +02:00
|
|
|
});
|
|
|
|
|
2015-05-10 13:12:31 +02:00
|
|
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
|
|
|
grunt.loadNpmTasks('grunt-contrib-qunit');
|
2015-05-14 12:08:19 +02:00
|
|
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
2015-05-02 11:54:24 +02:00
|
|
|
grunt.loadNpmTasks('grunt-webpack');
|
2015-05-13 12:54:29 +02:00
|
|
|
grunt.loadNpmTasks('grunt-babel');
|
2015-05-02 11:54:24 +02:00
|
|
|
|
|
|
|
// The development server (the recommended option for development)
|
2015-05-15 12:37:27 +02:00
|
|
|
grunt.registerTask('server', ['webpack-dev-server:start']);
|
2015-05-02 11:54:24 +02:00
|
|
|
|
|
|
|
// Build and watch cycle (another option for development)
|
|
|
|
// Advantage: No server required, can run app from filesystem
|
|
|
|
// Disadvantage: Requests are not blocked until bundle is available,
|
|
|
|
// can serve an old app on too fast refresh
|
2015-05-15 12:37:27 +02:00
|
|
|
grunt.registerTask('dev', ['jshint', 'webpack:build', 'copy:build']);
|
2015-05-02 11:54:24 +02:00
|
|
|
|
|
|
|
// Production build
|
2015-05-23 10:55:51 +02:00
|
|
|
grunt.registerTask('dist',
|
|
|
|
['jshint', 'webpack:dist', 'copy:dist'/*, 'test'*/]);
|
2015-05-10 13:12:31 +02:00
|
|
|
|
2015-05-13 12:54:29 +02:00
|
|
|
// Transpile with Babel
|
2015-05-15 16:26:21 +02:00
|
|
|
grunt.registerTask('dev-modules', ['babel', 'copy:build']);
|
2015-05-13 12:54:29 +02:00
|
|
|
|
2015-05-15 12:37:27 +02:00
|
|
|
// Tests
|
|
|
|
grunt.registerTask('test', ['qunit:all']);
|
|
|
|
|
|
|
|
// Custom task running QUnit tests for specified files.
|
|
|
|
// Usage: grunt test-only:test.html,test-help.html
|
|
|
|
grunt.registerTask('test-only',
|
|
|
|
'A task that runs only specified tests.',
|
|
|
|
function(tests) {
|
|
|
|
if(!tests) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
tests = tests.split(',');
|
|
|
|
var res = [];
|
|
|
|
|
|
|
|
tests.forEach(function(itm) {
|
|
|
|
var filePath = path.resolve(testDir, itm);
|
|
|
|
var parts = filePath.split(path.sep);
|
|
|
|
res.push(buildTestUrl(testHost, testDir, parts));
|
|
|
|
});
|
|
|
|
|
|
|
|
grunt.config('qunit.only.options.urls', res);
|
|
|
|
grunt.task.run('qunit:only');
|
|
|
|
});
|
|
|
|
|
|
|
|
function isTestFile(pth) {
|
|
|
|
var allowedExts = ['.html', '.htm'];
|
|
|
|
for(var i=0, len=allowedExts.length; i<len; i++){
|
|
|
|
var ext = allowedExts[i];
|
|
|
|
if(pth.indexOf(ext) !== -1){
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function buildTestUrl(host, testDir, parts) {
|
|
|
|
var idx = parts.indexOf(testDir);
|
|
|
|
var fileIdx = parts.length;
|
|
|
|
var relParts = parts.slice(idx, fileIdx);
|
|
|
|
return host.concat(relParts.join('/'));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns the list of test files from the test folder for QUnit
|
|
|
|
function getTestFiles(testDir, host) {
|
|
|
|
|
|
|
|
var getFiles = function(dir, host) {
|
|
|
|
var res = [];
|
|
|
|
var items = fs.readdirSync(dir);
|
|
|
|
|
|
|
|
items.forEach(function(itm){
|
|
|
|
var fileOrDir = path.resolve(dir, itm);
|
|
|
|
if(isTestFile(fileOrDir)) {
|
|
|
|
var parts = fileOrDir.split(path.sep);
|
|
|
|
res.push(buildTestUrl(host, testDir, parts));
|
|
|
|
} else {
|
|
|
|
if(fs.lstatSync(fileOrDir).isDirectory()) {
|
|
|
|
res = res.concat(getFiles(fileOrDir, host));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return res;
|
|
|
|
};
|
|
|
|
|
|
|
|
return getFiles(testDir, host);
|
|
|
|
}
|
|
|
|
|
2015-02-15 09:55:23 +01:00
|
|
|
};
|
2015-05-15 12:37:27 +02:00
|
|
|
|