2012-10-09 22:34:20 +08:00
Contributing to Leaflet
=======================
2012-10-10 23:07:07 +08:00
1. [Getting Involved ](#getting-involved )
2. [Reporting Bugs ](#reporting-bugs )
3. [Contributing Code ](#contributing-code )
4. [Improving Documentation ](#improving-documentation )
2012-10-09 22:34:20 +08:00
## Getting Involved
2012-11-15 19:58:09 +08:00
Third-party patches are absolutely essential on our quest to create the best mapping library that will ever exist.
However, they're not the only way to get involved with the development of Leaflet.
You can help the project tremendously by discovering and [reporting bugs ](#reporting-bugs ),
[improving documentation ](#improving-documentation ),
helping others on the [Leaflet forum ](https://groups.google.com/forum/#!forum/leaflet-js )
2013-01-11 19:42:15 +08:00
and [GitHub issues ](https://github.com/Leaflet/Leaflet/issues ),
2012-11-15 19:58:09 +08:00
showing your support for your favorite feature suggestions on [Leaflet UserVoice page ](http://leaflet.uservoice.com ),
tweeting to [@LeafletJS ](http://twitter.com/LeafletJS )
and spreading the word about Leaflet among your colleagues and friends.
2012-10-09 22:34:20 +08:00
## Reporting Bugs
2013-01-11 19:42:15 +08:00
Before reporting a bug on the project's [issues page ](https://github.com/Leaflet/Leaflet/issues ),
2012-11-15 19:58:09 +08:00
first make sure that your issue is caused by Leaflet, not your application code
(e.g. passing incorrect arguments to methods, etc.).
Second, search the already reported issues for similar cases,
and if it's already reported, just add any additional details in the comments.
2012-10-10 16:54:22 +08:00
2012-11-15 19:58:09 +08:00
After you made sure that you've found a new Leaflet bug,
here are some tips for creating a helpful report that will make fixing it much easier and quicker:
2012-10-10 16:54:22 +08:00
2012-10-10 17:33:08 +08:00
* Write a **descriptive, specific title** . Bad: *Problem with polylines* . Good: *Doing X in IE9 causes Z* .
2012-10-10 16:54:22 +08:00
* Include **browser, OS and Leaflet version** info in the description.
2012-10-10 17:33:08 +08:00
* Create a **simple test case** that demonstrates the bug (e.g. using [JSFiddle ](http://jsfiddle.net/ )).
* Check whether the bug can be reproduced in **other browsers** .
2012-10-10 16:54:22 +08:00
* Check if the bug occurs in the stable version, master, or both.
2012-11-15 19:58:09 +08:00
* *Bonus tip:* if the bug only appears in the master version but the stable version is fine,
use `git bisect` to find the exact commit that introduced the bug.
2012-10-09 22:34:20 +08:00
## Contributing Code
2012-10-10 23:07:07 +08:00
### Considerations for Accepting Patches
2012-11-15 19:58:09 +08:00
While we happily accept patches, we're also commited to keeping Leaflet simple, lightweight and blazingly fast.
So bugfixes, performance optimizations and small improvements that don't add a lot of code
are much more likely to get accepted quickly.
2012-10-10 17:33:08 +08:00
2012-11-15 19:58:09 +08:00
Before sending a pull request with a new feature, first check if it's been discussed before already
2013-01-11 19:42:15 +08:00
(either on [GitHub issues ](https://github.com/Leaflet/Leaflet/issues )
2012-11-15 19:58:09 +08:00
or [Leaflet UserVoice ](http://leaflet.uservoice.com/ )),
and then ask yourself two questions:
2012-10-10 17:33:08 +08:00
2012-11-15 19:58:09 +08:00
1. Are you sure that this new feature is important enough to justify its presense in the Leaflet core?
Or will it look better as a plugin in a separate repository?
2012-10-10 23:07:07 +08:00
2. Is it written in a simple, concise way that doesn't add bulk to the codebase?
2012-11-15 19:58:09 +08:00
If your feature or API improvement did get merged into master,
please consider submitting another pull request with the corresponding [documentation update ](#improving-documentation ).
2012-10-10 23:07:07 +08:00
2012-10-31 22:49:14 +08:00
### Setting up the Build System
2012-11-15 19:58:09 +08:00
To set up the Leaflet build system, install [Node ](http://nodejs.org/ ),
then run the following commands in the project root (with superuser permissions):
2012-10-31 22:49:14 +08:00
```
npm install -g jake
npm install jshint
npm install uglify-js
```
You can build minified Leaflet by running `jake` (it will be built from source in the `dist` folder).
2012-10-10 23:07:07 +08:00
### Making Changes to Leaflet Source
2012-11-15 19:58:09 +08:00
If you're not yet familiar with the way GitHub works (forking, pull requests, etc.),
be sure to check out the awesome [article about forking ](https://help.github.com/articles/fork-a-repo )
on the GitHub Help website — it will get you started quickly.
2012-10-10 23:07:07 +08:00
2012-11-15 19:58:09 +08:00
You should always write each batch of changes (feature, bugfix, etc.) in **its own topic branch** .
Please do not commit to the `master` branch, or your unrelated changes will go into the same pull request.
2012-10-10 23:07:07 +08:00
2013-01-31 19:25:18 +08:00
You should also follow the code style and whitespace conventions of the original codebase.
In particular, use tabs for indentation and spaces for alignment.
2012-10-10 23:07:07 +08:00
2012-11-15 19:58:09 +08:00
Before commiting your changes, run `jake lint` to catch any JS errors in the code and fix them.
If you add any new files to the Leaflet source, make sure to also add them to `build/deps.js`
so that the build system knows about them.
2012-10-31 22:49:14 +08:00
2013-02-16 04:01:11 +08:00
Also, please make sure that you have [line endings configured properly ](https://help.github.com/articles/dealing-with-line-endings ) in Git! Otherwise the diff will show that all lines of a file were changed even if you touched only one.
2012-10-31 22:49:14 +08:00
Happy coding!
2012-10-09 22:34:20 +08:00
2013-02-19 09:54:13 +08:00
## Running the tests
$ jake test
This requires you have PhantomJS installed
### Install PhantomJS
On windows:
Grab the zip from http://phantomjs.org/download.html
Extract to: C:\Windows\Program Files\PhantomJS
So you have: C:\Windows\Program Files\PhantomJS\phantomjs.exe
On linux/mac:
???
(Maybe npm install -g phantomjs)
## Code Coverage
It is important that our tests cover the leaflet code base so we know everything works.
To run the coverage tests you need a git version of testacular installed, see below for details.
Then, just run:
$ jake test --cov
This will run all of the tests using PhantomJS and generate html pages with details on the code coverage.
Open: spec/coverage/PhantomJS 1.8/index.html
From here you can click through to folders/files on the left to get details on their individual coverage.
### Install testacular from git
$ cd node_modules
$ git clone git://github.com/testacular/testacular.git
$ cd testacular
$ sudo npm install
$ sudo npm install -g grunt
$ sudo npm install -g grunt-cli
$ grunt
$ cd ../..
2012-10-09 22:34:20 +08:00
## Improving Documentation
2012-11-15 19:58:09 +08:00
The code of the live Leaflet website that contains all documentation and examples is located in the `gh-pages` branch
and is automatically generated from a set of HTML and Markdown files by [Jekyll ](https://github.com/mojombo/jekyll ).
2012-10-10 23:07:07 +08:00
2012-11-15 19:58:09 +08:00
The easiest way to make little improvements such as fixing typos without even leaving the browser
is by editing one of the files with the online GitHub editor:
2013-01-11 19:42:15 +08:00
browse the [gh-pages branch ](https://github.com/Leaflet/Leaflet/tree/gh-pages ),
2012-11-15 19:58:09 +08:00
choose a certain file for editing (e.g. `reference.html` for API reference),
click the Edit button, make changes and follow instructions from there.
Once it gets merged, the changes will immediately appear on the website.
2012-10-10 23:07:07 +08:00
If you need to make edits in a local repository to see how it looks in the process, do the following:
1. [Install Ruby ](http://www.ruby-lang.org/en/ ) if don't have it yet.
2. Run `gem install jekyll` .
3. Run `jekyll --auto` inside the `Leaflet` folder.
4. Open the website from the `_site` folder.
2012-11-15 19:58:09 +08:00
Now any file changes will be reflected on the generated pages automatically.
After commiting the changes, just send a pull request.
2012-10-10 23:07:07 +08:00
2012-11-15 19:58:09 +08:00
If you need to update documentation according to a new feature that only appeared in the master version (not stable one),
you need to make changes to `gh-pages-master` branch instead of `gh-pages` .
It will get merged into the latter when released as stable.
2012-10-10 23:07:07 +08:00
## Thank You
2012-11-15 19:58:09 +08:00
Not only are we grateful for any contributions, — helping Leaflet and its community actually makes you AWESOME.
2013-01-11 19:42:15 +08:00
Join [this approved list of awesome people ](https://github.com/Leaflet/Leaflet/graphs/contributors )
2012-11-15 19:58:09 +08:00
and help us push the limits of what's possible with online maps!