Skip to content
Snippets Groups Projects
Gruntfile.js 12.8 KiB
Newer Older
Carsten  Rose's avatar
Carsten Rose committed
module.exports = function (grunt) {
    var typo3_css = 'extension/Resources/Public/Css/';
    var typo3_js = 'extension/Resources/Public/JavaScript/';
    var typo3_fonts = 'extension/Resources/Public/fonts/';
    var js_sources = [
        'javascript/src/Helper/*.js',
        'javascript/src/Element/*.js',
Carsten  Rose's avatar
Carsten Rose committed

    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        copy: {
            bootstrap: {
                files: [
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/bootstrap/dist/css/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'bootstrap.min.css',
                            'bootstrap-theme.min.css'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
                        dest: typo3_css,
Carsten  Rose's avatar
Carsten Rose committed
                        filter: 'isFile',
robot's avatar
robot committed
                        expand: true,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    },
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/bootstrap/dist/js/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'bootstrap.min.js'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
                        dest: typo3_js,
robot's avatar
robot committed
                        expand: true,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    },
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/bootstrap/dist/fonts/',
Carsten  Rose's avatar
Carsten Rose committed
                        expand: true,
                        src: [
robot's avatar
robot committed
                            '*'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
                        dest: typo3_fonts,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    }
                ]
            },
            bootstrap_dev: {
                files: [
                    {
                        cwd: 'bower_components/bootstrap/dist/css/',
                        src: [
                            'bootstrap.min.css',
                            'bootstrap-theme.min.css'
                        ],
                        dest: 'css/',
                        filter: 'isFile',
                        expand: true,
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/bootstrap/dist/js/',
                        src: [
                            'bootstrap.min.js'
                        ],
                        dest: 'js/',
                        expand: true,
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/bootstrap/dist/fonts/',
                        expand: true,
                        src: [
                            '*'
                        ],
                        dest: 'fonts/',
                        flatten: true
                    }
                ]
            },
            bootstrap_validator: {
                files: [
                    {
                        cwd: 'bower_components/bootstrap-validator/dist/',
                        src: [
                            'validator.min.js'
                        ],
                        dest: 'js/',
                        expand: true,
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/bootstrap-validator/dist/',
                        src: [
                            'validator.min.js'
                        ],
                        dest: typo3_js,
                        expand: true,
                        flatten: true
                    }
                ]
            },
Carsten  Rose's avatar
Carsten Rose committed
            jquery: {
                files: [
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/jquery/dist/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'jquery.min.js'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
robot's avatar
robot committed
                        expand: true,
                        dest: typo3_js,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    {
                        cwd: 'bower_components/jquery/dist/',
                        src: [
                            'jquery.min.js'
                        ],
                        expand: true,
                        dest: "js/",
                        flatten: true
                    }
                ]
            },
            jquery_tablesorter: {
                files: [
                    {
                        cwd: 'bower_components/tablesorter/dist/js/',
                        src: [
                            'jquery.tablesorter.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    {
                        cwd: 'bower_components/tablesorter/dist/js/',
                        src: [
                            'jquery.tablesorter.min.js',
                            'jquery.tablesorter.widgets.min.js',
                            'widgets/widget-grouping.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
            },
Carsten  Rose's avatar
Carsten Rose committed
            jqwidgets: {
                files: [
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/jqwidgets/jqwidgets/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'jqx-all.js'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
robot's avatar
robot committed
                        expand: true,
                        dest: typo3_js,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    },
                    {
robot's avatar
robot committed
                        cwd: 'bower_components/jqwidgets/jqwidgets/styles/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'jqx.base.css',
                            'jqx.darkblue.css'
Carsten  Rose's avatar
Carsten Rose committed
                        ],
robot's avatar
robot committed
                        expand: true,
                        dest: typo3_css,
Carsten  Rose's avatar
Carsten Rose committed
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/jqwidgets/jqwidgets/styles/',
                        src: [
                            'images/**'
                        ],
                        expand: true,
                        dest: typo3_css
Carsten  Rose's avatar
Carsten Rose committed
                    }
                ]
            },
            jqwidgets_devel: {
                files: [
                    {
                        cwd: 'bower_components/jqwidgets/jqwidgets/',
                        src: [
                            'jqx-all.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/jqwidgets/jqwidgets/styles/',
                        src: [
                            'jqx.base.css',
                            'jqx.darkblue.css'
                        ],
                        expand: true,
                        dest: 'css/',
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/jqwidgets/jqwidgets/styles/',
                        src: [
                            'images/**'
                        ],
                        expand: true,
                        dest: 'css/'
                    }
                ]
            },
            eventEmitter: {
                files: [
                    {
                        cwd: 'bower_components/eventEmitter/',
                        src: [
                            'EventEmitter.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
                        cwd: 'bower_components/eventEmitter/',
                        src: [
                            'EventEmitter.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
Carsten  Rose's avatar
Carsten Rose committed
            }
        },
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
            },
            build: {
                src: ['js/<%= pkg.name %>.debug.js'],
                dest: typo3_js + '<%= pkg.name %>.min.js'
            }
        },
        jshint: {
            all: [
                'javascript/src/*.js'
            ]
        },
                options: {
                    extractRequired: function (filepath, filecontent) {
                        var workingdir = path.normalize(filepath).split(path.sep);
                        workingdir.pop();

                        var deps = this.getMatches(/\*\s*@depend\s(.*\.js)/g, filecontent);
                        deps.forEach(function (dep, i) {
                            var dependency = workingdir.concat([dep]);
                            deps[i] = path.join.apply(null, dependency);
                        });
                        return deps;
                    },
                    extractDeclared: function (filepath) {
                        return [filepath];
                    },
                    onlyConcatRequiredFiles: false
                },
                files: {
                    'js/<%= pkg.name %>.debug.js': js_sources
                }
                options: {
                    extractRequired: function (filepath, filecontent) {
                        var workingdir = path.normalize(filepath).split(path.sep);
                        workingdir.pop();

                        var deps = this.getMatches(/\*\s*@depend\s(.*\.js)/g, filecontent);
                        deps.forEach(function (dep, i) {
                            var dependency = workingdir.concat([dep]);
                            deps[i] = path.join.apply(null, dependency);
                        });
                        return deps;
                    },
                    extractDeclared: function (filepath) {
                        return [filepath];
                    },
                    onlyConcatRequiredFiles: false
                },
                files: {
                    'extension/Resources/Public/JavaScript/<%= pkg.name %>.debug.js': js_sources
                }
        less: {
            production: {
                files: {
                    "extension/Resources/Public/Css/qfq-bs.css": "less/qfq-bs.css.less",
                    "extension/Resources/Public/Css/qfq-plain.css": "less/qfq-plain.css.less",
                    "extension/Resources/Public/Css/bs-tablesorter.css": "less/bs-tablesorter.less"
                },
                options: {
                    compress: true
                }
            },
            devel: {
                files: {
                    "css/qfq-bs.css": "less/qfq-bs.css.less",
                    "css/qfq-plain.css": "less/qfq-plain.css.less",
                    "css/bs-tablesorter.css": "less/bs-tablesorter.less"
                },
                options: {
                    banner: "/* Change qfq-bs.css.less, not qfq-bs.css */"
                options: {
                    vendor: [
                        'js/jquery.min.js',
                        'js/bootstrap.min.js',
                        'js/jqx-all.js',
                    helpers: ['tests/jasmine/unit/helper/mock-ajax.js'],
                    template: 'tests/jasmine/unit/SpecRunner.tmpl'
        watch: {
            scripts: {
                files: [
                    'javascript/src/*.js',
                    'javascript/src/Helper/*.js',
                    'javascript/src/Element/*.js',
Carsten  Rose's avatar
Carsten Rose committed
        }
Carsten  Rose's avatar
Carsten Rose committed
    });

    // Load the plugin that provides the "uglify" task.
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-jasmine');
Carsten  Rose's avatar
Carsten Rose committed

    // Default task(s).
    grunt.registerTask('default', ['jshint', 'concat_in_order', 'uglify', 'copy', 'less']);
Carsten  Rose's avatar
Carsten Rose committed

    grunt.registerTask('run-jasmine', ['jshint', 'concat_in_order', 'jasmine']);
Carsten  Rose's avatar
Carsten Rose committed
};