text: // Generated on 2013-12-19 using generator-angular 0.6.0
  'use strict';
  
  // # Globbing
  // for performance reasons we're only matching one level down:
  // 'test/spec/{,*/}*.js'
  // use this if you want to recursively match all subfolders:
  // 'test/spec/**/*.js'
  
  module.exports = function (grunt) {
  
      // Load grunt tasks automatically
      require('load-grunt-tasks')(grunt);
  
      // Time how long tasks take. Can help when optimizing build times
      require('time-grunt')(grunt);
  
      // Define the configuration for all the tasks
      grunt.initConfig({
  
          // Project settings
          pkg: grunt.file.readJSON('package.json'),
          yeoman: {
              // configurable paths
              app: require('./bower.json').appPath || 'app',
              services: 'app/scripts/services',
              directives: 'app/scripts/directives',
              bower: 'app/bower_components',
              dist: 'dist'
          },
  
          // Watches files for changes and runs tasks based on the changed files
          watch: {
              js: {
                  files: ['{.tmp,<%= yeoman.app %>}/scripts/**/*.js', '.jshintrc'],
                  tasks: ['newer:jshint:all']
              },
              jsTest: {
                  files: ['test/spec/{,*/}*.js'],
                  tasks: ['newer:jshint:test', 'karma']
              },
              compass: {
                  files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
                  tasks: ['compass:server', 'autoprefixer']
              },
              styles: {
                  files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
                  tasks: ['newer:copy:styles', 'autoprefixer']
              },
              gruntfile: {
                  files: ['Gruntfile.js']
              },
              livereload: {
                  options: {
                      livereload: '<%= connect.options.livereload %>'
                  },
                  files: [
                      '<%= yeoman.app %>/**/*.html',
                      '.tmp/styles/{,*/}*.css',
                      '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
                  ]
              }
          },
  
          // The actual grunt server settings
          connect: {
              options: {
                  port: 9010,
                  // Change this to '0.0.0.0' to access the server from outside.
                  hostname: 'localhost',
                  livereload: 35739
              },
              livereload: {
                  options: {
                      open: true,
                      base: [
                          '.tmp',
                          '<%= yeoman.app %>'
                      ]
                  }
              },
              test: {
                  options: {
                      port: 9001,
                      base: [
                          '.tmp',
                          'test',
                          '<%= yeoman.app %>'
                      ]
                  }
              },
              dist: {
                  options: {
                      base: '<%= yeoman.dist %>'
                  }
              }
          },
  
          // Make sure code styles are up to par and there are no obvious mistakes
          jshint: {
              options: {
                  jshintrc: '.jshintrc',
                  reporter: require('jshint-stylish')
              },
              all: [
                  'Gruntfile.js',
                  '<%= yeoman.app %>/scripts/{,*/}*.js'
              ],
              test: {
                  options: {
                      jshintrc: 'test/.jshintrc'
                  },
                  src: ['test/spec/{,*/}*.js']
              }
          },
  
          // Empties folders to start fresh
          clean: {
              dist: {
                  files: [
                      {
                          dot: true,
                          src: [
                              '.tmp',
                              '<%= yeoman.dist %>/*',
                              '!<%= yeoman.dist %>/.git*'
                          ]
                      }
                  ]
              },
              server: '.tmp'
          },
  
          // Add vendor prefixed styles
          autoprefixer: {
              options: {
                  browsers: ['last 1 version']
              },
              dist: {
                  files: [
                      {
                          expand: true,
                          cwd: '.tmp/styles/',
                          src: '{,*/}*.css',
                          dest: '.tmp/styles/'
                      }
                  ]
              }
          },
  
  
          // Compiles Sass to CSS and generates necessary files if requested
          compass: {
              options: {
                  sassDir: '<%= yeoman.app %>/styles',
                  cssDir: '.tmp/styles',
                  generatedImagesDir: '.tmp/images/generated',
                  imagesDir: '<%= yeoman.app %>/images',
                  javascriptsDir: '<%= yeoman.app %>/scripts',
                  fontsDir: '<%= yeoman.app %>/styles/fonts',
                  importPath: '<%= yeoman.app %>/bower_components',
                  httpImagesPath: '/images',
                  httpGeneratedImagesPath: '/images/generated',
                  httpFontsPath: '/styles/fonts',
                  relativeAssets: false,
                  assetCacheBuster: false
              },
              dist: {
                  options: {
                      generatedImagesDir: '<%= yeoman.dist %>/images/generated'
                  }
              },
              server: {
                  options: {
                      debugInfo: true
                  }
              }
          },
  
          // Renames files for browser caching purposes
          rev: {
              dist: {
                  files: {
                      src: [
                          '<%= yeoman.dist %>/scripts/{,*/}*.js',
                          '<%= yeoman.dist %>/styles/{,*/}*.css',
                          '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
                          '<%= yeoman.dist %>/styles/fonts/*'
                      ]
                  }
              }
          },
  
          // Reads HTML for usemin blocks to enable smart builds that automatically
          // concat, minify and revision files. Creates configurations in memory so
          // additional tasks can operate on them
          useminPrepare: {
              html: '<%= yeoman.app %>/index.html',
              options: {
                  dest: '<%= yeoman.dist %>'
              }
          },
  
          // Performs rewrites based on rev and the useminPrepare configuration
          usemin: {
              html: ['<%= yeoman.dist %>/{,*/}*.html'],
              css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
              options: {
                  assetsDirs: ['<%= yeoman.dist %>']
              }
          },
  
          // The following *-min tasks produce minified files in the dist folder
          imagemin: {
              dist: {
                  files: [
                      {
                          expand: true,
                          cwd: '<%= yeoman.app %>/images',
                          src: '{,*/}*.{png,jpg,jpeg,gif}',
                          dest: '<%= yeoman.dist %>/images'
                      }
                  ]
              }
          },
          svgmin: {
              dist: {
                  files: [
                      {
                          expand: true,
                          cwd: '<%= yeoman.app %>/images',
                          src: '{,*/}*.svg',
                          dest: '<%= yeoman.dist %>/images'
                      }
                  ]
              }
          },
          htmlmin: {
              dist: {
                  options: {
                      // Optional configurations that you can uncomment to use
                      removeCommentsFromCDATA: true,
                      // collapseBooleanAttributes: true,
                      // removeAttributeQuotes: true,
                      // removeRedundantAttributes: true,
                      // useShortDoctype: true,
                      // removeEmptyAttributes: true,
                      removeOptionalTags: true
                  },
                  files: [
                      {
                          expand: true,
                          cwd: '<%= yeoman.app %>',
                          src: ['*.html', 'views/*.html'],
                          dest: '<%= yeoman.dist %>'
                      }
                  ]
              }
          },
  
          // Allow the use of non-minsafe AngularJS files. Automatically makes it
          // minsafe compatible so Uglify does not destroy the ng references
          ngmin: {
              dist: {
                  files: [
                      {
                          expand: true,
                          cwd: '.tmp/concat/scripts',
                          src: '*.js',
                          dest: '.tmp/concat/scripts'
                      }
                  ]
              }
          },
  
          ngAnnotate: {
              options: {
                  singleQuotes: true
              },
              release: {
                  files: {
                      '<%= yeoman.dist %>/<%= pkg.name %>.js': '<%= yeoman.dist %>/<%= pkg.name %>.js'
                  }
              }
          },
  
          // Replace Google CDN references
          cdnify: {
              dist: {
                  html: ['<%= yeoman.dist %>/*.html']
              }
          },
  
          // Copies remaining files to places other tasks can use
          copy: {
              dist: {
                  files: [
                      {
                          expand: true,
                          dot: true,
                          cwd: '<%= yeoman.app %>',
                          dest: '<%= yeoman.dist %>',
                          src: [
                              '*.{ico,png,txt}',
                              '.htaccess',
                              'bower_components/**/*',
                              'images/{,*/}*.{webp}',
                              'fonts/*'
                          ]
                      },
                      {
                          expand: true,
                          cwd: '.tmp/images',
                          dest: '<%= yeoman.dist %>/images',
                          src: [
                              'generated/*'
                          ]
                      }
                  ]
              },
              styles: {
                  expand: true,
                  cwd: '<%= yeoman.app %>/styles',
                  dest: '.tmp/styles/',
                  src: '{,*/}*.css'
              }
          },
  
          // Run some tasks in parallel to speed up the build process
          concurrent: {
              server: [
                  'compass:server',
                  'copy:styles'
              ],
              test: [
                  'compass',
                  'copy:styles'
              ],
              dist: [
                  'compass:dist',
                  'copy:styles',
                  //'imagemin',
                  'svgmin',
                  'htmlmin'
              ],
              options: {
                  limit: 10
              }
          },
  
          // By default, your `index.html`'s <!-- Usemin block --> will take care of
          // minification. These next options are pre-configured if you do not wish
          // to use the Usemin blocks.
          cssmin: {
             dist: {
               files: {
                 '<%= yeoman.dist %>/styles/main.css': [
                   '.tmp/styles/main.css',
                   '.tmp/styles/form.css'
                 ]
               }
             }
          },
          // uglify: {
          //   dist: {
          //     files: {
          //       '<%= yeoman.dist %>/scripts/scripts.js': [
          //         '<%= yeoman.dist %>/scripts/scripts.js'
          //       ]
          //     }
          //   }
          // },
  
  
          concat: {
              distsourcefile: {
                  src: [
                      '<%= yeoman.bower %>/lazy.js/lazy.js', //TODO: may move and rename this as it is modified to accept invalid JSOL
                      '<%= yeoman.app %>/scripts/JSOL/jsol.js', //TODO: may move and rename this as it is modified to accept invalid JSOL
                      '<%= yeoman.services %>/{,*}/*.js',
                      '<%= yeoman.directives %>/{,*}/*.js',
                      '!**/*spec.js'
                      // '!<%= yeoman.directives %>/{,*}/*spec.js'
                  ],
                  dest: '<%= yeoman.dist %>/<%= pkg.name %>.js'
              }
          },
  
          uglify: {
              distsourcefile: {
                  files: {
                      '<%= yeoman.dist %>/scripts/scripts.js': [
                          '<%= yeoman.dist %>/scripts/scripts.js'
                      ],
                      '<%= yeoman.dist %>/<%= pkg.name %>.js': [
                          '<%= yeoman.dist %>/<%= pkg.name %>.js'
                      ]
                  }
              }
          },
  
  
          removelogging: {
              dist: {
                  src: '.tmp/concat/scripts/**/*.js'
              },
              distsourcefile: {
                  src: '<%= yeoman.dist %>/<%= pkg.name %>.js'
              },
              //jshint ignore:start
              options: {
                  namespace: ['console', 'window.console', '\\\$log']
              }
              //jshint ignore:end
          },
  
          // Test settings
          karma: {
              unit: {
                  configFile: 'karma.conf.js',
                  autoWatch: true,
                  singleRun: false
              },
              unitSingleRun: {
                  configFile: 'karma.conf.js'
              },
              firefox: {
                  configFile: 'karma.conf.js',
                  browsers: ['Firefox']
              }
          }
      });
  
  
      grunt.registerTask('serve', function (target) {
          if (target === 'dist') {
              return grunt.task.run(['build', 'connect:dist:keepalive']);
          }
  
          grunt.task.run([
              'clean:server',
              'concurrent:server',
              'autoprefixer',
              'connect:livereload',
              'watch'
          ]);
      });
  
      grunt.registerTask('server', function () {
          grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
          grunt.task.run(['serve']);
      });
  
      grunt.registerTask('test', [
          'clean:server',
          'concurrent:test',
          'autoprefixer',
          'connect:test',
          'karma'
      ]);
  
      grunt.registerTask('build', [
          'clean:dist',
          'useminPrepare',
          'concurrent:dist',
          'autoprefixer',
          'concat',
          'removelogging',
          'ngmin',
          'ngAnnotate',
          'copy:dist',
          'cdnify',
          'cssmin:dist',
          'uglify',
          'rev',
          'usemin'
      ]);
  
      grunt.registerTask('default', [
          'newer:jshint',
          'test',
          'build'
      ]);
  };
  