text: module.exports = function (grunt) {
  
      grunt.initConfig({
  
          pkg: grunt.file.readJSON('package.json'),
  
          cfg: {
              filename: 'easypiechart',
              vanillaExportName: 'EasyPieChart'
          },
  
          dirs: {
              tmp: 'tmp',
              src: 'src',
              dest: 'dist',
              docs: 'docs',
              test: 'test',
              demo: 'demo'
          },
  
          clean: {
              all: ['<%= dirs.dest %>/', '<%= dirs.tmp %>/'],
              tmp: ['<%= dirs.tmp %>/']
          },
  
          concat: {
              vanilla: {
                  src: [
                      '<%= dirs.src %>/renderer/canvas.js',
                      '<%= dirs.src %>/<%= cfg.filename %>.js'
                  ],
                  dest: '<%= dirs.tmp %>/<%= cfg.filename %>.js'
              },
              jquery: {
                  src: [
                      '<%= dirs.src %>/renderer/canvas.js',
                      '<%= dirs.src %>/<%= cfg.filename %>.js',
                      '<%= dirs.src %>/jquery.plugin.js'
                  ],
                  dest: '<%= dirs.tmp %>/jquery.<%= cfg.filename %>.js'
              },
              angular: {
                  src: [
                      '<%= dirs.src %>/angular.directive.js',
                      '<%= dirs.src %>/renderer/canvas.js',
                      '<%= dirs.src %>/<%= cfg.filename %>.js'
                  ],
                  dest: '<%= dirs.tmp %>/angular.<%= cfg.filename %>.js'
              }
          },
  
          usebanner: {
              options: {
                  position: 'top',
                  banner: '/**!\n' +
                      ' * <%= pkg.name %>\n' +
                      ' * <%= pkg.description %>\n' +
                      ' *\n' +
                      ' * @license <%= pkg.license %>\n' +
                      ' * @author <%= pkg.author.name %> <<%= pkg.author.email %>> (<%= pkg.author.url %>)\n' +
                      ' * @version <%= pkg.version %>\n' +
                      ' **/\n'
              },
              files: {
                  src: [
                      '<%= dirs.dest %>/<%= cfg.filename %>.js',
                      '<%= dirs.dest %>/jquery.<%= cfg.filename %>.js',
                      '<%= dirs.dest %>/angular.<%= cfg.filename %>.js'
                  ]
              }
          },
  
          uglify: {
              dist: {
                  options: {
                      report: 'gzip',
                      preserveComments: 'some'
                  },
                  files: {
                      'dist/<%= cfg.filename %>.min.js': ['dist/<%= cfg.filename %>.js'],
                      'dist/jquery.<%= cfg.filename %>.min.js': ['dist/jquery.<%= cfg.filename %>.js'],
                      'dist/angular.<%= cfg.filename %>.min.js': ['dist/angular.<%= cfg.filename %>.js']
                  }
              }
          },
  
          watch: {
              gruntfile: {
                  files: ['Gruntfile.js']
              },
              scripts: {
                  files: '<%= dirs.src %>/**/*.js',
                  tasks: ['default'],
                  options: {
                      debounceDelay: 250
                  }
              },
              less: {
                  files: '<%= dirs.demo %>/*.less',
                  tasks: ['less'],
                  options: {
                      debounceDelay: 250
                  }
              },
              readme: {
                  files: '<%= dirs.docs %>/**/*.md',
                  tasks: ['readme'],
                  options: {
                      debounceDelay: 250
                  }
              }
          },
  
          jshint: {
              files: [
                  '<%= dirs.src %>/**/*.js',
                  '<%= dirs.test %>/**/*.js'
              ],
              options: {}
          },
  
          karma: {
              unit: {
                  configFile: 'karma.conf.coffee'
              },
              ci: {
                  configFile: 'karma.conf.coffee',
                  singleRun: true,
                  browsers: ['PhantomJS']
              }
          },
  
          less: {
              demo: {
                  files: {
                      '<%= dirs.demo %>/style.css': ['<%= dirs.demo %>/style.less']
                  }
              }
          },
  
          umd: {
              vanilla: {
                  src: '<%= dirs.tmp %>/<%= cfg.filename %>.js',
                  dest: '<%= dirs.dest %>/<%= cfg.filename %>.js',
                  objectToExport: '<%= cfg.vanillaExportName %>',
                  globalAlias: '<%= cfg.vanillaExportName %>'
              },
              jquery: {
                  src: '<%= dirs.tmp %>/jquery.<%= cfg.filename %>.js',
                  dest: '<%= dirs.dest %>/jquery.<%= cfg.filename %>.js',
                  deps: {
                      'default': ['$'],
                      amd: ['jquery'],
                      cjs: ['jquery'],
                      global: ['jQuery']
                  }
              },
              angular: {
                  src: '<%= dirs.tmp %>/angular.<%= cfg.filename %>.js',
                  dest: '<%= dirs.dest %>/angular.<%= cfg.filename %>.js',
                  deps: {
                      'default': ['angular'],
                      amd: ['angular'],
                      cjs: ['angular'],
                      global: ['angular']
                  }
              }
          }
      });
  
      // load all installed grunt tasks
      require('load-grunt-tasks')(grunt);
  
      // task defiinitions
      grunt.registerTask('default', [
          'clean:all',
          'jshint',
          'concat',
          'umd',
          'usebanner',
          'uglify',
          'clean:tmp',
          'readme'
      ]);
  
      grunt.registerTask('test', ['karma:unit']);
      grunt.registerTask('all', ['default', 'less']);
  };
  