
<!--
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/facePrint.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="lib/reset.css" />
        <script src="lib/testHelper.js"></script>
        <script src="tooltipTestHelper.js"></script>
    </head>
    <body>
        <style>
            h1 {
                line-height: 60px;
                background: #360;
                text-align: center;
                font-weight: bold;
                color: #eee;
                font-size: 14px;
                margin: 0;
            }
            .chart {
                height: 350px;
            }
        </style>


        <h1>handle | time axis | x snap | init value: '2017-04-12' | tooltip not show | inside data zoom | animation auto | check blank</h1>
        <div class="chart" id="handle-time-init"></div>
        <h1>handle | category | check resize | should trigger hightlight | should link </h1>
        <h1>press button: show tip, release button: hide tip</h1>
        <div class="chart" id="handle-category"></div>
        <h1>handle | value axis | x snap, y not-snap | has init handle value | tooltip.alwaysShowContent | y handle tooltip position should not overflow axispointer line | image icon</h1>
        <div class="chart" id="handle-value-init"></div>
        <h1>single coordinate system handle | tooltip time label should be consistent with axisPinter.label.formatter</h1>
        <div class="chart" id="themeRiver"></div>
        <h1>setOption in not merge mode: (1) drag handle (2) click the eye. Check: handle should be normal</h1>
        <div class="chart" id="setOption-merge"></div>






        <script>

            require([
                'echarts'
                // 'echarts/chart/scatter',
                // 'echarts/chart/line',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'echarts/component/dataZoom',
                // 'zrender/vml/vml'
            ], function (echarts) {

                var option = {
                    dataZoom: {
                        type: 'inside',
                        start: 20,
                        end: 50
                    },
                    axisPointer: {
                        triggerOn: 'none'
                    }
                };
                var baseTop = 90;
                var height = 250;
                var gap = 50;
                makeTimeGrid(option, {
                    grid: {left: 100, top: baseTop, height: height},
                    xAxis: {
                        axisPointer: {
                            show: true,
                            snap: true,
                            handle: {
                                show: true,
                                margin: 60
                            },
                            value: '2017-04-12', // init value
                            label: {
                                padding: [5, 10, 15, 20]
                            }
                        }
                    }
                });
                baseTop += height + gap;

                createChart('handle-time-init', echarts, option, baseTop + 100);
            })

        </script>









        <script>

            require([
                'echarts'
                // 'echarts/chart/line',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'zrender/vml/vml'
            ], function (echarts) {

                var option = {
                    tooltip: {
                        triggerOn: 'none'
                    },
                    axisPointer: {
                        link: {xAxisIndex: 'all'}
                    }
                };
                var baseTop = 90;
                var height = 150;
                var gap = 100;
                makeCategoryGrid(option, {
                    grid: {top: baseTop, height: height},
                    xAxis: {
                        axisPointer: {
                            handle: {show: true}
                        }
                    },
                    yAxis: {name: 'no init handle value'}
                });
                baseTop += height + gap;
                makeCategoryGrid(option, {
                    grid: {top: baseTop, height: height, left: '30%', width: '50%'},
                    xAxis: {
                        axisPointer: {
                            handle: {show: true},
                            value: 'category3'
                        }
                    },
                    yAxis: {name: 'init handle value: "category3"'}
                });
                baseTop += height + gap;

                createChart('handle-category', echarts, option, baseTop + 100);
            });

        </script>









        <script>

            require([
                'echarts'
                // 'echarts/chart/scatter',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'zrender/vml/vml'
            ], function (echarts) {

                var option = {
                    tooltip: {
                        alwaysShowContent: true
                    }
                };
                var baseTop = 90;
                var height = 150;
                var gap = 160;
                makeValueGrid(option, {
                    grid: {left: 100, top: baseTop, height: height, left: 120, right: 120},
                    xAxis: {
                        axisPointer: {
                            handle: {show: true},
                            snap: true,
                            value: 600 // init value
                        }
                    },
                    yAxis: {
                        axisPointer: {
                            handle: {
                                show: true,
                                margin: 70
                            }
                        }
                    }
                });
                baseTop += height + gap;
                makeValueGrid(option, {
                    grid: {left: 100, top: baseTop, height: height, left: 120, right: 120},
                    xAxis: {
                        position: 'top',
                        axisPointer: {
                            handle: {
                                show: true,
                                icon: 'image://https://echarts.apache.org/zh/images/favicon.png'
                            },
                            snap: true,
                            value: 600 // init value
                        }
                    },
                    yAxis: {
                        inverse: true,
                        position: 'right',
                        axisLine: {
                            onZero: false
                        },
                        axisPointer: {
                            handle: {
                                show: true,
                                icon: 'image://https://echarts.apache.org/zh/images/favicon.png',
                                margin: 70
                            }
                        }
                    }
                });
                baseTop += height + gap;

                createChart('handle-value-init', echarts, option, baseTop + 100);
            })

        </script>








        <script>

            require([
                'echarts'
                // 'echarts/chart/themeRiver',
                // 'echarts/component/legend',
                // 'echarts/component/singleAxis',
                // 'echarts/component/tooltip',
                ], function (echarts) {

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

                    var option = {

                        tooltip: {
                            triggerOn: 'none'
                        },
                        legend: {
                            data: ['DQ', 'TY', 'SS', 'QG', 'SY', 'DD']
                        },
                        singleAxis: {
                            axisTick: {},
                            axisLabel: {},
                            top: 100,
                            bottom: 100,
                            // position: 'top',
                            type: 'time',
                            axisPointer: {
                                handle: {show: true},
                                label: {
                                    // formatter: '|{value}|',
                                    formatter: function (params) {
                                        return echarts.format.formatTime('yyyy-MM-dd', params.value);
                                    }
                                }
                            },
                            splitLine: {
                                show: true,
                                lineStyle: {
                                    type: 'dashed',
                                    opacity: 0.2
                                }
                            }
                        },
                        series: [
                            {
                                type: 'themeRiver',
                                itemStyle: {
                                    emphasis: {
                                        shadowBlur: 20,
                                        shadowColor: 'rgba(0, 0, 0, 0.8)'
                                    }
                                },
                                data: [['2015/11/08',10,'DQ'],['2015/11/09',15,'DQ'],['2015/11/10',35,'DQ'],
                                // ['2015/11/11',38,'DQ'],['2015/11/12',22,'DQ'],['2015/11/13',16,'DQ'],
                                ['2015/11/14',7,'DQ'],['2015/11/15',2,'DQ'],['2015/11/16',17,'DQ'],
                                ['2015/11/17',33,'DQ'],['2015/11/18',40,'DQ'],['2015/11/19',32,'DQ'],
                                ['2015/11/20',26,'DQ'],['2015/11/21',35,'DQ'],['2015/11/22',40,'DQ'],
                                ['2015/11/23',32,'DQ'],['2015/11/24',26,'DQ'],['2015/11/25',22,'DQ'],
                                // ['2015/11/26',16,'DQ'],['2015/11/27',22,'DQ'],['2015/11/28',10,'DQ'],
                                ['2015/11/08',35,'TY'],['2015/11/09',36,'TY'],['2015/11/10',37,'TY'],
                                ['2015/11/11',22,'TY'],['2015/11/12',24,'TY'],['2015/11/13',26,'TY'],
                                ['2015/11/14',34,'TY'],['2015/11/15',21,'TY'],['2015/11/16',18,'TY'],
                                ['2015/11/17',45,'TY'],['2015/11/18',32,'TY'],['2015/11/19',35,'TY'],
                                ['2015/11/20',30,'TY'],['2015/11/21',28,'TY'],['2015/11/22',27,'TY'],
                                ['2015/11/23',26,'TY'],['2015/11/24',15,'TY'],['2015/11/25',30,'TY'],
                                ['2015/11/26',35,'TY'],['2015/11/27',42,'TY'],['2015/11/28',42,'TY'],
                                ['2015/11/08',21,'SS'],['2015/11/09',25,'SS'],['2015/11/10',27,'SS'],
                                ['2015/11/11',23,'SS'],['2015/11/12',24,'SS'],['2015/11/13',21,'SS'],
                                ['2015/11/14',35,'SS'],['2015/11/15',39,'SS'],['2015/11/16',40,'SS'],
                                ['2015/11/17',36,'SS'],['2015/11/18',33,'SS'],['2015/11/19',43,'SS'],
                                ['2015/11/20',40,'SS'],['2015/11/21',34,'SS'],['2015/11/22',28,'SS'],
                                // ['2015/11/23',26,'SS'],['2015/11/24',37,'SS'],['2015/11/25',41,'SS'],
                                // ['2015/11/26',46,'SS'],['2015/11/27',47,'SS'],['2015/11/28',41,'SS'],
                                // ['2015/11/08',10,'QG'],['2015/11/09',15,'QG'],['2015/11/10',35,'QG'],
                                // ['2015/11/11',38,'QG'],['2015/11/12',22,'QG'],['2015/11/13',16,'QG'],
                                ['2015/11/14',7,'QG'],['2015/11/15',2,'QG'],['2015/11/16',17,'QG'],
                                ['2015/11/17',33,'QG'],['2015/11/18',40,'QG'],['2015/11/19',32,'QG'],
                                ['2015/11/20',26,'QG'],['2015/11/21',35,'QG'],['2015/11/22',40,'QG'],
                                ['2015/11/23',32,'QG'],['2015/11/24',26,'QG'],['2015/11/25',22,'QG'],
                                ['2015/11/26',16,'QG'],['2015/11/27',22,'QG'],['2015/11/28',10,'QG'],
                                ['2015/11/08',10,'SY'],['2015/11/09',15,'SY'],['2015/11/10',35,'SY'],
                                ['2015/11/11',38,'SY'],['2015/11/12',22,'SY'],['2015/11/13',16,'SY'],
                                ['2015/11/14',7,'SY'],['2015/11/15',2,'SY'],['2015/11/16',17,'SY'],
                                ['2015/11/17',33,'SY'],['2015/11/18',40,'SY'],['2015/11/19',32,'SY'],
                                ['2015/11/20',26,'SY'],['2015/11/21',35,'SY'],['2015/11/22',4,'SY'],
                                ['2015/11/23',32,'SY'],['2015/11/24',26,'SY'],['2015/11/25',22,'SY'],
                                ['2015/11/26',16,'SY'],['2015/11/27',22,'SY'],['2015/11/28',10,'SY'],
                                ['2015/11/08',10,'DD'],['2015/11/09',15,'DD'],['2015/11/10',35,'DD'],
                                ['2015/11/11',38,'DD'],['2015/11/12',22,'DD'],['2015/11/13',16,'DD'],
                                ['2015/11/14',7,'DD'],['2015/11/15',2,'DD'],['2015/11/16',17,'DD'],
                                ['2015/11/17',33,'DD'],['2015/11/18',4,'DD'],['2015/11/19',32,'DD'],
                                ['2015/11/20',26,'DD'],['2015/11/21',35,'DD'],['2015/11/22',40,'DD'],
                                ['2015/11/23',32,'DD'],['2015/11/24',26,'DD'],['2015/11/25',22,'DD'],
                                ['2015/11/26',16,'DD'],['2015/11/27',22,'DD'],['2015/11/28',10,'DD']]
                            }
                        ]
                    };

                    createChart('themeRiver', echarts, option, 500);
                });

        </script>









        <script>

            require([
                'echarts'
                // 'echarts/chart/line',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'echarts/component/dataZoom',
                // 'echarts/component/toolbox',
                // 'zrender/vml/vml'
            ], function (echarts) {

                var base = +new Date(1968, 9, 3);
                var oneDay = 24 * 3600 * 1000;
                var date = [];

                var data = [Math.random() * 300];

                for (var i = 1; i < 200; i++) {
                    var now = new Date(base += oneDay);
                    date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));
                    data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
                }

                option = {
                    animation: false,
                    title: {
                        left: 'center',
                        text: '触屏 tooltip 和 dataZoom 示例',
                        subtext: '"tootip" and "dataZoom" on mobile device',
                    },
                    legend: {
                        top: 'bottom',
                        data:['意向']
                    },
                    tooltip: {
                        triggerOn: 'none',
                        position: function (pt) {
                            return [pt[0], 100];
                        }
                    },
                    toolbox: {
                        left: 'center',
                        top: 10,
                        itemSize: 40,
                        feature: {
                            myMerge: {
                                show: true,
                                title: 'setOption in NOT merge mode',
                                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 () {
                                    chart.setOption(option, true);
                                }
                            }
                        }
                    },
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        axisPointer: {
                            lineStyle: {
                                color: '#215F5A',
                                width: 2
                            },
                            label: {
                                show: true
                            },
                            handle: {
                                show: true
                            }
                        },
                        data: date
                    },
                    yAxis: {
                        type: 'value',
                        boundaryGap: [0, '100%']
                    },
                    grid: {
                        top: 70,
                        left: 20,
                        right: 30,
                        containLabel: true,
                        height: 150
                    },
                    dataZoom: [{
                        type: 'inside',
                        start: 0,
                        end: 10
                    }],
                    series: [
                        {
                            name:'模拟数据',
                            type:'line',
                            smooth:true,
                            symbol: 'none',
                            sampling: 'average',
                            itemStyle: {
                                normal: {
                                    color: '#8ec6ad'
                                }
                            },
                            areaStyle: {
                                normal: {
                                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                        offset: 0,
                                        color: '#8ec6ad'
                                    }, {
                                        offset: 1,
                                        color: '#ffe'
                                    }])
                                }
                            },
                            data: data
                        }
                    ]
                };

                var chart = createChart('setOption-merge', echarts, option, 400);
            });

        </script>







    </body>
</html>