extends ../layouts/basic

block variables
    - var pageTitle = 'ECharts FAQ'

block extra_head
    title Contributing - Apache ECharts

block content
    nav(class='navbar navbar-default navbar-fixed-top', role="navigation")
        include ./nav

    .page-main
        .page-info
            .container
                h1 Contributing
                p.page-info-echarts Apache ECharts<sup>TM</sup>

        .page-content
            .container
                h2 Contributing to Apache ECharts
                p There are many ways that you can help make ECharts better. Please dive in and help!

                h3 Issues
                p Review the <a href="https://github.com/apache/echarts/issues" target="_blank">issues</a> and see if you can offer some help.
                ul
                    li If it's a bug report or how-to question, make sure the author has provided a minimum online demo with either <a href="https://codepen.io/Ovilia/pen/dyYWXWM" target="_blank">Codepen</a> or <a href="https://gallery.echartsjs.com/editor.html" target="_blank">ECharts Gallery (Chinese)</a> to show what's going wrong.
                    li If it's a feature request, make sure the author has a clear explanation about what is expected and a picture would be very helpful for some cases.
                    li Help reproduce bugs if an online demo is provided and check the <a href="https://echarts.apache.org/en/option.html" target="_blank">document</a> to see if it's a bug.
                    li Issues without a "pending" label are the ones we believe is a bug or a feature we should provide in the future. You may make a pull request to fix them.

                h3 Pull Requests
                p We appreciate pull requests from the community!
                p Before you start, please checkout the <a href="./coding-standard.html">Coding Standard</a> and <a href="https://www.apache.org/foundation/policies/conduct.html" target="_blank">Apache Code of Conduct</a>.
                p Please refer to <a href="https://github.com/apache/echarts/wiki/How-to-setup-the-dev-environment" target="_blank">How to setup the dev environment</a> and <a href="https://github.com/apache/echarts/wiki/How-to-make-a-pull-request" target="_blank">How to make a pull request</a> for more detailed instructions.
                p If you have any problem when making pull requests, please comment in the issues or pull requests or send an email to <a href="mailto:dev@echarts.apache.org">dev@echarts.apache.org</a> to ask for help.

                h3 Mailing List
                p Join us on the <a href="./maillist.html">mailing list</a> and take part in any conversations.

                h3 Documents
                p Documentation is massively important to help users make the most of Apache ECharts and it's probably the area that needs the most help! So if you are interested, whether it's just to fix a page here or there, correct a link or improve what documentation is already there, please do dive in and help!
                p The source code of document is available at <a href="https://github.com/apache/echarts-doc" target="_blank">GitHub</a> and maybe the easiest way to find where to change is by searching key words already there.
                p In the issue list, we also have a <a href="https://github.com/apache/echarts/labels/doc" target="_blank">"doc"</a> label. We appreciate pull requests to fix them indeed!


                h2 Becoming a Committer or PMC Member!
                p As we mentioned above, we appreciate the help for ECharts in any forms. When we find someone making continuous contributions in the community, we will invite him/her to be our committer or PMC member.
                p Being a committer means you have the "write" access to the ECharts project, which enables you to contribute more easily and efficiently.
                p The Project Management Committee (PMC) is a committee charged with responsibility and governance of ECharts, whose members are directly responsible for overseeing releases and the healthy development of the community. More information can be found at <a href="https://www.apache.org/dev/pmc.html">Project Management Committee</a>.
                p We don't have a fixed single standard for selecting a committer or PMC member because we value all kinds of help offered. Generally, current PMC members watch the continuous contributors in the community and start discussion and votes for the candidates, and invite to to be a committer or PMC member after the vote passes.


        include ../components/footer

block extra_js
    script(type='text/javascript').
        document.getElementById('nav-contribute').className = 'active';
