<!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">
        <script src="lib/simpleRequire.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>
            .chart {
                position: relative;
                height: 500px;
                max-width: 1000px;
                margin: 0 auto;
            }
            h2 {
                text-align: center;
                font-size: 16px;
                line-height: 40px;
                font-weight: normal;
                background: #078302;
                color: #eee;
            }
        </style>

        <h2>scatter</h2>
        <div class="chart" id="main1"></div>
        <h2>Test: (1) click zoom btn (2) select (3) click zoom btn, expect: not change</h2>
        <div class="chart" id="main-test-y-range"></div>
        <h2>Multiple Y axis (default)</h2>
        <div class="chart" id="main-multiple-y-axis-default"></div>
        <h2>Specify Y axis (yAxisIndex: [1, 2, 4], xAxisIndex: false, should be 'lineY' brush)</h2>
        <div class="chart" id="main-specify-y-axis"></div>
        <h2>Specify Y axis (yAxisIndex: false, should be 'lineX' brush)</h2>
        <div class="chart" id="main-specify-x-axis"></div>

        <div id="main0"></div>
        <div id="main-refer-by-axis-id"></div>

        <script>

            var lastChart;
            var globalColor = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83',  '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'];

            function makeChart(id, option, cb) {
                require([
                    'echarts'
                ], function (echarts, globalDefault) {
                    var main = document.getElementById(id);
                    if (main) {
                        var chartMain = document.createElement('div');
                        chartMain.style.cssText = 'height:100%';
                        main.appendChild(chartMain);
                        var chart = lastChart = echarts.init(chartMain);

                        if (typeof option === 'function') {
                            option = option(echarts, globalDefault);
                        }

                        chart.setOption(option);

                        window.addEventListener('resize', chart.resize);

                        cb && cb(echarts, chart);
                    }

                });
            }

        </script>















        <script>
            var data1 = [];
            var data2 = [];
            var data3 = [];

            function random(max) {
                return (Math.random() * max).toFixed(3);
            };

            for (var i = 0; i < 100; i++) {
                data1.push([random(15), random(10), random(1)]);
                // data1.push([i, 10, i]);
                data2.push([random(10), random(10), random(1)]);
                data3.push([random(15), random(10), random(1)]);
            }

            makeChart('main1', {
                legend: {
                    data: ['scatter', 'scatter2', 'scatter3']
                },
                animationDuration: 1000,
                animationDurationUpdate: 1000,
                toolbox: {
                    feature: {
                        dataView: {},
                        dataZoom: {
                            show: true,
                            yAxisIndex: null,
                            // brushStyle: {
                            //     borderWidth: 2,
                            //     color: 'blue',
                            //     opacity: 0.1,
                            //     borderColor: '#596A76',
                            // }
                        },
                        restore: {show: true},
                        saveAsImage: {}
                    }
                },
                tooltip: {
                },
                xAxis: {
                    type: 'value',
                    min: 'dataMin',
                    max: 'dataMax',
                    splitLine: {
                        show: true
                    }
                },
                yAxis: {
                    type: 'value',
                    min: 'dataMin',
                    max: 'dataMax',
                    splitLine: {
                        show: true
                    }
                },
                dataZoom: [
                    {
                        show: true,
                        xAxisIndex: [0],
                        start: 10,
                        end: 70
                    },
                    {
                        show: true,
                        yAxisIndex: [0],
                        start: 0,
                        end: 20
                    },
                    {
                        type: 'inside',
                        xAxisIndex: [0],
                        start: 10,
                        end: 70
                    },
                    {
                        type: 'inside',
                        yAxisIndex: [0],
                        start: 0,
                        end: 20
                    }
                ],
                series: [
                    {
                        name: 'scatter',
                        type: 'scatter',
                        itemStyle: {
                            normal: {
                                opacity: 0.8,
                            }
                        },
                        symbolSize: function (val) {
                            return val[2] * 40;
                        },
                        data: data1
                    },
                    {
                        name: 'scatter2',
                        type: 'scatter',
                        itemStyle: {
                            normal: {
                                opacity: 0.8
                            }
                        },
                        symbolSize: function (val) {
                            return val[2] * 40;
                        },
                        data: data2
                    },
                    {
                        name: 'scatter3',
                        type: 'scatter',
                        itemStyle: {
                            normal: {
                                opacity: 0.8,
                            }
                        },
                        symbolSize: function (val) {
                            return val[2] * 40;
                        },
                        data: data3
                    }
                ]
            });
        </script>











        <script>
            makeChart('main-test-y-range', function (echarts, globalDefault) {
                return {
                    tooltip: {},
                    toolbox: {
                        feature: {
                            dataZoom: {},
                            restore: {}
                        }
                    },
                    legend: {
                        data: ['A1', 'A2', 'A3', 'B1', 'B2']
                    },
                    grid: [{
                        left: 40,
                        width: 300,
                    }],
                    xAxis: [{
                        data: ['z', 'y', 'x', 'w', 'v', 'u']
                    }],
                    yAxis: [{
                        type: 'value',
                        position: 'left',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[0]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[1]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        offset: 80,
                        axisLine: {
                            lineStyle: {
                                color: globalColor[2]
                            }
                        }
                    }],
                    dataZoom: [{
                        type: 'slider',
                        height: 20
                    }, {
                        type: 'slider',
                        yAxisIndex: 1,
                        orient: 'vertical',
                        left: 365,
                        width: 20
                    }, {
                        type: 'slider',
                        yAxisIndex: 2,
                        orient: 'vertical',
                        left: 445,
                        width: 20
                    }],
                    series: [{
                        name: 'A1',
                        type: 'line',
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'A2',
                        type: 'line',
                        yAxisIndex: 1,
                        data: [1, 5, 1, 5, 1, 10]
                    }, {
                        name: 'A3',
                        type: 'line',
                        yAxisIndex: 2,
                        data: [3, 8, 1, 4, 2, 5]
                    }]
                };
            });
        </script>









        <script>
            makeChart('main-multiple-y-axis-default', function (echarts, globalDefault) {
                return {
                    tooltip: {},
                    toolbox: {
                        feature: {
                            dataZoom: {},
                            restore: {}
                        }
                    },
                    legend: {
                        data: ['A1', 'A2', 'A3', 'B1', 'B2']
                    },
                    grid: [{
                        left: 40,
                        width: 300,
                    }, {
                        left: 550,
                        right: 40
                    }],
                    xAxis: [{
                        data: ['z', 'y', 'x', 'w', 'v', 'u']
                    }, {
                        data: ['z', 'y', 'x', 'w', 'v', 'u'],
                        gridIndex: 1
                    }],
                    yAxis: [{
                        type: 'value',
                        position: 'left',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[0]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[1]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        offset: 80,
                        axisLine: {
                            lineStyle: {
                                color: globalColor[2]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'left',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[3]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[4]
                            }
                        }
                    }],
                    dataZoom: [{
                        type: 'slider',
                        height: 20
                    }, {
                        type: 'slider',
                        yAxisIndex: 1,
                        orient: 'vertical',
                        left: 365,
                        width: 20
                    }, {
                        type: 'slider',
                        yAxisIndex: 2,
                        orient: 'vertical',
                        left: 445,
                        width: 20
                    }],
                    series: [{
                        name: 'A1',
                        type: 'line',
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'A2',
                        type: 'line',
                        yAxisIndex: 1,
                        data: [1, 5, 1, 5, 1, 10]
                    }, {
                        name: 'A3',
                        type: 'line',
                        yAxisIndex: 2,
                        data: [3, 8, 1, 4, 2, 5]
                    }, {
                        name: 'B1',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 3,
                        data: [5, 1, 5, 1, 5, 3]
                    }, {
                        name: 'B2',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 4,
                        data: [1, 5, 1, 5, 1, 10]
                    }]
                };
            });
        </script>








        <script>
            makeChart('main-specify-y-axis', function (echarts, globalDefault) {
                return {
                    tooltip: {},
                    toolbox: {
                        feature: {
                            dataZoom: {
                                yAxisIndex: [1, 2, 4],
                                xAxisIndex: false
                            },
                            restore: {}
                        }
                    },
                    legend: {
                        data: ['A1', 'A2', 'A3', 'B1', 'B2']
                    },
                    grid: [{
                        left: 40,
                        width: 300,
                    }, {
                        left: 550,
                        right: 40
                    }],
                    xAxis: [{
                        data: ['z', 'y', 'x', 'w', 'v', 'u']
                    }, {
                        data: ['z', 'y', 'x', 'w', 'v', 'u'],
                        gridIndex: 1
                    }],
                    yAxis: [{
                        type: 'value',
                        position: 'left',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[0]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[1]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        offset: 80,
                        axisLine: {
                            lineStyle: {
                                color: globalColor[2]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'left',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[3]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[4]
                            }
                        }
                    }],
                    series: [{
                        name: 'A1',
                        type: 'line',
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'A2',
                        type: 'line',
                        yAxisIndex: 1,
                        data: [1, 5, 1, 5, 1, 10]
                    }, {
                        name: 'A3',
                        type: 'line',
                        yAxisIndex: 2,
                        data: [3, 8, 1, 4, 2, 5]
                    }, {
                        name: 'B1',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 3,
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'B2',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 4,
                        data: [1, 5, 1, 5, 1, 10]
                    }]
                };
            });
        </script>










        <script>
            makeChart('main-specify-x-axis', function (echarts, globalDefault) {
                return {
                    tooltip: {},
                    toolbox: {
                        feature: {
                            dataZoom: {
                                yAxisIndex: false
                            },
                            restore: {}
                        }
                    },
                    legend: {
                        data: ['A1', 'A2', 'A3', 'B1', 'B2']
                    },
                    grid: [{
                        left: 40,
                        width: 300,
                    }, {
                        left: 550,
                        right: 40
                    }],
                    xAxis: [{
                        data: ['z', 'y', 'x', 'w', 'v', 'u']
                    }, {
                        data: ['z', 'y', 'x', 'w', 'v', 'u'],
                        gridIndex: 1
                    }],
                    yAxis: [{
                        type: 'value',
                        position: 'left',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[0]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        axisLine: {
                            lineStyle: {
                                color: globalColor[1]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        offset: 80,
                        axisLine: {
                            lineStyle: {
                                color: globalColor[2]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'left',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[3]
                            }
                        }
                    }, {
                        type: 'value',
                        position: 'right',
                        gridIndex: 1,
                        boundaryGap: ['20%', '20%'],
                        axisLine: {
                            lineStyle: {
                                color: globalColor[4]
                            }
                        }
                    }],
                    series: [{
                        name: 'A1',
                        type: 'line',
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'A2',
                        type: 'line',
                        yAxisIndex: 1,
                        data: [1, 5, 1, 5, 1, 10]
                    }, {
                        name: 'A3',
                        type: 'line',
                        yAxisIndex: 2,
                        data: [3, 8, 1, 4, 2, 5]
                    }, {
                        name: 'B1',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 3,
                        data: [5, 1, 5, 1, 5, 10]
                    }, {
                        name: 'B2',
                        type: 'line',
                        xAxisIndex: 1,
                        yAxisIndex: 4,
                        data: [1, 5, 1, 5, 1, 10]
                    }]
                };
            });
        </script>





        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;

            option = {
                toolbox: {
                    feature: {
                        dataZoom: {
                            // yAxisIndex: false
                        }
                    }
                },
                legend: {},
                xAxis: {
                    data: ['I', 'II', 'III']
                },
                yAxis: {},
                series: [{
                    name: 'x',
                    type: 'bar',
                    stack: 'a',
                    data: [11, 22, 33]
                }, {
                    name: 'y',
                    type: 'bar',
                    stack: 'a',
                    data: [44, 33, 22]
                }]
            };

            var chart = testHelper.create(echarts, 'main0', {
                title: [
                    '(1) Use toolbox.dataZoom to brush a small rect in grid.',
                    '(2) Click a legend item to disappear a series and click again to show the series.',
                    '[Check]: the extent of yAxis: should be able to return to **the previous state after (1) did**.',
                    '(3) Click "back" in toolbox.dataZoom',
                    '[Check]: Back normally.'
                ],
                option: option
                // height: 300,
                // buttons: [{text: 'btn-txt', onclick: function () {}}],
                // recordCanvas: true,
            });
        });
        </script>




        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;

            option = {
                toolbox: {
                    feature: {
                        dataZoom: {
                            xAxisId: 'xr',
                            yAxisId: ['yl0', 'yl1']
                        }
                    }
                },
                legend: {},
                grid: [{
                    right: '60%',
                    bottom: '60%',
                }, {
                    id: 'gr',
                    left: '60%',
                    bottom: '60%',
                }, {
                    id: 'gb',
                    top: '60%',
                }],
                xAxis: [{

                }, {
                    id: 'xr',
                    gridId: 'gr'
                }, {
                    id: 'xb',
                    gridId: 'gb'
                }],
                yAxis: [{
                    id: 'yl0'
                }, {
                    id: 'yl1'
                }, {
                    id: 'yr',
                    gridId: 'gr'
                }, {
                    id: 'yb',
                    gridId: 'gb'
                }],
                series: [{
                    type: 'line',
                    yAxisId: 'yl0',
                    data: [[11, 12], [22, 45], [33, 76]]
                }, {
                    type: 'line',
                    yAxisId: 'yl1',
                    data: [[11, 2212], [22, 3345], [33, 4476]]
                }, {
                    type: 'line',
                    xAxisId: 'xr',
                    yAxisId: 'yr',
                    data: [[45, 65], [13, 25], [56, 71]]
                }, {
                    type: 'line',
                    xAxisId: 'xb',
                    yAxisId: 'yb',
                    data: [[123, 654], [234, 321], [345, 812]]
                }]
            };

            var chart = testHelper.create(echarts, 'main-refer-by-axis-id', {
                title: [
                    'Test toolbox datazoom refer with axis id',
                    'left grid: toolbox only work **on two yAxis**',
                    'right grid: toolbox only work **on xAxis**',
                    'bottom grid: toolbox **does not work**'
                ],
                option: option
                // height: 300,
                // buttons: [{text: 'btn-txt', onclick: function () {}}],
                // recordCanvas: true,
            });
        });
        </script>



    </body>
</html>