
<!--
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" />
        <link rel="stylesheet" href="lib/reset.css">
    </head>
    <body>
        <style>
            h1 {
                line-height: 60px;
                height: 60px;
                background: #146402;
                text-align: center;
                font-weight: bold;
                color: #eee;
                font-size: 14px;
            }
            .chart {
                height: 400px;
            }
        </style>

        <div class="chart" id="main1"></div>
        <h1>Narrow grid</h1>
        <div class="chart" id="main2"></div>
        <div class="chart" id="main3"></div>
        <div class="chart" id="main4"></div>
        <div class="chart" id="main5"></div>
        <div class="chart" id="main6"></div>


        <script>

            require([
                'echarts'
                // 'echarts/chart/bar',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'echarts/component/markLine'
            ], function (echarts) {

                var chart = echarts.init(document.getElementById('main1'), null, {

                });
                chart.setOption({
                    tooltip : {
                        trigger: 'axis',
                        axisPointer : {            // 坐标轴指示器，坐标轴触发有效
                            type : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'
                        }
                    },
                    legend: {
                        data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎','百度','谷歌','必应','其他']
                    },
                    toolbox: {
                        show : true,
                        orient: 'vertical',
                        left: 'right',
                        top: 'center',
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    calculable : true,
                    xAxis : [
                        {
                            type : 'category',
                            data : ['周一','周二','周三','周四','周五','周六','周日']
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            name:'直接访问',
                            type:'bar',
                            data:[320, 332, 301, 334, 390, 330, 320]
                        },
                        {
                            name:'邮件营销',
                            type:'bar',
                            stack: '广告',
                            data:[120, 132, 101, 134, 90, 230, 210]
                        },
                        {
                            name:'联盟广告',
                            type:'bar',
                            stack: '广告',
                            data:[220, 182, 191, 234, 290, 330, 310]
                        },
                        {
                            name:'视频广告',
                            type:'bar',
                            stack: '广告',
                            data:[150, 232, 201, 154, 190, 330, 410]
                        },
                        {
                            name:'搜索引擎',
                            type:'bar',
                            data:[862, 1018, 964, 1026, 1679, 1600, 1570],
                            markLine : {
                                itemStyle:{
                                    normal:{
                                        label: {
                                            formatter: function (params) {
                                              console.log(params);
                                            }
                                        },
                                        lineStyle:{
                                            type: 'dashed'
                                        }
                                    }
                                },
                                data : [
                                    [{type : 'min'}, {type : 'max'}]
                                ]
                            }
                        },
                        {
                            name:'百度',
                            type:'bar',
                            barWidth : 5,
                            stack: '搜索引擎',
                            data:[620, 732, 701, 734, 1090, 1130, 1120]
                        },
                        {
                            name:'谷歌',
                            type:'bar',
                            stack: '搜索引擎',
                            data:[120, 132, 101, 134, 290, 230, 220]
                        },
                        {
                            name:'必应',
                            type:'bar',
                            stack: '搜索引擎',
                            data:[60, 72, 71, 74, 190, 130, 110]
                        },
                        {
                            name:'其他',
                            type:'bar',
                            stack: '搜索引擎',
                            data:[62, 82, 91, 84, 109, 110, 120]
                        }
                    ]
                });
            });

        </script>



        <script>

            var echarts;
            var chart;
            var myChart;
            var groupCategories = [];
            var groupColors = [];

            require([
                'echarts'
                // 'echarts/chart/line',
                // 'echarts/chart/bar',
                // 'echarts/chart/pie',
                // 'echarts/chart/scatter',
                // 'echarts/chart/map',
                // 'echarts/chart/parallel',
                // 'echarts/chart/radar',
                // 'echarts/component/grid',
                // 'echarts/component/polar',
                // 'echarts/component/geo',
                // 'echarts/component/singleAxis',
                // 'echarts/component/legend',
                // 'echarts/component/tooltip',
                // 'echarts/component/toolbox',
                // 'echarts/component/visualMap',
                // 'echarts/component/dataZoom'
            ], function (ec) {
                echarts = ec;

                option = {
                    color: [{
                        type: 'linear',
                        colorStops: [{
                            offset: 0,
                            color: 'rgba(42, 20, 20, 0.8)'
                        }, {
                            offset: 1,
                            color: 'rgba(42, 20, 20, 0)'
                        }],
                        x: 0.5,
                        y: 0,
                        x2: 0.49999999999999994,
                        y2: 1
                    }],
                    xAxis: {
                        // data: ['a', 'b', 'c', 'd'],
                        data: ['a', 'b'],
                        axisTick: {show: false},
                        axisLabel: {
                            formatter: 'barGap: \'-100%\''
                        }
                    },
                    yAxis: {
                        splitLine: {show: false}
                    },
                    animationDurationUpdate: 1200,
                    grid: {
                        width: 100
                    },
                    animation: false,
                    series: [{
                        type: 'bar',
                        itemStyle: {
                            normal: {
                                color: '#ddd'
                            }
                        },
                        silent: true,
                        barWidth: 40,
                        barGap: '-100%', // Make series be overlap
                        data: [60, 60],
                        label: {
                            show: true,
                            color: 'blue',
                            position: 'top'
                        }
                    }, {
                        type: 'bar',
                        barWidth: 40,
                        z: 10,
                        data: [45, 55]
                    }]
                };

                testHelper.createChart(echarts, 'main2', option);
            });

        </script>






        <script>

            var echarts;
            var chart;
            var myChart;
            var groupCategories = [];
            var groupColors = [];

            require([
                'echarts'
            ], function (ec) {
                echarts = ec;
                var dataCount = 10;
                var dayTimestamp = 24 * 60 * 60 * 1000;

                function makeSeriesData() {
                    var result = [];
                    var date = +(new Date(2019, 8, 10));
                    for (var i = 0; i < dataCount; i++) {
                        result.push([+date, Math.random() * 1000]);
                        date += dayTimestamp;
                    }
                    return result;
                }

                option = {
                    xAxis: {
                        type: 'time',
                        boundaryGap: ['20%', '20%'],
                        splitLine: {show: false}
                    },
                    yAxis: {
                        axisLine: {show: false},
                        axisTick: {show: false},
                        splitLine: {show: false}
                    },
                    legend: {},
                    series: [{
                        name: 'barA1',
                        type: 'bar',
                        stack: 'a',
                        itemStyle: {
                            shadowBlur: 10,
                            borderColor: '#ef1',
                            borderWidth: 5
                        },
                        data: makeSeriesData()
                    }, {
                        name: 'barA2',
                        type: 'bar',
                        stack: 'a',
                        itemStyle: {
                            borderColor: '#1dd',
                            borderWidth: 5
                        },
                        data: makeSeriesData()
                    }, {
                        name: 'barB',
                        type: 'bar',
                        itemStyle: {
                            shadowBlur: 5,
                            borderColor: '#ef1',
                            borderWidth: 3
                        },
                        data: makeSeriesData()
                    }]
                };

                var chart = testHelper.create(echarts, 'main3', {
                    title: [
                        'bar on time axis',
                        'click the legend, the bar should display normally'
                    ],
                    option: option
                    // recordCanvas: true
                });
            });

        </script>







        <script>

            var echarts;
            var chart;
            var myChart;
            var groupCategories = [];
            var groupColors = [];

            require([
                'echarts'
            ], function (ec) {
                echarts = ec;
                var dataCount = 5;

                function makeSeriesData() {
                    var result = [];
                    var date = 0;
                    for (var i = 0; i < dataCount; i++) {
                        result.push([+date, Math.random() * 1000]);
                        date += Math.ceil(Math.random() * 10);
                    }
                    return result;
                }
                var itemStyle = {
                    shadowBlur: 5
                };

                option = {
                    xAxis: {
                        scale: true,
                        // boundaryGap: ['0.5%', .1],
                        splitLine: {show: false}
                    },
                    yAxis: {
                        axisLabel: {
                            margin: 40
                        },
                        axisLine: {show: false},
                        axisTick: {show: false},
                        splitLine: {show: false}
                    },
                    dataZoom: [{
                        type: 'slider'
                    }, {
                        type: 'inside'
                    }],
                    legend: {},
                    series: [{
                        name: 'barA',
                        type: 'bar',
                        itemStyle: itemStyle,
                        data: makeSeriesData()
                    }, {
                        name: 'barB',
                        type: 'bar',
                        itemStyle: itemStyle,
                        data: makeSeriesData()
                    }],
                    animation: false
                };

                var chart = testHelper.create(echarts, 'main4', {
                    title: [
                        'bar on value axis',
                        'click the legend, the bar should display normally'
                    ],
                    option: option
                    // recordCanvas: true
                });
            });

        </script>






        <script>

            var echarts;
            var chart;
            var myChart;
            var groupCategories = [];
            var groupColors = [];

            require([
                'echarts'
            ], function (ec) {
                echarts = ec;
                var dataCount = 10;

                function makeSeriesData() {
                    var result = [];
                    var date = 10;
                    for (var i = 0; i < dataCount; i++) {
                        result.push([+date, Math.random() * 1000]);
                        date += 1;
                    }
                    return result;
                }
                var itemStyle = {
                    shadowBlur: 5
                };

                option = {
                    xAxis: {
                        type: 'category',
                        scale: true,
                        boundaryGap: false,
                        splitLine: {show: false},
                        axisLine: {show: false}
                    },
                    yAxis: {
                        axisLabel: {
                            margin: 40
                        },
                        axisLine: {show: false},
                        axisTick: {show: false},
                        splitLine: {show: false}
                    },
                    legend: {},
                    series: [{
                        name: 'lineA',
                        type: 'line',
                        data: makeSeriesData()
                    }, {
                        name: 'barA',
                        type: 'bar',
                        itemStyle: itemStyle,
                        data: makeSeriesData()
                    }, {
                        name: 'barB',
                        type: 'bar',
                        itemStyle: itemStyle,
                        data: makeSeriesData()
                    }]
                };

                var chart = testHelper.create(echarts, 'main5', {
                    title: [
                        'bar on category axis',
                        'click the legend, the bar should display normally'
                    ],
                    option: option
                    // recordCanvas: true
                });
            });

        </script>




        <script>
            require(['echarts'], function (echarts) {
                option = {
                    animation: false,
                    dataZoom: [
                        {
                            "type": "slider",
                            "show": true
                        }
                    ],
                    color: ['#003366', '#e5323e'],
                    legend: {
                        data: ['Forest', 'Desert']
                    },
                    xAxis: [
                        {
                            type: 'time'
                        }
                    ],
                    yAxis: [
                        {
                            type: 'value'
                        }
                    ],
                    series: [
                        {
                            name: 'Forest',
                            type: 'bar',
                            barGap: 0,
                            data: [["2017-05-26", 320], ["2017-05-25", 340], ["2017-05-24", 310]]
                        },
                        {
                            name: 'Desert',
                            type: 'bar',
                            data: [["2017-05-26", 240], ["2017-05-24", 315]]
                        }
                    ]
                };

                var chart = testHelper.create(echarts, 'main6', {
                    title: [
                        'Bar series with time axis',
                        'Zoom in and bars should not overlap'
                    ],
                    option: option
                });
            });
        </script>


    </body>
</html>