
<!--
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/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'], 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'], 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'], 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://asset/echarts-logo.png'
                            },
                            snap: true,
                            value: 600 // init value
                        }
                    },
                    yAxis: {
                        inverse: true,
                        position: 'right',
                        axisLine: {
                            onZero: false
                        },
                        axisPointer: {
                            handle: {
                                show: true,
                                icon: 'image://asset/echarts-logo.png',
                                margin: 70
                            }
                        }
                    }
                });
                baseTop += height + gap;

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

        </script>








        <script>

            require([
                'echarts'
                ], 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'], 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>