<!DOCTYPE html>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->


<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <script src="lib/esl.js"></script>
        <script src="lib/config.js"></script>
        <script src="lib/jquery.min.js"></script>
        <script src="lib/facePrint.js"></script>
        <script src="lib/testHelper.js"></script>
        <!-- <script src="ut/lib/canteen.js"></script> -->
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
        </style>



        <div id="main0"></div>
        <div id="main1"></div>
        <div id="main2"></div>
        <div id="main3"></div>
        <div id="main4"></div>


        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            // $.getJSON('./data/nutrients.json', function (data) {});
            option = {
                series: [
                    {
                        type: 'pie',
                        data: [
                            {value: 335, name: 'Tom'},
                            {value: 310, name: 'Jack'},
                            {value: 274, name: 'Bobby'},
                            {value: 235, name: 'Emily'},
                            {value: 400, name: 'Jessy'}
                        ],
                        roseType: 'radius'
                    }
                ]
            };
            var chart = testHelper.create(echarts, 'main0', {
                title: [
                    'Should use color from palette by default'
                ],
                option: option
            });
        });
        </script>

        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                // $.getJSON('./data/nutrients.json', function (data) {});
                option = {
                    series: [
                        {
                            type: 'pie',
                            data: [
                                {value: 335, name: 'Tom'},
                                {value: 310, name: 'Jack'},
                                {value: 274, name: 'Bobby'},
                                {value: 235, name: 'Emily'},
                                {value: 400, name: 'Jessy'}
                            ],
                            itemStyle: {
                                color: '#37A2DA',
                                borderColor: '#fff',
                                borderWidth: 2
                            }
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main1', {
                    title: [
                        'Test of itemStyle.color',
                        'Should all be color #37A2DA'
                    ],
                    option: option
                });
            });
        </script>

        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                // $.getJSON('./data/nutrients.json', function (data) {});
                option = {
                    series: [
                        {
                            type: 'pie',
                            data: [
                                {
                                    value: 335,
                                    name: 'This color should be purple. Others will pick from color palette',
                                    itemStyle: {
                                        color: 'purple'
                                    }
                                },
                                {
                                    value: 310,
                                    name: 'This should has shadow',
                                    itemStyle: {
                                        shadowBlur: 10
                                    }
                                },
                                {value: 274, name: 'Bobby'},
                                {value: 235, name: 'Emily'},
                                {value: 400, name: 'Jessy'}
                            ]
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main2', {
                    title: [
                        'data.itemStyle.color should work property '
                    ],
                    option: option
                });
            });
        </script>

        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                // $.getJSON('./data/nutrients.json', function (data) {});
                option = {
                    series: [
                        {
                            type: 'pie',
                            itemStyle: {
                                color: function (params) {
                                    return echarts.color.modifyAlpha('red', params.dataIndex / 10 + 0.5);
                                }
                            },
                            label: {
                                formatter: function (params) {
                                    return params.name + '(opacity: ' + (params.dataIndex / 10 + 0.5) + ')';
                                }
                            },
                            data: [
                                {
                                    value: 335,
                                    name: 'This color should be purple',
                                    itemStyle: {
                                        color: 'purple'
                                    }
                                },
                                {value: 310, name: 'Jack'},
                                {value: 274, name: 'Bobby'},
                                {value: 235, name: 'Emily'},
                                {value: 400, name: 'Jessy'}
                            ]
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main3', {
                    title: [
                        'Callback of color'
                    ],
                    option: option
                });
            });
        </script>

        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                // $.getJSON('./data/nutrients.json', function (data) {});
                option = {
                    backgroundColor: '#2c343c',
                    visualMap: {
                        show: false,
                        min: 80,
                        max: 600,
                        inRange: {
                            colorLightness: [0, 1]
                        }
                    },
                    series: [
                        {
                            type: 'pie',
                            radius: '50%',
                            center: ['25%', '50%'],
                            data: [
                                {value: 335, name: 'Tom'},
                                {value: 310, name: 'Jack'},
                                {value: 274, name: 'Bobby'},
                                {value: 235, name: 'Emily'},
                                {value: 400, name: 'Jessy'}
                            ].sort(function (a, b) { return a.value - b.value; }),
                            roseType: 'radius'
                        },

                        {
                            type: 'pie',
                            radius: '50%',
                            center: ['75%', '50%'],
                            data: [
                                {
                                    value: 335,
                                    name: 'This should be pink',
                                    itemStyle: {
                                        color: 'pink'
                                    }
                                },
                                {value: 310, name: 'Jack'},
                                {value: 274, name: 'Bobby'},
                                {value: 235, name: 'Emily'},
                                {value: 400, name: 'Jessy'}
                            ].sort(function (a, b) { return a.value - b.value; }),
                            roseType: 'radius'
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main4', {
                    title: [
                        'visualMap will apply lightness modification on series color',
                        'data.itemStyle.color should have higher priority.'
                    ],
                    option: option
                });
            });
        </script>

    </body>
</html>

