
<!--
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">
        <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>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
    </head>
    <body>
        <style>
            h1 {
                line-height: 60px;
                height: 60px;
                background: #146402;
                text-align: center;
                font-weight: bold;
                color: #eee;
                font-size: 14px;
            }
            .chart {
                height: 600px;
            }
        </style>

        <div id="main" class="chart"></div>
        <script>

        require(
            (testHelper.hasURLParam('en')
                ? [
                    'echarts',
                    // 'echarts/lang/en',
                ]
                : [
                    'echarts'
                ]
            ).concat(
                [
                    // 'echarts/chart/bar',
                    // 'echarts/chart/line',
                    // 'echarts/component/legend',
                    // 'echarts/component/graphic',
                    // 'echarts/component/grid',
                    // 'echarts/component/tooltip',
                    // 'echarts/component/brush',
                    // 'echarts/component/toolbox',
                    // 'echarts/component/title',
                    // 'zrender/vml/vml'
                ]
            ),
            function (echarts) {

                var chart = echarts.init(document.getElementById('main'));

                var xAxisData = [];
                var data1 = [];
                var data2 = [];
                var data3 = [];
                var data4 = [];

                for (var i = 0; i < 10; i++) {
                    xAxisData.push('类目' + i);
                    data1.push(i === 0 ? '-' : (Math.random() * 5).toFixed(2));
                    data2.push(-Math.random().toFixed(2));
                    data3.push((Math.random() + 0.5).toFixed(2));
                    data4.push((Math.random() + 0.3).toFixed(2));
                }

                var itemStyle = {
                    normal: {
                        barBorderRadius: 5,
                        label: {
                            show: true,
                            position: 'outside'
                        }
                    },
                    emphasis: {
                        focus: 'series',
                        label: {
                            position: 'outside'
                        },
                        // barBorderColor: '#fff',
                        // barBorderWidth: 1,
                        // shadowBlur: 10,
                        // shadowOffsetX: 0,
                        // shadowOffsetY: 0,
                        shadowColor: 'rgba(0,0,0,0.3)'
                    }
                };

                chart.setOption({
                    backgroundColor: '#eee',
                    title: {
                        text: '我是柱状图',
                        padding: 20
                    },
                    legend: {
                        left: 150,
                        inactiveColor: '#abc',
                        borderWidth: 1,
                        data: [{
                            name: 'bar'
                        }, 'bar2', '\n', 'bar3', 'bar4'],
                        selected: {
                            // 'bar': false
                        },
                        // orient: 'vertical',
                        // x: 'right',
                        // y: 'bottom',
                        align: 'left',

                        tooltip: {
                            show: true
                        }
                    },
                    brush: {
                        xAxisIndex: 0
                    },
                    toolbox: {
                        top: 50,
                        // right: 20,
                        feature: {
                            magicType: {
                                type: ['line', 'bar', 'stack', 'tiled']
                            },
                            dataView: {},
                            saveAsImage: {
                                pixelRatio: 2
                            },
                            brush: {
                                type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear']
                            },
                            restore: {},
                            dataZoom: {},
                            myTool1: {
                                show: true,
                                title: '自定义扩展方法1',
                                icon: 'path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891',
                                onclick: function (){
                                    alert('myToolHandler1')
                                }
                            },
                            myTool2: {
                                show: true,
                                title: '自定义扩展方法2',
                                icon: 'image://./asset/echarts-logo.png',
                                onclick: function (){
                                    alert('myToolHandler2')
                                }
                            }
                        },

                        iconStyle: {
                            emphasis: {
                                textPosition: 'top'
                                // textAlign: 'right'
                            }
                        }
                    },
                    tooltip: {},
                    grid: {
                        top: 100
                    },
                    xAxis: {
                        data: xAxisData,
                        name: '横轴',
                        silent: false,
                        axisTick: {
                            alignWithLabel: true
                        },
                        // axisLabel: {
                        //     show: false
                        // },
                        // axisTick: {
                        //     show: false
                        // },
                        axisLine: {
                            onZero: true
                            // lineStyle: {
                            //     width: 5
                            // }
                        },
                        splitLine: {
                            show: true
                        },
                        splitArea: {
                            show: true
                        }
                    },
                    yAxis: {
                        inverse: true,
                        // axisLabel: {
                        //     show: false
                        // },
                        // axisLine: {
                        //     lineStyle: {
                        //         width: 5
                        //     }
                        // },
                        axisTick: {
                            show: false
                        },
                        // splitLine: {
                        //     show: false
                        // },
                        splitArea: {
                            show: false
                        }
                    },
                    series: [{
                        name: 'bar',
                        type: 'bar',
                        stack: 'one',
                        itemStyle: itemStyle,
                        selectedMode: true,
                        cursor: 'move',
                        data: data1
                    }, {
                        name: 'bar2',
                        type: 'bar',
                        stack: 'one',
                        itemStyle: itemStyle,
                        selectedMode: true,
                        cursor: 'default',
                        data: data2
                    }, {
                        name: 'bar3',
                        type: 'bar',
                        stack: 'two',
                        itemStyle: itemStyle,
                        selectedMode: true,
                        data: data3
                    }, {
                        name: 'bar4',
                        type: 'bar',
                        stack: 'two',
                        itemStyle: itemStyle,
                        selectedMode: true,
                        data: data4
                    }]
                });

                chart.on('click', function (params) {
                    console.log(params);
                });

                chart.on('legendselectchanged', function (params) {
                    chart.setOption({
                        // title: {
                        // },
                        graphic: [{
                            type: 'circle',
                            shape: {
                                cx: 100,
                                cy: 100,
                                r: 20,
                            }
                        }]
                    });
                });

                window.onresize = chart.resize;
            }
        );
        </script>
    </body>
</html>