|  | @@ -1,6 +1,7 @@
 | 
	
		
			
				|  |  |  /*global module*/
 | 
	
		
			
				|  |  |  module.exports = function (grunt) {
 | 
	
		
			
				|  |  |      'use strict';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      // The banner on top of the build
 | 
	
		
			
				|  |  |      var banner = '/**\n' +
 | 
	
		
			
				|  |  |          ' * Open Sheet Music Display <%= pkg.version %> built on <%= grunt.template.today("yyyy-mm-dd") %>.\n' +
 | 
	
	
		
			
				|  | @@ -12,11 +13,11 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |              'typings/index.d.ts',
 | 
	
		
			
				|  |  |              // Additional manual typings:
 | 
	
		
			
				|  |  |              'external/vexflow/vexflow.d.ts'
 | 
	
		
			
				|  |  | -            // 'typings/fft.d.ts'
 | 
	
		
			
				|  |  | -        ],
 | 
	
		
			
				|  |  | +        ];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      // Paths
 | 
	
		
			
				|  |  | -        src = ['src/**/*.ts'],
 | 
	
		
			
				|  |  | -        test = ['test/**/*.ts'];
 | 
	
		
			
				|  |  | +    var src = ['src/**/*.ts'];
 | 
	
		
			
				|  |  | +    var test = ['test/**/*.ts'];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Grunt configuration following:
 | 
	
		
			
				|  |  |      grunt.initConfig({
 | 
	
	
		
			
				|  | @@ -38,7 +39,7 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  |              demo: {
 | 
	
		
			
				|  |  |                  src: [].concat(typings, src, ['demo/inject.ts']),
 | 
	
		
			
				|  |  | -                dest: '<%= outputDir.build %>/osmd-demo.js',
 | 
	
		
			
				|  |  | +                dest: '<%= outputDir.build %>/demo/osmd-demo.js',
 | 
	
		
			
				|  |  |                  options: {
 | 
	
		
			
				|  |  |                      banner: "<%= banner %>",
 | 
	
		
			
				|  |  |                      browserifyOptions: {
 | 
	
	
		
			
				|  | @@ -86,14 +87,14 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |                      browsers: ['PhantomJS']
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  | -            debugWithFirefox: {
 | 
	
		
			
				|  |  | +            firefox: {
 | 
	
		
			
				|  |  |                  configFile: 'karma.conf.js',
 | 
	
		
			
				|  |  |                  options: {
 | 
	
		
			
				|  |  |                      singleRun: false,
 | 
	
		
			
				|  |  |                      browsers: ['Firefox']
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              },
 | 
	
		
			
				|  |  | -            debugWithChrome: {
 | 
	
		
			
				|  |  | +            chrome: {
 | 
	
		
			
				|  |  |                  configFile: 'karma.conf.js',
 | 
	
		
			
				|  |  |                  options: {
 | 
	
		
			
				|  |  |                      singleRun: false,
 | 
	
	
		
			
				|  | @@ -113,8 +114,7 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |          // JsHint setup
 | 
	
		
			
				|  |  |          jshint: {
 | 
	
		
			
				|  |  |              all: [
 | 
	
		
			
				|  |  | -                'Gruntfile.js', 'karma.conf.js',
 | 
	
		
			
				|  |  | -                'submodules/**/*.json', 'submodules/**/*.js'
 | 
	
		
			
				|  |  | +                'Gruntfile.js', 'karma.conf.js', 'demo/**/*.js'
 | 
	
		
			
				|  |  |              ]
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          // TypeScript Type Definitions
 | 
	
	
		
			
				|  | @@ -126,7 +126,7 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |              build: {
 | 
	
		
			
				|  |  |                  options: {
 | 
	
		
			
				|  |  |                      module: 'commonjs',
 | 
	
		
			
				|  |  | -                    out: './build/docs',
 | 
	
		
			
				|  |  | +                    out: '<%= outputDir.build %>/docs',
 | 
	
		
			
				|  |  |                      name: 'opensheetmusicdisplay',
 | 
	
		
			
				|  |  |                      target: 'es5',
 | 
	
		
			
				|  |  |                      mode: 'file'
 | 
	
	
		
			
				|  | @@ -134,6 +134,12 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |                  src: ['./src/**/*.ts', './external/**/*.ts', './typings/**/*.ts']
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  | +        // Typescript compilation for ES6 module (npm package)
 | 
	
		
			
				|  |  | +        ts: {
 | 
	
		
			
				|  |  | +          default : {
 | 
	
		
			
				|  |  | +            tsconfig: true
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  |          // Cleaning task setup
 | 
	
		
			
				|  |  |          clean: {
 | 
	
		
			
				|  |  |              options: {
 | 
	
	
		
			
				|  | @@ -143,61 +149,62 @@ module.exports = function (grunt) {
 | 
	
		
			
				|  |  |                  src: [
 | 
	
		
			
				|  |  |                      '<%= outputDir.build %>',
 | 
	
		
			
				|  |  |                      '<%= outputDir.dist %>',
 | 
	
		
			
				|  |  | -                    // 'node_modules',
 | 
	
		
			
				|  |  | -                    // 'typings',
 | 
	
		
			
				|  |  |                      '.tscache',
 | 
	
		
			
				|  |  | -                    'src/**/*.js', 'test/**/*.js'
 | 
	
		
			
				|  |  | +                    'src/**/*.js', 'test/**/*.js' // if something went wrong, delete JS from TypeScript source directories
 | 
	
		
			
				|  |  | +                ]
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        copy: {
 | 
	
		
			
				|  |  | +            demo: {
 | 
	
		
			
				|  |  | +                files: [
 | 
	
		
			
				|  |  | +                    { src: ['*'], dest: '<%= outputDir.build %>/demo/sheets/', cwd: './test/data/', expand: true },
 | 
	
		
			
				|  |  | +                    { src: ['*.js', '*.css', '*.html'], cwd: './demo/', expand: true, dest: '<%= outputDir.build %>/demo/' }
 | 
	
		
			
				|  |  |                  ]
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |          // http-server
 | 
	
		
			
				|  |  |          'http-server': {
 | 
	
		
			
				|  |  |              'demo': {
 | 
	
		
			
				|  |  | -                root: '.',
 | 
	
		
			
				|  |  | +                root: 'demo',
 | 
	
		
			
				|  |  |                  port: 8000,
 | 
	
		
			
				|  |  |                  host: '0.0.0.0',
 | 
	
		
			
				|  |  |                  showDir : true,
 | 
	
		
			
				|  |  |                  autoIndex: true,
 | 
	
		
			
				|  |  | -                // server default file extension
 | 
	
		
			
				|  |  | -                // ext: 'html',
 | 
	
		
			
				|  |  |                  runInBackground: false,
 | 
	
		
			
				|  |  | -                openBrowser : true,
 | 
	
		
			
				|  |  | -                // customize url to serve specific pages
 | 
	
		
			
				|  |  | -                customPages: {
 | 
	
		
			
				|  |  | -                    '/': 'demo/demo.html'
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +                openBrowser : true
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // Load Npm tasks
 | 
	
		
			
				|  |  | -    grunt.loadNpmTasks('grunt-karma');
 | 
	
		
			
				|  |  | -    grunt.loadNpmTasks('grunt-tslint');
 | 
	
		
			
				|  |  | -    grunt.loadNpmTasks('grunt-typings');
 | 
	
		
			
				|  |  | +    // Load npm tasks
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-browserify');
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-contrib-clean');
 | 
	
		
			
				|  |  | -    grunt.loadNpmTasks('grunt-contrib-watch');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-contrib-copy');
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-contrib-jshint');
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-contrib-uglify');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-contrib-watch');
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-http-server');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-karma');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-ts');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-tslint');
 | 
	
		
			
				|  |  |      grunt.loadNpmTasks('grunt-typedoc');
 | 
	
		
			
				|  |  | +    grunt.loadNpmTasks('grunt-typings');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Code quality
 | 
	
		
			
				|  |  | +    grunt.registerTask('lint',        'Lints all JavaScript and TypeScript files.',  ['jshint', 'tslint']);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Documentation
 | 
	
		
			
				|  |  | +    grunt.registerTask('docs',        'Builds class documentation to /build/docs',   ['typedoc']);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Build tasks
 | 
	
		
			
				|  |  | +    grunt.registerTask('build:demo',  'Builds the demo.',                            ['browserify:demo', 'copy:demo']);
 | 
	
		
			
				|  |  | +    grunt.registerTask('build:test',  'Builds the tests',                            ['browserify:debug']);
 | 
	
		
			
				|  |  | +    grunt.registerTask('build:dist',  'Builds for distribution on npm and Bower.',   ['browserify:dist', 'uglify', 'ts']);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // Register tasks
 | 
	
		
			
				|  |  | -    grunt.registerTask('lint',      ['jshint', 'tslint']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('start',     ['typings']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('all',       ['typings', 'default']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('default',   ['browserify', 'uglify']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('npm-test',  ['typings', 'test']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('docs',      ['typedoc']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('test',      ['browserify:debug', 'lint', 'karma:ci']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('fast-test', ['browserify:debug', 'karma:ci']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('rebuild',   ['clean', 'default']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('publish',   ['clean', 'typings', 'browserify:dist', 'uglify:bundle', 'docs']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('debug-build', ['browserify:demo']);
 | 
	
		
			
				|  |  | -    grunt.registerTask('debug-browser', ['http-server:demo']);
 | 
	
		
			
				|  |  | +    // Tests
 | 
	
		
			
				|  |  | +    grunt.registerTask('test',        'Runs unit, regression and e2e tests.',        ['build:test', 'karma:ci']);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // Fix these in the future:
 | 
	
		
			
				|  |  | -    // grunt.registerTask('test debug Firefox', ['browserify:debug', 'karma:debugWithFirefox']);
 | 
	
		
			
				|  |  | -    // grunt.registerTask('test debug Chrome', ['browserify:debug', 'karma:debugWithChrome']);
 | 
	
		
			
				|  |  | +    // Default task (if grunt is run without any argument, used in contiuous integration)
 | 
	
		
			
				|  |  | +    grunt.registerTask('default',     'Default task, running all other tasks. (CI)', ['lint', 'test', 'docs', 'build:demo', 'build:dist']);
 | 
	
		
			
				|  |  |  };
 |