# grunt-mootools-packager

> Grunt task for MooTools Packager projects.

## Getting Started
This plugin requires Grunt `~0.4.2`

If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

```shell
npm install grunt-mootools-packager --save-dev
```

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

```js
grunt.loadNpmTasks('grunt-mootools-packager');
```

## The "packager" task

### Overview
In your project's Gruntfile, add a section named `packager` to the data object passed into `grunt.initConfig()`.

```js
grunt.initConfig({
  packager: {
    options: {
      name: 'Core' // Package name. (todo: use package.json)
    },
    your_target: {
      // Target-specific file lists and/or options go here.
      'mootools-all.js': 'Source/**.js'
    },
  },
});
```

### Options

#### options.strip
Type: `String` or `Array<String|RegExp>`
Default value: `false`

A single, or multiple, strings or regexp to remove from the combined code.

#### options.separator
Type: `String`
Default value: `grunt.util.linefeed`

The delimeter to join all the source files together.

#### options.callback
Type: `Function`

The function to be called when compilation is finished. The compiled content will passed as the first argument in the callback function.

#### options.noOutput
Type: `Boolean`

If `true` no files will be written. Defaults to false.

#### options.name
Type: `String` or `Object`

The package name. TODO: Use package.json.

The name of the package, or, if there are multiple packages being built, an
object with the names and paths to their source files.

```js
grunt.initConfig({
  packager: {
    options: {
      name: {
        Core: 'js/mootools-core',
        More: 'js/mootools-more'
      }
    },
    all: {
      'dest/mootools.js': 'Source/**.js',
    },
  },
});
```


#### options.ignoreYAMLheader
Type: `Booelan`
Default value: `false`

Ignores the YAML headers for dependency loading.

#### options.only
Type: `String` or `Array`

The specific components or packages to compile (with their dependencies).

NOTE: You can specify the `.only` value in the `.options` and it will apply to all
configurations globally, but you can also specify an `.only` value for each configuration.
This allows you to build numerous libraries with specific requirements.

```js
grunt.initConfig({
  packager: {
    options: {
      name: {
        Core: 'js/mootools-core',
        More: 'js/mootools-more'
      }
    },
    // all of both libraries
    all: {
      src: [
        'js/mootools-core/Source/**/*.js',
        'js/mootools-more/Source/**/*.js'
      ],
      dest: 'mootools.js'
    },
    // the Form.Validator component and its requirements
    formValidator: {
      src: [
        'js/mootools-core/Source/**/*.js',
        'js/mootools-more/Source/**/*.js'
      ],
      only: [
        'More/Form.Validator'
      ]
      dest: 'form.validator.js'
    },
    // all of the More package and its requirements
    allOfMore: {
      src: [
        'js/mootools-core/Source/**/*.js',
        'js/mootools-more/Source/**/*.js'
      ],
      only: [
        'More/*'
      ]
      dest: 'more.js'
    }
  },
});
```

### Other Usage Examples

#### Default Options
```js
grunt.initConfig({
  packager: {
    options: {
      name: 'Core'
    },
    all: {
      'dest/mootools.js': 'Source/**.js',
    },
  },
});
```

#### Strip Options
```js
grunt.initConfig({
  packager: {
    options: {
      name: 'Core',
      strip: '.*compat'
    },
    all: {
      'dest/mootools.js': 'Source/**.js',
    },
  },
});
```