text: module.exports = function (grunt) {
    require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);
  
    grunt.initConfig({
      pkg: grunt.file.readJSON("package.json"),
      coffee: {
        lib: {
          options: { bare: false },
          files: {
            "morris.js": ["build/morris.coffee"],
          },
        },
        spec: {
          options: { bare: true },
          files: {
            "build/spec.js": ["build/spec.coffee"],
          },
        },
      },
      concat: {
        "build/morris.coffee": {
          options: {
            banner:
              "### @license\n" +
              "<%= pkg.name %> v<%= pkg.version %>\n" +
              "Copyright <%= (new Date()).getFullYear() %> <%= pkg.author.name %> All rights reserved.\n" +
              "Licensed under the <%= pkg.license %> License.\n" +
              "###\n",
          },
          src: [
            "lib/morris.coffee",
            "lib/morris.grid.coffee",
            "lib/morris.hover.coffee",
            "lib/morris.line.coffee",
            "lib/morris.area.coffee",
            "lib/morris.bar.coffee",
            "lib/morris.donut.coffee",
          ],
          dest: "build/morris.coffee",
        },
        "build/spec.coffee": ["spec/support/**/*.coffee", "spec/lib/**/*.coffee"],
      },
      less: {
        all: {
          src: "less/*.less",
          dest: "morris.css",
          options: {
            compress: true,
          },
        },
      },
      uglify: {
        build: {
          options: {
            preserveComments: "some",
          },
          files: {
            "morris.min.js": "morris.js",
          },
        },
      },
      mocha: {
        index: ["spec/specs.html"],
        options: { run: true },
      },
      watch: {
        all: {
          files: [
            "lib/**/*.coffee",
            "spec/lib/**/*.coffee",
            "spec/support/**/*.coffee",
            "less/**/*.less",
          ],
          tasks: "default",
        },
        dev: {
          files: "lib/*.coffee",
          tasks: ["concat:build/morris.coffee", "coffee:lib"],
        },
      },
      shell: {
        visual_spec: {
          command: "./run.sh",
          options: {
            stdout: true,
            failOnError: true,
            execOptions: {
              cwd: "spec/viz",
            },
          },
        },
      },
    });
  
    grunt.registerTask("default", [
      "concat",
      "coffee",
      "less",
      "uglify",
      "mocha",
      "shell:visual_spec",
    ]);
  };
  