module.exports = function()

in frontend/Gruntfile.js [1:182]


module.exports = function(grunt) {

	var staticContentFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor/static';
	var jspFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor';
	var e2eTestSpecFolder = '../src/test/javascript/e2e/spec/**/*spec.js';
	var server = 'localhost';
	var port = '8080';
	
	grunt.initConfig({
		env : {
		    build : {
		    	PHANTOMJS_BIN: 'node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs',
		    	SLING_SERVER: (typeof process.env.SLING_SERVER === 'undefined' || process.env.SLING_SERVER === null || '' === process.env.SLING_SERVER) ? server : process.env.SLING_SERVER,
		    	SLING_PORT: (typeof process.env.SLING_PORT === 'undefined' || process.env.SLING_PORT === null || '' === process.env.SLING_PORT) ? port : process.env.SLING_PORT
		    }
		},
		'node-inspector': {
		  custom: {
		    options: {
		      'web-port': 5050,
		      'web-host': 'localhost',
		      'debug-port': 5857
		    }
		  }
		},
	    less: {
	      compileCore: {
	        options: {
	          strictMath: true,
	          sourceMap: true,
	          outputSourceFiles: true,
	          sourceMapURL: 'bootstrap.css.map',
	          sourceMapFilename: staticContentFolder+'/generated/css/bootstrap.css.map'
	        },
	        src: '../src/main/less/reseditor.less',
	        dest: staticContentFolder+'/generated/css/bootstrap.css'
	      }
	    }, 
	    watch: {
			less : {
				files : '../src/main/less/**/*.less',
				tasks : [ 'less' ],
			},
			all : {
				files : ['../src/main/less/**/*.less', 
				         '../src/test/javascript/**/*spec.js',
				         staticContentFolder+'/js/**/*.js',
				         jspFolder+'/*.*'
				         ],
				tasks : [ 'desktop_build' ],
			},
			e2e : {
				files : ['../src/main/less/**/*.less', 
				         '../src/test/javascript/**/*spec.js',
				         staticContentFolder+'/js/**/*.js',
				         jspFolder+'/*.*'
				         ],
				tasks : ['env:build', 'webdriver:chrome', 'webdriver:firefox']
			},
			karma : {
				files:[
			            staticContentFolder+'/generated/3rd_party/js/**/*.js',
			            staticContentFolder+'/js/**/*.js',
			            '../src/test/javascript/spec/*spec.js'
				        ],
				tasks: ['karma:desktop_build']
				
			}
	    },
	    _comment:'The google web fonts could be downloaded and copied via grunt-goog-webfont-dl. But goog-webfont-dl directly points to the global #!/usr/bin/env node and not to the local one.',
	    copy: {
	    	js_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'bootstrap/dist/js/bootstrap.min.js',
		                  'select2/select2.min.js',
		                  'jquery/dist/jquery.min.js',
		                  'jquery/dist/jquery.min.map',
		                  'bootbox/bootbox.min.js',
		                  'jstree/dist/jstree.min.js',
		                  'bootstrap-notify/dist/bootstrap-notify.min.js'
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/js',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      },
	    	css_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'select2/select2.css',
		                  'select2/select2.png',
		                  'select2/select2-spinner.gif',
		                  'animate.css/animate.min.css',
		                  'jstree/dist/themes/default/style.min.css',
		                  'jstree/dist/themes/default/32px.png',
		                  'jstree/dist/themes/default/40px.png',
		                  'jstree/dist/themes/default/throbber.gif',
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/css',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      },
		    font_dependencies: {
		        files: [
		          {
		            expand: true,     // Enable dynamic expansion.
		            cwd: 'node_modules/',      // Src matches are relative to this path.
		            src: [
		                  'bootstrap/fonts/glyphicons-halflings-regular.ttf',
		                  'bootstrap/fonts/glyphicons-halflings-regular.woff2',
		                  'bootstrap/fonts/glyphicons-halflings-regular.woff'
		                 ], // Actual pattern(s) to match.
		            dest: staticContentFolder+'/generated/3rd_party/fonts',   // Destination path prefix.
		            flatten: true
		          },
		        ],
		      }
	    },
	    karma: {
	    	options: {
	    		configFile: 'karma.conf.ci.js',
	    	},  
	    	desktop_build: {
	    	    singleRun: true,
	    	    browsers: ['Chrome', 'Firefox']
	    	},
	    	multi_run: {
	    	    singleRun: false,
	    	    browsers: ['Chrome', 'Firefox']
	    	},
	    	build: {
	    	    singleRun: true,
	    	    browsers: ['PhantomJS']
	    	}
	    },
        webdriver: {
            options: {
            },
            chrome: {
                options: {
                	configFile: 'wdio.conf.js',
                	specs: [e2eTestSpecFolder],
                    // overwrite default settings 
                    desiredCapabilities: {
                        browserName: 'chrome'
                    }
                }
            },
            firefox: {
                options: {
                	configFile: 'wdio.conf.js',
                    specs: [e2eTestSpecFolder],
                    // overwrite default settings 
                    desiredCapabilities: {
                        browserName: 'firefox'
                    },
            		debug: true
                },
            }
        }
	})
	
    // These plugins provide necessary tasks.
    require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });

	grunt.registerTask('setup', ['env:build']);
//	grunt.registerTask('build', ['setup', 'less', 'copy', 'karma:build']);
	grunt.registerTask('build', ['setup', 'less', 'copy']);

	grunt.registerTask('default', ['build']);
	

    grunt.registerTask('desktop_build', ['setup', 'less', 'copy', 'karma:desktop_build'/* doesn't seem to work right now, 'webdriver:chrome', 'webdriver:firefox'*/]);
};