# Contributing to chartist-js
- [Issues and Bugs](#issue)
- [Submission Guidelines](#submit)
- [Coding Conventions](#conventions)
## Found an Issue?
If you find a bug in the source code or a mistake in the documentation, you can help us by
submitting an issue to our [GitHub Repository][github]. Even better you can submit a Pull Request
with a fix.
## Pre-requisites
You will need the following to run a local development enviroment.
- Node.js & npm
- Bower (`sudo npm install bower -g`)
- Grunt (`sudo npm install grunt-cli -g`)
- Text editor of your choice
## How to Run a Local Distribution
1. `cd` into your local copy of the repository.
2. Run `npm install` to install dependencies located in `package.json`.
3. Run `bower install` to install bower dependencies.
5. Run `grunt preview` to start the watch task, and the web server should automatically open. Congrats, you should now be able to see your local copy of the demo site.
## Submission Guidelines
If you are creating a Pull Request, fork the repository and make any changes on the `develop` branch.
### Conventions
Check out the [Coding Style document](CODINGSTYLE.md)
### Grunt
We have five grunt tasks:
1. `grunt build` - Combines the scripts and creates the library for distribution
2. `grunt public` - Creates the distribution of the example / demo site which is used as visual development help of the charts but also serves as the documentation site / gh-pages.
3. `grunt dev` - Starts watch with livereload that is executing the same things as the site build default task but for live development.
4. `grunt preview` - Executes a dist and serves the directory statically in order to serve with the production example / demo site.
5. `grunt test` - Executes jasmine tests separately, although we have a very big lack of tests.
`dist` should **not** be included in any Pull Requests. So please ensure that code is not being committed as part of the Pull Request.
### Documentation
- Everything is already in place and in the `sitedist` there is a `apidoc` folder generated by [doxication](https://github.com/gionkunz/grunt-doxication) generator that uses JSDoc like comments to generate documentation meta files. Always use proper JSDoc comments when documenting methods and API interfaces. Also assign documentation blocks using @memberof to the virtual module they belong to.
- The site documentation is built with [Assemble.io](http://assemble.io/). Generally a component based approach should be followed where there are already Handlebar partials / helpers in order to create whole sites based on components that can be specified by type and with their data in yaml files.
### Important missing stuff
1. Jasmine Tests!
2. Documentation: JSDoc, Getting started documentation and landing page
3. Better accessibility using ARIA and other optimizations
4. Better interfaces to the library (i.e. jQuery with data-* attributes for configuration), Angular.js directive etc.
5. Richer Sass / CSS framework
6. Other charts types (spider etc.)