Skip to content
Snippets Groups Projects
Gruntfile.js 21 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',
bbaer's avatar
bbaer committed
    var js_plugins = 'javascript/src/Plugins/*.js';
    var js_worker = 'javascript/src/Worker/*.js';
Carsten  Rose's avatar
Carsten Rose committed

    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        copy: {
            bootstrap: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/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
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/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
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/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: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/bootstrap/dist/css/',
                        src: [
                            'bootstrap.min.css',
                            'bootstrap-theme.min.css'
                        ],
                        dest: 'css/',
                        filter: 'isFile',
                        expand: true,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/bootstrap/dist/js/',
                        src: [
                            'bootstrap.min.js'
                        ],
                        dest: 'js/',
                        expand: true,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/bootstrap/dist/fonts/',
                        expand: true,
                        src: [
                            '*'
                        ],
                        dest: 'fonts/',
                        flatten: true
                    }
                ]
            },
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/bootstrap-validator/dist/',
                        src: [
                            'validator.min.js'
                        ],
                        dest: 'js/',
                        expand: true,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/bootstrap-validator/dist/',
                        src: [
                            'validator.min.js'
                        ],
                        dest: typo3_js,
                        expand: true,
                        flatten: true
                    }
                ]
            },
Carsten  Rose's avatar
Carsten Rose committed
            jquery: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/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
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jquery/dist/',
                        src: [
                            'jquery.min.js'
                        ],
                        expand: true,
                        dest: "js/",
                        flatten: true
                    }
                ]
            },
            jquery_tablesorter: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tablesorter/dist/js/',
                        src: [
                            'extras/jquery.tablesorter.pager.min.js',
                            'widgets/widget-columnSelector.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tablesorter/dist/js/',
                        src: [
                            'extras/jquery.tablesorter.pager.min.js',
                            'widgets/widget-columnSelector.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
            },
Rafael Ostertag's avatar
Rafael Ostertag committed
            ChartJS: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/chart.js/dist/',
Rafael Ostertag's avatar
Rafael Ostertag committed
                        src: [
                            'Chart.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/chart.js/dist/',
Rafael Ostertag's avatar
Rafael Ostertag committed
                        src: [
                            'Chart.min.js'
                        ],
                        expand: true,
                        dest: "js/",
                        flatten: true
                    }
                ]
            },
Carsten  Rose's avatar
Carsten Rose committed
            jqwidgets: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
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
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/styles/',
Carsten  Rose's avatar
Carsten Rose committed
                        src: [
robot's avatar
robot committed
                            'jqx.base.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
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/styles/',
                        src: [
                            'images/**'
                        ],
                        expand: true,
                        dest: typo3_css
Carsten  Rose's avatar
Carsten Rose committed
                    }
                ]
            },
            jqwidgets_devel: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/',
                        src: [
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/styles/',
                        src: [
                            'jqx.base.css',
                        ],
                        expand: true,
                        dest: 'css/',
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/jqwidgets-framework/jqwidgets/styles/',
                        src: [
                            'images/**'
                        ],
                        expand: true,
                        dest: 'css/'
                    }
                ]
Rafael Ostertag's avatar
Rafael Ostertag committed
            tinymce: {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tinymce/',
Rafael Ostertag's avatar
Rafael Ostertag committed
                            'tinymce.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tinymce/',
                            'themes/*/theme.min.js',
                            'plugins/*/plugin.min.js',
Rafael Ostertag's avatar
Rafael Ostertag committed
                            'skins/**'
Rafael Ostertag's avatar
Rafael Ostertag committed
                        dest: typo3_js,
Rafael Ostertag's avatar
Rafael Ostertag committed
                        flatten: false
Rafael Ostertag's avatar
Rafael Ostertag committed
            tinymce_devel: {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tinymce/',
Rafael Ostertag's avatar
Rafael Ostertag committed
                            'tinymce.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/tinymce/',
                            'themes/*/theme.min.js',
                            'plugins/*/plugin.min.js',
Rafael Ostertag's avatar
Rafael Ostertag committed
                            'skins/**'
Rafael Ostertag's avatar
Rafael Ostertag committed
                        dest: 'js/',
Rafael Ostertag's avatar
Rafael Ostertag committed
                        flatten: false
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/wolfy87-eventemitter/',
                        src: [
                            'EventEmitter.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/wolfy87-eventemitter/',
                        src: [
                            'EventEmitter.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
bbaer's avatar
bbaer committed
            },
            fabric: {
                files: [
                    {
                        cwd: 'javascript/',
                        src: [
                            'fabric.min.js'
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
                        cwd: 'javascript/',
                        src: [
                            'fabric.min.js'
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
            },
            typeahead: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/corejs-typeahead/dist',
                        src: [
                            "typeahead.bundle.min.js"
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/corejs-typeahead/dist',
                        src: [
                            "typeahead.bundle.min.js"
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    }
                ]
            },
            codemirror: {
                files: [
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/lib',
                        src: [
                            "codemirror.js"
                        ],
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/lib',
                        src: [
                            "codemirror.js"
                        ],
                        expand: true,
                        dest: 'js/',
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/lib',
                        src: [
                            "codemirror.css"
                        ],
                        expand: true,
                        dest: typo3_css,
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/lib',
                        src: [
                            "codemirror.css"
                        ],
                        expand: true,
                        dest: 'css/',
                        flatten: true
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/mode',
                        src: [
                            "**"
                        ],
                        expand: true,
                        dest: typo3_js + "/code-mirror-mode",
                        flatten: false
                    },
                    {
bbaer's avatar
bbaer committed
                        cwd: 'node_modules/codemirror/mode',
                        src: [
                            "**"
                        ],
                        expand: true,
                        dest: "js/code-mirror-mode",
                        flatten: false
                    }
                ]

bbaer's avatar
bbaer committed
            },
            qfqPlugins: {
                files: [
                    {
                        src: js_plugins,
                        expand: true,
                        dest: "js/",
                        flatten: true
                    },
                    {
                        src: js_plugins,
                        expand: true,
                        dest: typo3_js,
                        flatten: true
                    }
                ]
            },
            worker: {
                files: [
                    {
                        src: js_worker,
                        expand: true,
                        dest: "js/Worker/",
                        flatten: true
                    },
                    {
                        src: js_worker,
                        expand: true,
                        dest: typo3_js,
bbaer's avatar
bbaer committed
                        flatten: true
                    },
                    {
                        src: js_worker,
                        expand: true,
                        dest: "mockup/Worker/",
                        flatten: true
            },
            fontAwesome: {
                files: [
                    {
                        cwd: 'node_modules/font-awesome/css/',
                        src: [
                            'font-awesome.min.css'
                        ],
                        dest: typo3_css,
                        filter: 'isFile',
                        expand: true,
                        flatten: true
                    },
                    {
                        cwd: 'node_modules/font-awesome/fonts/',
                        expand: true,
                        src: [
                            '*'
                        ],
                        dest: typo3_fonts,
                        flatten: true
                    }
                ]
            },
        },
        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'
bbaer's avatar
bbaer committed
            },
            qfqFabric: {
                src: ['javascript/src/Plugins/qfq.fabric.js'],
                dest: typo3_js + 'qfq.fabric.min.js'
            all: 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: {
                    '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-letter.css": "less/qfq-letter.css.less",
                    "extension/Resources/Public/Css/qfq-plain.css": "less/qfq-plain.css.less",
                    "extension/Resources/Public/Css/tablesorter-bootstrap.css": "less/tablesorter-bootstrap.less"
                },
                options: {
                    compress: true
                }
            },
            devel: {
                files: {
                    "css/qfq-bs.css": "less/qfq-bs.css.less",
                    "css/qfq-letter.css": "less/qfq-letter.css.less",
                    "css/qfq-plain.css": "less/qfq-plain.css.less",
                    "css/tablesorter-bootstrap.css": "less/tablesorter-bootstrap.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/helper/mock-ajax.js'],
                files: js_sources.concat(['less/*.less']),
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('only-js', ['jshint', 'concat_in_order', 'uglify', 'copy']);

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