<!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>
            table {
                padding: 20px;
            }
            tr {
                padding: 5px;
            }
        </style>



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

        <table>
            <tr>
                <td>
                    <button onclick="randAll()">Random All</button>
                </td>
            </tr>
            <tr>
                <td>
                    symbolSize
                </td>
                <td>
                    <input type="range" min="0" max="1" value="1" step="0.01" id="symbolSize-range">
                    <label id="symbolSize-label">1</label>
                </td>
                <td>
                    <button onclick="rand('symbolSize', 0, 1)">Random</button>
                </td>
            </tr>
            <tr>
                <td>
                    dashArrayX
                </td>
                <td>
                    <input type="range" min="0" max="50" value="10" id="dashArrayX-0-range">
                    <input type="range" min="0" max="50" value="10" id="dashArrayX-1-range">
                    <label id="dashArrayX-label">[10, 10]</label>
                </td>
                <td>
                    <button onclick="rand('dashArrayX-0', 0, 100)">Random</button>
                </td>
            </tr>
            <tr>
                <td>
                    dashArrayY
                </td>
                <td>
                    <input type="range" min="0" max="50" value="10" id="dashArrayY-0-range">
                    <input type="range" min="0" max="50" value="10" id="dashArrayY-1-range">
                    <label id="dashArrayY-label">[10, 10]</label>
                </td>
                <td>
                    <button onclick="rand('dashArrayY-0', 0, 100)">Random</button>
                </td>
            </tr>
            <tr>
                <td>
                    rotation
                </td>
                <td>
                    <input type="range" min="0" max="3.14" value="0" step="0.01" id="rotation-range">
                    <label id="rotation-label">0</label>
                </td>
                <td>
                    <button onclick="rand('rotation', 0, 3.14)">Random</button>
                </td>
            </tr>
        </table>


        <div id="main-sankey"></div>
        <div id="main-sunburst"></div>
        <div id="main-treemap"></div>
        <div id="main-custom-series"></div>

        <div id="main-fruit"></div>
        <div id="main-newspaper"></div>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            var series = [];
            var pieData = [];
            var legendNames = [];
            var itemStyle = {
                decal: {
                    color: 'blue'
                }
            };
            for (var i = 0; i < 12; ++i) {
                var s = {
                    name: 'bar' + i,
                    data: [i * 10 + 100],
                    type: 'bar'
                };
                if (i === 0) {
                    s.itemStyle = itemStyle;
                }
                else if (i === 1) {
                    s.itemStyle = {
                        decal: {
                            symbol: 'none'
                        }
                    };
                }
                else if (i === 2) {
                    s.data = [{
                        value: s.data[0],
                        itemStyle: {
                            decal: {
                                symbol: 'none'
                            }
                        }
                    }];
                }
                series.push(s);

                var p = {
                    name: 'pie' + i,
                    value: i * 5 + 10
                };
                pieData.push(p);

                legendNames.push('bar' + i, 'pie' + i);
            }
            series.push({
                type: 'pie',
                center: ['75%', '50%'],
                data: pieData,
                radius: '50%'
            });

            option = {
                legend: {
                    data: legendNames
                },
                xAxis: {
                    type: 'category',
                    data: ['x']
                },
                yAxis: {
                    type: 'value'
                },
                series: series,
                grid: {
                    left: 50,
                    right: '40%'
                },
                aria: {
                    decal: {
                        show: true
                    }
                }
            };

            var chart = testHelper.create(echarts, 'main0', {
                title: [
                    'It should use decal when aria.show is true',
                    '(1) Each bar and pie piece should have different decal',
                    '(2) The first bar and pie piece decal should be **blue**',
                    '(3) The second and third bar should not have decal'
                ],
                option: option
                // height: 300,
                // buttons: [{text: 'btn-txt', onclick: function () {}}],
                // recordCanvas: true,
            });
        });
        </script>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            var series = [];
            var pieData = [];
            var itemStyle = {
                decal: {
                    color: 'blue',
                    symbol: [['rect', 'circle', 'triangle'], ['circle', 'none']]
                }
            };
            for (var i = 0; i < 6; ++i) {
                var s = {
                    name: 'bar' + i,
                    data: [i * 10 + 100],
                    type: 'bar'
                };
                if (i === 0) {
                    s.itemStyle = itemStyle;
                    s.emphasis = {
                        itemStyle: {
                            decal: {
                                color: 'red'
                            }
                        }
                    }
                }
                series.push(s);

                var p = {
                    name: 'pie' + i,
                    value: i * 5 + 10
                };
                if (i === 0) {
                    p.itemStyle = itemStyle;
                    p.emphasis = {
                        itemStyle: {
                            decal: {
                                color: 'red'
                            }
                        }
                    }
                }
                pieData.push(p);
            }
            series.push({
                type: 'pie',
                center: ['75%', '50%'],
                data: pieData,
                radius: '50%'
            });

            option = {
                xAxis: {
                    type: 'category',
                    data: ['x']
                },
                yAxis: {
                    type: 'value'
                },
                series: series,
                grid: {
                    left: 50,
                    right: '40%'
                },
                aria: {
                    // no decal
                }
            };

            var chart = testHelper.create(echarts, 'main1', {
                title: [
                    'If aria is not enabled, decal can also be enabled',
                    '(1) Only the first bar and pie piece should use decal (be **blue**)',
                    '(2) `aria.label` should be in the HTML'
                ],
                option: option
            });
        });
        </script>





        <script>
        var option;
        var decal = {
            symbolSize: 1,
            dashArrayX: [10, 10],
            dashArrayY: [10, 10],
            rotation: 0,
            maxTileWidth: 256,
            maxTileHeight: 256
        };

        option = {
            xAxis: {
                type: 'category',
                data: ['a', 'b'],
                show: false
            },
            yAxis: {
                type: 'value',
                show: false
            },
            series: [{
                type: 'bar',
                data: [70, 40],
                itemStyle: {
                    decal: decal,
                    borderWidth: 20,
                    borderColor: '#ff0'
                }
            }, {
                type: 'line',
                data: [100, 80],
                itemStyle: {
                    decal: decal,
                    borderWidth: 20,
                    borderColor: '#ff0'
                },
                lineStyle: {
                    width: 20
                },
                symbol: 'circle',
                symbolSize: 200
            }],
            grid: {
                left: 50,
                right: 20
            },
            aria: {
                enabled: true
            },
            animation: false
        };
        var chart;
        require(['echarts'/*, 'map/js/china' */], function (echarts) {

            chart = testHelper.create(echarts, 'main2', {
                title: [
                    'Change parameters and check if it goes into endless loop'
                ],
                option: option
            });

            ['symbolSize', 'dashArrayX-0', 'dashArrayX-1', 'dashArrayY-0', 'dashArrayY-1', 'rotation'].forEach(function (name) {
                var input = document.getElementById(name + '-range');
                var nameSplit = name.split('-');
                var attrName = nameSplit[0];
                var idName = nameSplit[1];
                var label = document.getElementById(attrName + '-label');
                input.addEventListener('change', function (event) {
                    var value = event.target.value;
                    var labelText = +value;
                    var rangeValue = +value;
                    if (idName) {
                        var otherId = idName === '0' ? '1' : '0';
                        var otherValue = document.getElementById(attrName + '-' + otherId + '-range').value;
                        labelText = idName === '0'
                            ? '[' + value + ', ' + otherValue + ']'
                            : '[' + otherValue + ', ' + value + ']';
                        rangeValue = idName === '0'
                            ? [+value, +otherValue]
                            : [+otherValue, +value];
                    }
                    label.innerText = labelText;

                    decal[attrName] = rangeValue;
                    chart.setOption(option);
                });
            });
        });

        function rand(name, min, max) {
            var n = Math.random() * (max - min) + min;
            var value = max < 10 ? Math.floor(n * 100) / 100 : Math.floor(n);

            var nameSplit = name.split('-');
            var attrName = nameSplit[0];
            var idName = nameSplit[1];
            var labelText = value;
            var rangeValue = value;
            var label = document.getElementById(attrName + '-label');
            if (idName) {
                var otherN = Math.random() * (max - min) + min;
                var otherValue = max < 10 ? Math.floor(otherN * 100) / 100 : Math.floor(otherN);
                document.getElementById(attrName + '-1-range').value = otherValue;

                labelText = idName === '0'
                    ? '[' + value + ', ' + otherValue + ']'
                    : '[' + otherValue + ', ' + value + ']';
                rangeValue = idName === '0'
                    ? [+value, +otherValue]
                    : [+otherValue, +value];
            }
            label.innerText = labelText;

            var input = document.getElementById(name + '-range');
            input.value = value;

            decal[attrName] = rangeValue;
            chart.setOption(option);
        }

        function randAll() {
            rand('symbolSize', 0, 1);
            rand('dashArrayX-0', 0, 50);
            rand('dashArrayY-0', 0, 50);
            rand('rotation', 0, 3.14);
        }
        </script>










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


            var testData =  {
                nodes: [
                    {
                        name: 'a',
                        itemStyle: {
                            decal: {
                                color: 'yellow'
                            }
                        }
                    },
                    {
                        name: 'b',
                        depth: 2
                    },
                    {
                        name: 'a1',
                        depth: 4
                    },
                    {
                        name: 'b1'
                    },
                    {
                        name: 'c',
                        depth: 3
                    },
                    {
                        name: 'e',
                        depth: 1
                    }
                ],
                links: [
                    {
                        source: 'a',
                        target: 'a1',
                        value: 5
                    },
                    {
                        source: 'e',
                        target: 'b',
                        value: 3
                    },
                    {
                        source: 'a',
                        target: 'b1',
                        value: 0
                    },
                    {
                        source: 'b1',
                        target: 'a1',
                        value: 1
                    },
                    {
                        source: 'b1',
                        target: 'c',
                        value: 3
                    },
                    {
                        source: 'b',
                        target: 'c',
                        value: 3
                    }
                ]
            };

            var option = {
                aria: {
                    decal: { show: true }
                },
                tooltip: {
                    trigger: 'item',
                    triggerOn: 'mousemove'
                },
                animation: false,
                series: [
                    {
                        type: 'sankey',
                        bottom: '10%',
                        focusNodeAdjacency: true,
                        itemStyle: {
                            decal: {
                                color: 'blue'
                            }
                        },
                        data: testData.nodes,
                        links: testData.links
                    }
                ]
            };

            var chart = testHelper.create(echarts, 'main-sankey', {
                title: [
                    'All sankey nodes should have decal (they are from palette)',
                    'decal color of all except "a" is **blue** (they are from series.itemStyle)',
                    'decal color of "a" is **yellow** (it is from dataItem.itemStyle)'
                ],
                option: option
            });
        });
        </script>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var data = [{
                children: [{
                    value: 5,
                    children: [{
                        value: 1
                    }, {
                        value: 2,
                        children: [{
                            value: 1
                        }]
                    }, {
                        children: [{
                            value: 1
                        }]
                    }]
                }, {
                    value: 10,
                    children: [{
                        value: 6,
                        children: [{
                            value: 1
                        }, {
                            value: 1
                        }, {
                            value: 1
                        }, {
                            value: 1
                        }]
                    }, {
                        value: 2,
                        children: [{
                            value: 1
                        }]
                    }, {
                        children: [{
                            value: 1
                        }]
                    }]
                }]
            }, {
                value: 9,
                children: [{
                    value: 4,
                    children: [{
                        value: 2
                    }, {
                        children: [{
                            value: 1
                        }]
                    }]
                }, {
                    children: [{
                        value: 3,
                        children: [{
                            value: 1
                        }, {
                            value: 1
                        }]
                    }]
                }]
            }, {
                value: 7,
                children: [{
                    children: [{
                        value: 1
                    }, {
                        value: 3,
                        children: [{
                            value: 1
                        }, {
                            value: 1
                        }]
                    }, {
                        value: 2,
                        children: [{
                            value: 1
                        }, {
                            value: 1
                        }]
                    }]
                }]
            }, {
                children: [{
                    value: 6,
                    children: [{
                        value: 1
                    }, {
                        value: 2,
                        children: [{
                            value: 2
                        }]
                    }, {
                        value: 1
                    }]
                }, {
                    value: 3,
                    children: [{
                        value: 1,
                    }, {
                        children: [{
                            value: 1
                        }]
                    }, {
                        value: 1
                    }]
                }]
            }];

            var option = {
                aria: {
                    decal: { show: true }
                },
                series: {
                    type: 'sunburst',
                    data: data
                }
            };

            var chart = testHelper.create(echarts, 'main-sunburst', {
                title: [
                    'All sunburst nodes should have decal (by 1st level) (they are from palette)'
                ],
                option: option
            });
        });
        </script>



        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option = {
                aria: {
                    decal: { show: true }
                },
                series: [{
                    name: 'tm',
                    type: 'treemap',
                    roam: false,
                    label: {
                        position: 'insideRight',
                        emphasis: {
                            show: true
                        }
                    },
                    leafDepth: 1,
                    levels: [{
                        itemStyle: {
                            borderColor: '#333',
                            borderWidth: 4,
                            gapWidth: 2
                        }
                    }, {
                        itemStyle: {
                            borderColor: '#aaa',
                            gapWidth: 2,
                            borderWidth: 2
                        },
                        colorSaturation: [0.2, 0.7]
                    }],
                    data: [{
                        name: 'a',
                        value: 10,
                        children: [{
                            name: 'a1',
                            value: 11,
                            children: [{
                                name: 'a11',
                                value: 111,
                            }, {
                                name: 'a111',
                                value: 1111
                            }, {
                                name: 'a112',
                                value: 1111
                            }, {
                                name: 'a113',
                                value: 111
                            }, {
                                name: 'a114',
                                value: 111
                            }, {
                                name: 'a115',
                                value: 1100
                            }]
                        }]
                    }, {
                        name: 'b',
                        value: 6,
                        children: [{
                            name: 'b1',
                            value: 15,
                            children: [{
                                name: 'b11',
                                value: 120
                            }]
                        }]
                    }]
                }]
            };

            var chart = testHelper.create(echarts, 'main-treemap', {
                title: [
                    'All treemap nodes should have decal (by 1st level) (they are from palette)'
                ],
                option: option
            });
        });
        </script>




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

            function renderItem(params, api) {
                var pos = api.coord([api.value(0), api.value(1)]);
                var paletteColor = api.visual('color');
                var paletteDecal = api.visual('decal');
                if (params.dataIndex === 0) {
                    return {
                        type: 'group',
                        x: pos[0],
                        y: pos[1],
                        children: [{
                            type: 'circle',
                            shape: { cx: 0, cy: 0, r: 30 },
                            style: {
                                fill: 'orange',
                                decal: {
                                    color: 'blue',
                                    dashArrayX: [1, 0],
                                    dashArrayY: [4, 3],
                                    dashLineOffset: 0,
                                    rotation: -Math.PI / 4
                                }
                            }
                        }, {
                            type: 'circle',
                            shape: { cx: 60, cy: 0, r: 30 },
                            style: { fill: 'orange' }
                        }]
                    }
                }
                else {
                    return {
                        type: 'group',
                        x: pos[0],
                        y: pos[1],
                        children: [{
                            type: 'rect',
                            shape: { x: -20, y: -20, width: 40, height: 40 },
                            style: { fill: paletteColor, decal: paletteDecal },
                        }, {
                            type: 'rect',
                            shape: { x: 60 - 20, y: -20, width: 40, height: 40 },
                            style: { fill: paletteColor, decal: paletteDecal },
                        }]
                    }
                }
            }

            var option = {
                xAxis: {
                },
                yAxis: {
                },
                series: [{
                    type: 'custom',
                    renderItem: renderItem,
                    data: [ [11, 22], [55, 22] ]
                }, {
                    type: 'custom',
                    renderItem: renderItem,
                    data: [ [11, 55], [55, 55] ]
                }, {
                    type: 'custom',
                    renderItem: renderItem,
                    data: [ [11, 88], [55, 88] ]
                }],
                aria: {
                    decal: {
                        show: true
                    }
                }
            };

            var chart = testHelper.create(echarts, 'main-custom-series', {
                title: [
                    'All circle/rect should show decals.',
                    'Circel should be in specified decal (in **blue**) and specified color (in **orange**).',
                    'Rect should be in palette decal and palette color'
                ],
                option: option
                // height: 300,
                // buttons: [{text: 'btn-txt', onclick: function () {}}],
                // recordCanvas: true,
            });
        });
        </script>




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

            var d = 30;
            var path = [
                'M12.815,443.027 C28.577,427.267 54.221,427.267 69.981,443.027 C85.736,458.781 85.735,484.423 69.983,500.182 C54.221,515.938 28.574,515.938 12.817,500.187 C-2.939,484.424 -2.94,458.782 12.815,443.027 Z M98.66,335.96 C114.421,351.721 114.421,377.366 98.659,393.127 C82.905,408.881 57.263,408.88 41.505,393.129 C25.75,377.366 25.75,351.719 41.501,335.962 C57.264,320.206 82.905,320.205 98.66,335.96 Z M119.871,414.332 C135.633,398.575 161.275,398.575 177.029,414.33 C192.79,430.091 192.789,455.736 177.029,471.497 C161.275,487.251 135.633,487.25 119.875,471.499 C104.12,455.736 104.12,430.089 119.871,414.332 Z M226.928,385.633 C242.69,369.877 268.332,369.876 284.087,385.631 C299.848,401.392 299.847,427.037 284.087,442.798 C268.333,458.552 242.691,458.551 226.933,442.8 C211.177,427.037 211.177,401.39 226.928,385.633 Z M205.718,307.272 C221.479,323.032 221.479,348.677 205.718,364.439 C189.964,380.193 164.322,380.192 148.564,364.441 C132.808,348.678 132.808,323.031 148.559,307.274 C164.322,291.518 189.963,291.517 205.718,307.272 Z M127.35,286.061 C111.596,301.815 85.954,301.814 70.196,286.063 C54.44,270.3 54.44,244.653 70.191,228.896 C85.954,213.14 111.595,213.139 127.35,228.894 C143.111,244.655 143.11,270.3 127.35,286.061 Z M156.038,179.002 C140.284,194.757 114.642,194.756 98.884,179.004 C83.128,163.241 83.128,137.594 98.879,121.837 C114.642,106.081 140.283,106.08 156.038,121.835 C171.799,137.596 171.798,163.241 156.038,179.002 Z M312.776,278.583 C328.537,294.344 328.537,319.989 312.776,335.75 C297.022,351.504 271.38,351.503 255.622,335.752 C239.866,319.989 239.866,294.342 255.617,278.585 C271.38,262.829 297.021,262.828 312.776,278.583 Z M333.998,356.957 C349.76,341.201 375.402,341.2 391.158,356.955 C406.919,372.716 406.918,398.361 391.158,414.122 C375.403,429.876 349.761,429.875 334.003,414.124 C318.247,398.361 318.247,372.714 333.998,356.957 Z M498,96.401 C506.284,96.401 513,103.118 513,111.402 C513,119.686 506.284,126.402 498,126.402 L407.813,126.402 L372.14,162.075 C369.464,157.907 366.319,153.955 362.677,150.313 C359.069,146.705 355.127,143.554 350.936,140.853 L366.275,125.513 C332.601,120.212 306.265,91.06 306.265,55.167 L306.265,15 C306.265,6.716 312.981,0 321.265,0 L345.365,0 C384.769,0 416.599,31.882 416.599,71.233 L416.599,96.401 L498,96.401 Z M284.31,228.694 C268.554,212.932 268.554,187.284 284.305,171.527 C300.068,155.771 325.709,155.77 341.464,171.525 C357.225,187.286 357.224,212.931 341.464,228.692 C325.71,244.446 300.068,244.445 284.31,228.694 Z M263.092,150.319 C247.337,166.074 221.696,166.073 205.937,150.321 C190.182,134.558 190.182,108.911 205.933,93.154 C221.696,77.398 247.337,77.397 263.092,93.152 C278.853,108.913 278.852,134.558 263.092,150.319 Z M177.25,257.381 C161.489,241.62 161.489,215.975 177.248,200.216 C193.011,184.46 218.652,184.46 234.407,200.214 C250.168,215.975 250.168,241.62 234.407,257.381 C218.652,273.135 193.011,273.135 177.25,257.381 Z M362.678,249.905 C378.438,234.144 404.083,234.145 419.844,249.905 C435.602,265.663 435.602,291.304 419.844,307.062 C404.083,322.823 378.439,322.823 362.678,307.063 C346.92,291.304 346.92,265.663 362.678,249.905 Z',
                'M251.78,126.4 C248.1,100.164 235.969,75.729 217.101,56.862 L210.997,50.758 C230.887,20.228 265.323,-1.42108547e-14 304.4,-1.42108547e-14 L384.733,-1.42108547e-14 C393.017,-1.42108547e-14 399.733,6.716 399.733,15 C399.733,76.426 349.76,126.4 288.333,126.4 L251.78,126.4 Z M174.675,99.289 L149.194,73.806 C143.336,67.948 143.336,58.451 149.194,52.593 C155.052,46.736 164.55,46.736 170.407,52.593 L195.888,78.075 C211.81,93.997 221.19,114.703 222.744,136.95 C217.759,138.31 212.836,139.885 208,141.671 C202.962,139.81 197.83,138.182 192.632,136.784 C191.123,122.622 184.886,109.499 174.675,99.289 Z M269.343,160.667 C350.1,160.667 415.8,226.367 415.8,307.124 C415.8,385.71 338.539,512 269.343,512 C252.999,512 235.815,505.259 218.269,491.966 C212.239,487.429 203.762,487.432 197.695,492 C180.178,505.263 162.995,512 146.657,512 C77.075,512 0.2,385.291 0.2,307.124 C0.2,226.367 65.9,160.667 146.657,160.667 C167.837,160.667 188.883,165.299 208,174.12 C227.117,165.299 248.163,160.667 269.343,160.667 Z',
                'M267.157,227.326 C210.111,269.798 144.193,291.333 71.233,291.334 C49.528,291.334 31.362,306.781 27.153,327.26 C11.883,313.249 -1.13686838e-13,292.601 -1.13686838e-13,264.05 L-1.13686838e-13,256 C-1.13686838e-13,247.716 6.716,241 15,241 L97.486,241 C169.209,241 245.378,223.348 315.718,183.492 C302.506,197.829 286.38,213.014 267.157,227.326 Z M143.533,371.667 C118.72,371.667 98.533,391.854 98.532,416.667 C98.532,417.525 98.548,418.379 98.565,419.232 C73.198,403.981 56.233,376.202 56.233,344.383 L56.233,336.333 C56.233,328.049 62.949,321.333 71.233,321.333 C214.679,321.333 306.098,244.189 354.102,184.97 C348.535,232.069 327.511,275.624 293.501,309.619 C253.47,349.631 200.21,371.667 143.533,371.667 Z M368.225,112.327 L338.983,53.846 C335.278,46.437 338.282,37.426 345.691,33.722 L409.958,1.588 C417.384,-2.125 426.388,0.907 430.083,8.296 C440.992,30.114 445.601,54.489 443.41,78.784 C442.741,86.198 441.441,93.504 439.551,100.635 C432.128,99.26 424.481,98.534 416.666,98.534 L400.6,98.534 C387.897,98.534 376.415,103.833 368.225,112.327 Z M416.667,128.533 C469.233,128.533 512,171.3 512,223.866 C512,383.027 383.225,512 223.866,512 C171.426,512 128.533,469.651 128.533,416.667 C128.533,408.383 135.249,401.667 143.533,401.667 C277.247,401.667 385.6,293.476 385.6,159.6 L385.6,143.533 C385.6,135.249 392.316,128.533 400.6,128.533 L416.667,128.533 Z'
            ]
            var option = {
                series: [{
                    type: 'pie',
                    data: [{
                        value: 110,
                        name: 'Grapes'
                    }, {
                        value: 80,
                        name: 'Apples'
                    }, {
                        value: 40,
                        name: 'Bananas'
                    }],
                    label: {
                        fontSize: 16
                    },
                    labelLine: {
                        lineStyle: {
                            width: 2
                        }
                    }
                }],

                aria: {
                    decal: {
                        show: true,
                        decals: [{
                            dashArrayX: [[d, d], [0, d, d, 0]],
                            dashArrayY: [d, 0],
                            symbol: 'path://' + path[0],
                            symbolKeepAspect: true,
                            symbolSize: 0.8
                        }, {
                            dashArrayX: [[d, d], [0, d, d, 0]],
                            dashArrayY: [d, 0],
                            symbol: 'path://' + path[1],
                            symbolKeepAspect: true,
                            symbolSize: 0.8
                        }, {
                            dashArrayX: [[d, d], [0, d, d, 0]],
                            dashArrayY: [d, 0],
                            symbol: 'path://' + path[2],
                            symbolKeepAspect: true,
                            symbolSize: 0.8
                        }]
                    }
                },

                color: ['#7862A5', '#DD5353', '#FDD344'],

            };

            var chart = testHelper.create(echarts, 'main-fruit', {
                title: [
                    'Symbols should keep aspect ratio'
                ],
                option: option
                // height: 300,
                // buttons: [{text: 'btn-txt', onclick: function () {}}],
                // recordCanvas: true,
            });
        });
        </script>


        <script>
            require(['echarts'/*, 'map/js/china' */], function (echarts) {
                var option = {
                    series: [{
                        type: 'bar',
                        name: 'Apples',
                        data: [108, 26, 39, 24],
                        itemStyle: {
                            borderColor: 'black',
                            borderWidth: 2
                        }
                    }, {
                        type: 'bar',
                        name: 'Oranges',
                        data: [23, 40, 60, 70],
                        itemStyle: {
                            borderColor: 'black',
                            borderWidth: 2
                        }
                    }, {
                        type: 'bar',
                        name: 'Bananas',
                        data: [129, 40, 40, 50],
                        itemStyle: {
                            borderColor: 'black',
                            borderWidth: 2
                        }
                    }, {
                        type: 'bar',
                        name: 'Pears',
                        data: [40, 60, 50, 89],
                        itemStyle: {
                            borderColor: 'black',
                            borderWidth: 2
                        }
                    }],

                    xAxis: {
                        data: ['Q1', 'Q2', 'Q3', 'Q4'],
                        axisLine: {
                            color: 'black'
                        },
                        axisTick: {
                            color: 'black'
                        },
                        axisLabel: {
                            color: 'black'
                        }
                    },
                    yAxis: {
                        axisLine: {
                            color: 'black'
                        },
                        axisTick: {
                            color: 'black'
                        },
                        axisLabel: {
                            color: 'black'
                        },
                        splitLine: {
                            lineStyle: {
                                color: 'black',
                                type: 'dashed'
                            }
                        }
                    },

                    aria: {
                        decal: {
                            show: true,
                            decals: [{
                                dashArrayX: 0,
                                dashArrayY: 0,
                                color: 'black'
                            }, {
                                dashArrayX: 0,
                                dashArrayY: 0,
                                color: 'black'
                            }, {
                                dashArrayX: [1, 0],
                                dashArrayY: [2, 5],
                                symbolSize: 1,
                                rotation: Math.PI / 6,
                                color: 'black'
                            }, {
                                symbol: 'circle',
                                dashArrayX: [[8, 8], [0, 8, 8, 0]],
                                dashArrayY: [6, 0],
                                symbolSize: 0.8,
                                color: 'black'
                            }]
                        }
                    },

                    color: ['white', 'black', 'white', 'white']
                };

                var chart = testHelper.create(echarts, 'main-newspaper', {
                    title: [
                        'Two-color decals'
                    ],
                    option: option
                    // height: 300,
                    // buttons: [{text: 'btn-txt', onclick: function () {}}],
                    // recordCanvas: true,
                });
            });
            </script>



    </body>
</html>

