<!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">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <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>
        <!-- <script src="ut/lib/canteen.js"></script> -->
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
        </style>



        <div id="main0"></div>
        <div id="main1"></div>
        <div id="main2"></div>


        <!-- TODO: Tree, Sankey, Map  -->
        <div id="main3"></div>
        <div id="main4"></div>
        <div id="main5"></div>
        <div id="main6"></div>
        <div id="main7"></div>
        <div id="main8"></div>
        <div id="main9"></div>
        <div id="main10"></div>
        <div id="main11"></div>
        <div id="main12"></div>
        <div id="main13"></div>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            option = {
                legend: {
                    data: ['直接访问', '邮件营销','联盟广告','视频广告','搜索引擎']
                },
                grid: {
                    left: '3%',
                    right: '4%',
                    bottom: '3%',
                    containLabel: true
                },
                xAxis:  {
                    type: 'value'
                },
                yAxis: {
                    type: 'category',
                    data: ['周一','周二','周三','周四','周五','周六','周日']
                },
                series: [
                    {
                        name: '直接访问',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        },
                        emphasis: {
                            focus: 'series'
                        },
                        data: [13244, 302, 301, 334, 390, 330, 320]
                    },
                    {
                        name: '邮件营销',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        },
                        emphasis: {
                            focus: 'series'
                        },
                        data: [120, 132, 101, 134, 90, 230, 210]
                    },
                    {
                        name: '联盟广告',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        },
                        emphasis: {
                            focus: 'series'
                        },
                        data: [220, 182, 191, 234, 290, 330, 310]
                    },
                    {
                        name: '视频广告',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        },
                        emphasis: {
                            focus: 'series'
                        },
                        data: [150, 212, 201, 154, 190, 330, 410]
                    },
                    {
                        name: '搜索引擎',
                        type: 'bar',
                        stack: '总量',
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        },
                        emphasis: {
                            focus: 'series'
                        },
                        data: [820, 832, 901, 934, 1290, 1330, 1320]
                    }
                ]
            }
            var chart = testHelper.create(echarts, 'main0', {
                title: [
                    'Overlap of stacked bar.',
                    'Case from #6514'
                ],
                option: option
            });
        });
        </script>


        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                var base = +new Date(1968, 9, 3);
                var oneDay = 24 * 3600 * 1000;
                var date = [];

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

                for (var i = 1; i < 50; 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 = {
                    grid: {
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data: date
                    },
                    yAxis: {
                        type: 'value',
                        boundaryGap: [0, '100%']
                    },
                    series: [
                        {
                            name:'large area',
                            type:'line',
                            smooth:true,
                            label: {
                                show: true,
                                position: 'top'
                            },
                            labelLayout: {
                                hideOverlap: true
                            },
                            itemStyle: {
                                color: 'rgb(255, 70, 131)'
                            },
                            areaStyle: {
                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                    offset: 0,
                                    color: 'rgb(255, 158, 68)'
                                }, {
                                    offset: 1,
                                    color: 'rgb(255, 70, 131)'
                                }])
                            },
                            data: data
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main1', {
                    width: 600,
                    title: [
                        'Overlap of line.'
                    ],
                    option: option
                });
            });
        </script>





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

                const data = [{
                    "name": "United States",
                    "value": [213242, 22.86439111423725, "United States"]
                }, {
                    "name": "Italy",
                    "value": [110574, 11.856047040759652, "Italy"]
                }, {
                    "name": "Spain",
                    "value": [104118, 11.163817043697554, "Spain"]
                }, {
                    "name": "China",
                    "value": [82361, 8.830971931231625, "China"]
                }, {
                    "name": "Germany",
                    "value": [77872, 8.349649059978255, "Germany"]
                }, {
                    "name": "France",
                    "value": [57749, 6.192005901539504, "France"]
                }, {
                    "name": "Iran",
                    "value": [47593, 5.103051773571311, "Iran"]
                }, {
                    "name": "United Kingdom",
                    "value": [29865, 3.202207072840695, "United Kingdom"]
                }, {
                    "name": "Switzerland",
                    "value": [17768, 1.905133610253925, "Switzerland"]
                }, {
                    "name": "Turkey",
                    "value": [15679, 1.6811453103991045, "Turkey"]
                }, {
                    "name": "Belgium",
                    "value": [13964, 1.4972583145872247, "Belgium"]
                }, {
                    "name": "Netherlands",
                    "value": [13696, 1.4685226207810533, "Netherlands"]
                }, {
                    "name": "Austria",
                    "value": [10711, 1.1484627476041078, "Austria"]
                }, {
                    "name": "Korea, South",
                    "value": [9887, 1.0601112114239395, "Korea, South"]
                }, {
                    "name": "Canada",
                    "value": [9560, 1.0250493760708872, "Canada"]
                }, {
                    "name": "Portugal",
                    "value": [8251, 0.8846948119205952, "Portugal"]
                }, {
                    "name": "Brazil",
                    "value": [6836, 0.7329746375335339, "Brazil"]
                }, {
                    "name": "Israel",
                    "value": [6092, 0.6532009203999837, "Israel"]
                }, {
                    "name": "Sweden",
                    "value": [4947, 0.5304308852952593, "Sweden"]
                }, {
                    "name": "Norway",
                    "value": [4863, 0.52142417529631, "Norway"]
                }, {
                    "name": "Australia",
                    "value": [4862, 0.5213169525582273, "Australia"]
                }, {
                    "name": "Czechia",
                    "value": [3508, 0.37613736519421254, "Czechia"]
                }, {
                    "name": "Ireland",
                    "value": [3447, 0.3695967781711661, "Ireland"]
                }, {
                    "name": "Denmark",
                    "value": [3290, 0.35276280829217765, "Denmark"]
                }, {
                    "name": "Chile",
                    "value": [3031, 0.3249921191287509, "Chile"]
                }, {
                    "name": "Malaysia",
                    "value": [2908, 0.31180372234457526, "Malaysia"]
                }, {
                    "name": "Russia",
                    "value": [2777, 0.2977575436557378, "Russia"]
                }, {
                    "name": "Ecuador",
                    "value": [2748, 0.29464808425133865, "Ecuador"]
                }, {
                    "name": "Poland",
                    "value": [2554, 0.2738468730632893, "Poland"]
                }, {
                    "name": "Romania",
                    "value": [2460, 0.2637679356835128, "Romania"]
                }];

                var option = {
                    backgroundColor: '#333',
                    visualMap: {
                        dimension: 0,
                        left: 10,
                        itemWidth: 12,
                        min: data[29].value[0],
                        max: data[0].value[0],
                        text: ['High', 'Low'],
                        textStyle: {
                            color: '#ddd'
                        },
                        inRange: {
                            color: ['lightskyblue', 'yellow', 'orangered', 'red']
                        }
                    },
                    series: [{
                        type: 'pie',
                        data: data,
                        roseType: 'radius',
                        radius: ['30%', '70%'],
                        labelLine: {
                            length2: 100
                        },
                        labelLayout: function (params) {
                            const cx = window.innerWidth / 2;
                            const isLeft = params.labelRect.x < cx;
                            return isLeft ? {
                                x: cx - 200,
                                align: 'right',
                            } : {
                                x: cx + 100,
                                align: 'left'
                            };
                        }
                    }]
                };

                var chart = testHelper.create(echarts, 'main2', {
                    title: 'Pie label edge.',
                    height: 300,
                    option
                });
            });
        </script>

        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                option = {
                    tooltip: {
                        trigger: 'item',
                        formatter: '{a} <br/>{b}: {c} ({d}%)'
                    },
                    legend: {
                        orient: 'vertical',
                        left: 10,
                        data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']
                    },
                    series: [
                        {
                            name: '访问来源',
                            type: 'pie',
                            radius: ['50%', '70%'],
                            label: {
                                color: 'inherit',
                                show: false
                            },
                            emphasis: {
                                label: {
                                    show: true,
                                    fontSize: 30,
                                    fontWeight: 'bold'
                                }
                            },
                            labelLayout: {
                                x: '50%',
                                y: '50%',
                                align: 'center',
                                verticalAlign: 'center'
                            },
                            labelLine: {
                                show: false
                            },
                            data: [
                                {value: 335, name: '直接访问'},
                                {value: 310, name: '邮件营销'},
                                {value: 234, name: '联盟广告'},
                                {value: 135, name: '视频广告'},
                                {value: 1548, name: '搜索引擎'}
                            ]
                        }
                    ]
                };

                var chart = testHelper.create(echarts, 'main3', {
                    title: [
                        'Pie label center.'
                    ],
                    option: option
                });
            });
        </script>


        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                var data = [
                    [[28604,77,17096869,'Australia',1990],[31163,77.4,27662440,'Canada',1990],[1516,68,1154605773,'China',1990],[13670,74.7,10582082,'Cuba',1990],[28599,75,4986705,'Finland',1990],[29476,77.1,56943299,'France',1990],[31476,75.4,78958237,'Germany',1990],[28666,78.1,254830,'Iceland',1990],[1777,57.7,870601776,'India',1990],[29550,79.1,122249285,'Japan',1990],[2076,67.9,20194354,'North Korea',1990],[12087,72,42972254,'South Korea',1990],[24021,75.4,3397534,'New Zealand',1990],[43296,76.8,4240375,'Norway',1990],[10088,70.8,38195258,'Poland',1990],[19349,69.6,147568552,'Russia',1990],[10670,67.3,53994605,'Turkey',1990],[26424,75.7,57110117,'United Kingdom',1990],[37062,75.4,252847810,'United States',1990]],
                    [[44056,81.8,23968973,'Australia',2015],[43294,81.7,35939927,'Canada',2015],[13334,76.9,1376048943,'China',2015],[21291,78.5,11389562,'Cuba',2015],[38923,80.8,5503457,'Finland',2015],[37599,81.9,64395345,'France',2015],[44053,81.1,80688545,'Germany',2015],[42182,82.8,329425,'Iceland',2015],[5903,66.8,1311050527,'India',2015],[36162,83.5,126573481,'Japan',2015],[1390,71.4,25155317,'North Korea',2015],[34644,80.7,50293439,'South Korea',2015],[34186,80.6,4528526,'New Zealand',2015],[64304,81.6,5210967,'Norway',2015],[24787,77.3,38611794,'Poland',2015],[23038,73.13,143456918,'Russia',2015],[19360,76.5,78665830,'Turkey',2015],[38225,81.4,64715810,'United Kingdom',2015],[53354,79.1,321773631,'United States',2015]]
                ];

                option = {
                    xAxis: {},
                    yAxis: {
                        scale: true
                    },
                    series: [{
                        name: '1990',
                        data: data[0],
                        type: 'scatter',
                        symbolSize: function (data) {
                            return Math.sqrt(data[2]) / 5e2;
                        },
                        emphasis: {
                            focus: 'self'
                        },
                        labelLayout: {
                            y: 20,
                            align: 'center',
                            moveOverlap: 'shiftX',
                            hideOverlap: true
                        },
                        labelLine: {
                            show: true,
                            length2: 5,
                            lineStyle: {
                                color: '#bbb'
                            }
                        },
                        label: {
                            show: true,
                            formatter: function (param) {
                                return param.data[3];
                            },
                            minMargin: 10,
                            color: '#333',
                            textBorderColor: '#fff',
                            textBorderWidth: 1,
                            position: 'top'
                        }
                    }]
                };

                var chart = testHelper.create(echarts, 'main6', {
                    title: [
                        'Overlap Shift X'
                    ],
                    option: option
                });
            });
        </script>


        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option;
                var data = [
                    [[28604,77,17096869,'Australia',1990],[31163,77.4,27662440,'Canada',1990],[1516,68,1154605773,'China',1990],[13670,74.7,10582082,'Cuba',1990],[28599,75,4986705,'Finland',1990],[29476,77.1,56943299,'France',1990],[31476,75.4,78958237,'Germany',1990],[28666,78.1,254830,'Iceland',1990],[1777,57.7,870601776,'India',1990],[29550,79.1,122249285,'Japan',1990],[2076,67.9,20194354,'North Korea',1990],[12087,72,42972254,'South Korea',1990],[24021,75.4,3397534,'New Zealand',1990],[43296,76.8,4240375,'Norway',1990],[10088,70.8,38195258,'Poland',1990],[19349,69.6,147568552,'Russia',1990],[10670,67.3,53994605,'Turkey',1990],[26424,75.7,57110117,'United Kingdom',1990],[37062,75.4,252847810,'United States',1990]],
                    [[44056,81.8,23968973,'Australia',2015],[43294,81.7,35939927,'Canada',2015],[13334,76.9,1376048943,'China',2015],[21291,78.5,11389562,'Cuba',2015],[38923,80.8,5503457,'Finland',2015],[37599,81.9,64395345,'France',2015],[44053,81.1,80688545,'Germany',2015],[42182,82.8,329425,'Iceland',2015],[5903,66.8,1311050527,'India',2015],[36162,83.5,126573481,'Japan',2015],[1390,71.4,25155317,'North Korea',2015],[34644,80.7,50293439,'South Korea',2015],[34186,80.6,4528526,'New Zealand',2015],[64304,81.6,5210967,'Norway',2015],[24787,77.3,38611794,'Poland',2015],[23038,73.13,143456918,'Russia',2015],[19360,76.5,78665830,'Turkey',2015],[38225,81.4,64715810,'United Kingdom',2015],[53354,79.1,321773631,'United States',2015]]
                ];

                option = {
                    xAxis: {
                        splitLine: { show: false }
                    },
                    yAxis: {
                        splitLine: { show: false },
                        scale: true
                    },
                    grid: {
                        left: 100,
                        width: 300
                    },
                    series: [{
                        name: '1990',
                        data: data[0],
                        type: 'scatter',
                        symbolSize: function (data) {
                            return Math.sqrt(data[2]) / 5e2;
                        },
                        emphasis: {
                            focus: 'self'
                        },
                        labelLayout: {
                            x: 500,
                            moveOverlap: 'shiftY',
                            // hideOverlap: true
                        },
                        labelLine: {
                            show: true,
                            length2: 5,
                            lineStyle: {
                                color: '#bbb'
                            }
                        },
                        label: {
                            show: true,
                            formatter: function (param) {
                                return param.data[3];
                            },
                            textBorderColor: '#fff',
                            textBorderWidth: 1,
                            position: 'top',
                            minMargin: 2
                        }
                    }]
                };

                var chart = testHelper.create(echarts, 'main7', {
                    title: [
                        'Overlap Shift Y'
                    ],
                    option: option
                });
            });
        </script>

        <script>
            require(['echarts'], function (echarts) {
                const color = [
                    '#1576d2',
                    '#d14a82',
                    '#26c1f2',
                    '#a166ff',
                    '#1271cc',
                    '#272f67'
                ];
                let data = [{
                        name: 'Mon',
                        value: 182
                    },
                    {
                        name: 'Tue',
                        value: 191
                    },
                    {
                        name: 'Wed',
                        value: 234
                    },
                    {
                        name: 'Thu',
                        value: 290
                    },
                    {
                        name: 'Fri',
                        value: 330
                    }
                ];

                // 指定数据块中 label 的相应效果，以保证label的正常显示
                const dataArcStyle = {
                    label: {
                        show: true
                    },
                    labelLine: {
                        show: true
                    },
                    emphasis: {
                        labelLine: {
                            show: true
                        }
                    }
                }
                data = data.map(d => {
                    d = Object.assign(d, dataArcStyle)
                    return d;
                });

                const sum = data.reduce((prev, curr) => prev + curr.value, 0);
                data.push({
                    name: null,
                    value: sum,
                    itemStyle: {
                        opacity: 0
                    },
                    label: {
                        show: false
                    },
                    tooltip: {
                        show: false
                    }
                });

                option = {
                    backgroundColor: '#000',
                    color,
                    tooltip: {
                        show: true
                    },
                    series: [{
                        type: 'pie',
                        center: ['50%', '75%'],
                        radius: ['50%', '80%'],
                        startAngle: 180,
                        data
                    }]
                };
                var chart = testHelper.create(echarts, 'main8', {
                    title: [
                        'Case from https://gallery.echartsjs.com/editor.html?c=xFcvAMHjr1&v=1'
                    ],
                    option: option,
                    height: 500
                });
            });
        </script>

        <script>
            require(['echarts', 'map/js/china'], function (echarts) {
                option = {
                    series: [{
                        type: 'map',
                        map: 'china',
                        label: {
                            show: false,
                            formatter: [
                                `{title|{b}}`,
                                `{value|{c} K 平方公里}`
                            ].join('\n'),
                            backgroundColor: '#eee',
                            borderColor: '#17A597',
                            borderWidth: 1,
                            borderRadius: 4,
                            align: 'center',
                            width: 150,
                            rich: {
                                title: {
                                    align: 'center',
                                    lineHeight: 17,
                                    fontSize: 12,
                                    color: '#fff',
                                    backgroundColor: '#17A597',
                                    width: 150,
                                    height: 20,
                                    borderRadius: [4, 4, 0, 0]
                                },
                                value: {
                                    align: 'center',
                                    height: 25
                                }
                            }
                        },
                        labelLine: {
                            show: true,
                            showAbove: true,
                            length2: 10
                        },
                        labelLayout: function (params) {
                            const positionMap = [
                                // 内蒙古
                                (params) => { return { y: params.rect.y - 20, align: 'center' } },
                                // 上海
                                (params) => { return { x: params.rect.x + 50, align: 'left' } }
                            ]
                            return positionMap[params.dataIndex] && Object.assign({
                                draggable: true
                            }, positionMap[params.dataIndex](params));
                        },
                        emphasis: {
                            label: {
                                show: false
                            }
                        },
                        data: [{
                            name: '内蒙古',
                            value: 118.3,
                            label: {
                                show: true
                            }
                        }, {
                            name: '上海',
                            value: 6.34,
                            label: {
                                show: true
                            }
                        }]
                    }]
                };

                var chart = testHelper.create(echarts, 'main9', {
                    title: [
                        'Draggable label'
                    ],
                    option: option,
                    height: 500
                });
            });
        </script>

        <script>
            require([
                'echarts',
                'extension/dataTool',
                './data/les-miserables.gexf'
            ], function (echarts, dataTool, xml) {
                var graph = dataTool.gexf.parse(xml);
                var categories = [];
                for (var i = 0; i < 9; i++) {
                    categories[i] = {
                        name: '类目' + i
                    };
                }
                graph.nodes.forEach(function (node) {
                    delete node.itemStyle;
                    node.value = node.symbolSize;
                    node.category = node.attributes['modularity_class'];
                });
                graph.links.forEach(function (link) {
                    delete link.lineStyle;
                });
                var option = {
                    legend: [{}],
                    animationDurationUpdate: 1500,
                    animationEasingUpdate: 'quinticInOut',

                    series : [
                        {
                            name: 'Les Miserables',
                            type: 'graph',
                            layout: 'none',
                            data: graph.nodes,
                            links: graph.links,
                            categories: categories,
                            roam: true,
                            draggable: true,

                            label: {
                                show: true,
                                formatter: '{b}',
                                position: 'right'
                            },

                            labelLayout: {
                                hideOverlap: true
                            },

                            emphasis: {
                                label: {
                                    show: true
                                }
                            },
                            lineStyle: {
                                color: 'source',
                                curveness: 0.3
                            },
                            emphasis: {
                                lineStyle: {
                                    width: 10
                                }
                            }
                        }
                    ]
                };

                var chart = testHelper.create(echarts, 'main10', {
                    title: [
                        'Hide overlap in graph zooming.'
                    ],
                    height: 800,
                    option: option
                });
            });
        </script>


        <script>
            require(['echarts', 'map/js/china'], function (echarts) {
                const option = {
                    series: [{
                        type: 'map',
                        map: 'china',
                        roam: true,
                        label: {
                            show: true
                        },
                        labelLayout: {
                            hideOverlap: true
                        }
                    }]
                };

                var chart = testHelper.create(echarts, 'main11', {
                    title: [
                        'Map label should update it\'s position when labelLayout is used.'
                    ],
                    option: option
                });
            });
        </script>


        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            const svg = [
                '<?xml version="1.0" encoding="utf-8"?>',
                '<svg viewBox="-25 0 300 100" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.2" fill-rule="evenodd" xml:space="preserve">',
                '<path name="left_rect" d="M 0,0 L 0,100 100,100 100,0 Z" fill="#765" stroke="rgb(56,93,138)" stroke-width="0" stroke-linecap="square" stroke-linejoin="miter"/>',
                '<path name="right_rect" d="M 150,0 L 150,100 250,100 250,0 Z" fill="#567" stroke="rgb(56,93,138)" stroke-width="0" stroke-linecap="square" stroke-linejoin="miter"/>',
                '</svg>'
            ].join('')

            echarts.registerMap('testGeoSVG_coord1', { svg: svg });

            option = {
                series: [{
                    type: 'map',
                    roam: true,
                    top: 10,
                    bottom: 10,
                    left: 10,
                    right: 10,
                    selectedMode: 'multiple',
                    map: 'testGeoSVG_coord1',
                    select: {
                        itemStyle: {
                            color: 'red'
                        },
                        label: {
                            color: '#fff'
                        }
                    },
                    label: {
                        show: true,
                        fontSize: 30
                    },
                    labelLayout: {
                        hideOverlap: true
                    }
                }]
            };

            var chart = testHelper.create(echarts, 'main12', {
                title: [
                    'Click both rect make them selected (become red)',
                    '(1) zoom to trigger label **hideOverlap**',
                    'zoom back, check labels should be restored',
                    '(2) mouseover one the **right rect** and zoom to trigger label **hideOverlap**',
                    'zoom back, mouseout, check the label should not disappear'
                ],
                option: option,
                height: 200,
            });
        });
        </script>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            const svg = [
                '<?xml version="1.0" encoding="utf-8"?>',
                '<svg xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.2" fill-rule="evenodd" xml:space="preserve">',
                '<path name="left_rect" d="M 0,0 L 0,100 100,100 100,0 Z" fill="#765" stroke="rgb(56,93,138)" stroke-width="0" stroke-linecap="square" stroke-linejoin="miter"/>',
                '</svg>'
            ].join('')

            echarts.registerMap('testGeoSVG_coord2', { svg: svg });

            option = {
                geo: {
                    map: 'testGeoSVG_coord2',
                    roam: true
                }
            };

            var chart = testHelper.create(echarts, 'main13', {
                title: [
                    '(geo coordSys) label displayed only on hover',
                    'zoom: label should keep displayed.'
                ],
                option: option,
                height: 200,
            });
        });
        </script>




    </body>
</html>

