<!DOCTYPE html>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->


<html>
    <head>
        <meta charset="utf-8">
        <script src="lib/simpleRequire.js"></script>
        <script src="lib/config.js"></script>
        <script src="lib/jquery.min.js"></script>
        <script src="lib/facePrint.js"></script>
        <script src="data/pie-texture.js"></script>
        <script src="data/symbols.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="lib/reset.css">
    </head>
    <body>
        <style>
            body {
            }
            .chart {
                position: relative;
                height: 500px;
                max-width: 1000px;
                margin: 0 auto;
            }
            h2 {
                text-align: center;
                font-size: 16px;
                line-height: 30px;
                font-weight: normal;
                background: #dde;
                margin: 0;
            }
            strong {
                color: #971f3c;
            }
        </style>

        <h2>repeatDirection | dynamic</h2>
        <div class="chart" id="paper-and-hill"></div>
        <h2>texture</h2>
        <div class="chart" id="texture"></div>
        <h2>horizontal | no clip | symbolOffset</h2>
        <div class="chart" id="velocity"></div>
        <h2>clip</h2>
        <div class="chart" id="clip"></div>
        <h2>dotted | gradient</h2>
        <div class="chart" id="dotted"></div>

        <script>

            function makeChart(id, option, cb) {
                require([
                    'echarts'
                ], function (echarts) {

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

                    var main = document.getElementById(id);
                    if (main) {
                        var chartMain = document.createElement('div');
                        chartMain.style.cssText = 'height:100%';
                        main.appendChild(chartMain);
                        var chart = echarts.init(chartMain);
                        chart.setOption(option);

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

                        cb && cb(echarts, chart);
                    }

                });
            }

        </script>





















        <script>

            makeChart('paper-and-hill', {
                backgroundColor: '#0f375f',
                tooltip: {},
                legend: {
                    data: ['all'],
                    textStyle: {color: '#ddd'}
                },
                xAxis: [{
                    data: ['圣诞节儿童愿望清单', '', '珠穆朗玛', '乞力马扎罗'],
                    axisTick: {show: false},
                    axisLine: {show: false},
                    axisLabel: {
                        margin: 20,
                        textStyle: {
                            color: '#ddd',
                            fontSize: 14
                        }
                    }
                }],
                yAxis: {
                    splitLine: {show: false},
                    axisTick: {show: false},
                    axisLine: {show: false},
                    axisLabel: {show: false}
                },
                markLine: {
                    z: -1
                },
                animationEasing: 'elasticOut',
                series: [{
                    type: 'pictorialBar',
                    name: 'all',
                    hoverAnimation: true,
                    label: {
                        normal: {
                            show: true,
                            position: 'top',
                            formatter: '{c} m',
                            textStyle: {
                                fontSize: 16,
                                color: '#e54035'
                            }
                        }
                    },
                    data: [{
                        value: 13000,
                        symbol: imageSymbols.paper,
                        symbolRepeat: true,
                        symbolSize: ['130%', '20%'],
                        symbolOffset: [0, 10],
                        symbolMargin: '-30%',
                        animationDelay: function (dataIndex, params) {
                            return params.index * 30;
                        }
                    }, {
                        value: '-',
                        symbol: 'none',
                    }, {
                        value: 8844,
                        symbol: 'image://./data/hill-Qomolangma.png',
                        symbolSize: ['200%', '105%'],
                        symbolPosition: 'end',
                        z: 10
                    }, {
                        value: 5895,
                        symbol: 'image://./data/hill-Kilimanjaro.png',
                        symbolSize: ['200%', '105%'],
                        symbolPosition: 'end'
                    }],
                    markLine: {
                        symbol: ['none', 'none'],
                        label: {
                            normal: {show: false}
                        },
                        lineStyle: {
                            normal: {
                                color: '#e54035',
                                width: 2
                            }
                        },
                        data: [{
                            yAxis: 8844
                        }]
                    }
                }, {
                    name: 'all',
                    type: 'pictorialBar',
                    symbol: 'circle',
                    itemStyle: {
                        normal: {
                            color: '#185491'
                        }
                    },
                    silent: true,
                    symbolOffset: [0, '50%'],
                    z: -10,
                    data: [{
                        value: 1,
                        symbolSize: ['150%', 50]
                    }, {
                        value: '-'
                    }, {
                        value: 1,
                        symbolSize: ['200%', 50]
                    }, {
                        value: 1,
                        symbolSize: ['200%', 50]
                    }]
                }]
            });
        </script>























        <script>

            var img = new Image();
            img.src = window.pieTexture;

            makeChart('texture', {
                backgroundColor: '#13978b',
                tooltip: {},
                xAxis: {
                    data: ['a', 'b', 'c'],
                    axisTick: {show: false}
                },
                yAxis: {
                    splitLine: {show: false},
                    axisTick: {show: false}
                },
                animationEasing: 'elasticOut',
                series: [{
                    name: 'all',
                    type: 'pictorialBar',
                    barCategoryGap: '40%',
                    label: {
                        normal: {
                            show: true,
                            position: 'top',
                            textStyle: {
                                color: '#e54035'
                            }
                        }
                    },
                    hoverAnimation: true,
                    data: [{
                        value: 8844,
                        symbol: 'circle',
                        label: {
                            normal: {formatter: 'symbolPatternSize: default'}
                        },
                        itemStyle: {
                            normal: {
                                color: {
                                    image: img,
                                    repeat: 'repeat'
                                }
                            }
                        }
                    }, {
                        value: 8844,
                        symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
                        label: {
                            normal: {formatter: 'symbolPatternSize: 800'}
                        },
                        symbolPatternSize: 800,
                        itemStyle: {
                            normal: {
                                color: {
                                    image: img,
                                    repeat: 'repeat'
                                }
                            }
                        }
                    }, {
                        value: 8844,
                        symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
                        label: {
                            normal: {formatter: 'symbolPatternSize: 50'}
                        },
                        symbolPatternSize: 50,
                        itemStyle: {
                            normal: {
                                color: {
                                    image: img,
                                    repeat: 'repeat'
                                }
                            }
                        }
                    }]
                }]
            });
        </script>














        <script>

            var rawData = [
                {name: '驯鹿', velocity: 123, symbol: 'reindeer'},
                {name: '火箭', velocity: 60, symbol: 'rocket'},
                {name: '飞机', velocity: 25, symbol: 'plane'},
                {name: '高铁', velocity: 18, symbol: 'train'},
                {name: '轮船', velocity: 12, symbol: 'ship'},
                {name: '汽车', velocity: 9, symbol: 'car'},
                {name: '跑步', velocity: 2, symbol: 'run'},
                {name: '步行', velocity: 1, symbol: 'walk'}
            ];

            // 真实数据：
            // {name: '驯鹿', velocity: 4705882, symbol: 'reindeer'},
            // {name: '火箭', velocity: 38880, symbol: 'thunder'},
            // {name: '飞机', velocity: 1028, symbol: 'plane'},
            // {name: '高铁', velocity: 300, symbol: 'train'},
            // {name: '汽车', velocity: 60, symbol: 'car'},
            // {name: '轮船', velocity: 30, symbol: 'ship'},
            // {name: '跑步', velocity: 15, symbol: 'run'},
            // {name: '步行', velocity: 5, symbol: 'walk'}

            makeChart('velocity', {
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'none'
                    }
                },
                xAxis: {
                    data: rawData.map(function (item) {
                        return item.name;
                    }),
                    axisTick: {show: false},
                    axisLine: {show: false},
                    axisLabel: {
                        textStyle: {
                            color: '#e54035'
                        }
                    }
                },
                yAxis: {
                    splitLine: {show: false},
                    axisTick: {show: false},
                    axisLine: {show: false},
                    axisLabel: {show: false}
                },
                color: ['#e54035'],
                series: [{
                    name: 'hill',
                    type: 'pictorialBar',
                    barCategoryGap: '-50%',
                    symbol: 'path://M0,10 L10,10 L5,0 L0,10 z',
                    itemStyle: {
                        normal: {
                            opacity: 0.5
                        },
                        emphasis: {
                            opacity: 1
                        }
                    },
                    data: rawData.map(function (item) {
                        return item.velocity;
                    }),
                    z: 10
                }, {
                    name: 'glyph',
                    type: 'pictorialBar',
                    symbolPosition: 'end',
                    symbolSize: [25, 25],
                    symbolOffset: [0, -35],
                    itemStyle: {
                        emphasis: {
                            color: 'green'
                        }
                    },
                    data: rawData.map(function (item) {
                        return {
                            value: item.velocity,
                            symbol: pathSymbols[item.symbol]
                        };
                    })
                }]
            });
        </script>













        <script>

            function getBodyImage(index) {
                return pathSymbols['body' + index];
            }

            var bodyMax = 150;

            makeChart('clip', {
                tooltip: {
                },
                legend: {
                    data: ['typeA', 'typeB'],
                    selectedMode: 'single'
                },
                xAxis: {
                    data: ['a', 'b', 'c', 'd', 'e'],
                    axisTick: {show: false},
                    axisLine: {show: false},
                    axisLabel: {
                        textStyle: {
                            color: '#e54035'
                        }
                    }
                },
                yAxis: {
                    max: bodyMax,
                    splitLine: {show: false}
                },
                grid: {
                    left: 'center',
                    top: 100,
                    width: 800,
                    height: 230
                },
                series: [{
                    name: 'typeA',
                    type: 'pictorialBar',
                    symbolClip: true,
                    symbolBoundingData: bodyMax,
                    data: [{
                        value: 123,
                        symbol: getBodyImage(0)
                    }, {
                        value: 34,
                        symbol: getBodyImage(1)
                    }, {
                        value: 101,
                        symbol: getBodyImage(2)
                    }, {
                        value: 89,
                        symbol: getBodyImage(3)
                    }, {
                        value: 72,
                        symbol: getBodyImage(4)
                    }],
                    z: 10
                }, {
                    name: 'typeB',
                    type: 'pictorialBar',
                    symbolClip: true,
                    symbolBoundingData: bodyMax,
                    data: [{
                        value: 12,
                        symbol: getBodyImage(0)
                    }, {
                        value: 44,
                        symbol: getBodyImage(1)
                    }, {
                        value: 131,
                        symbol: getBodyImage(2)
                    }, {
                        value: 33,
                        symbol: getBodyImage(3)
                    }, {
                        value: 142,
                        symbol: getBodyImage(4)
                    }],
                    z: 10
                }, {
                    name: 'full',
                    type: 'pictorialBar',
                    symbolBoundingData: bodyMax,
                    itemStyle: {
                        normal: {
                            color: '#ccc'
                        }
                    },
                    data: [{
                        value: 1,
                        symbol: getBodyImage(0)
                    }, {
                        value: 1,
                        symbol: getBodyImage(1)
                    }, {
                        value: 1,
                        symbol: getBodyImage(2)
                    }, {
                        value: 1,
                        symbol: getBodyImage(3)
                    }, {
                        value: 1,
                        symbol: getBodyImage(4)
                    }]
                }]
            });
        </script>
















        <script>
            makeChart('dotted', function (echarts) {
                var bgColor = '#0f375f';
                var category = [];
                var count = 20;
                var dottedBase = +new Date();
                var lineData = [];
                var barData = [];

                for (var i = 0; i < count; i++) {
                    var date = new Date(dottedBase + 3600 * 24);
                    category.push([
                        date.getFullYear(),
                        date.getMonth() + 1,
                        date.getDate()
                    ].join('-'));
                    var b = Math.random() * 200;
                    var d = Math.random() * 200;
                    barData.push(b)
                    lineData.push(d + b);
                }

                return {
                    backgroundColor: bgColor,
                    tooltip: {
                    },
                    legend: {
                        data: ['line', 'bar'],
                        textStyle: {
                            color: '#ccc'
                        }
                    },
                    xAxis: {
                        data: category,
                        axisLine: {
                            lineStyle: {
                                color: '#ccc'
                            }
                        }
                    },
                    yAxis: {
                        splitLine: {show: false},
                        axisLine: {
                            lineStyle: {
                                color: '#ccc'
                            }
                        }
                    },
                    series: [{
                        name: 'line',
                        type: 'line',
                        smooth: true,
                        showAllSymbol: true,
                        symbol: 'emptyCircle',
                        symbolSize: 15,
                        data: lineData
                    }, {
                        name: 'bar',
                        type: 'bar',
                        barWidth: 10,
                        itemStyle: {
                            normal: {
                                barBorderRadius: 5,
                                color: {
                                    type: 'linear',
                                    x: 0,
                                    y: 0,
                                    x2: 0,
                                    y2: 1,
                                    colorStops: [
                                        {offset: 0, color: '#14c8d4'},
                                        {offset: 1, color: '#43eec6'}
                                    ]
                                }
                            }
                        },
                        data: barData
                    }, {
                        name: 'line',
                        type: 'bar',
                        barWidth: 10,
                        barGap: '-100%',
                        itemStyle: {
                            normal: {
                                color: new echarts.graphic.LinearGradient(
                                    0, 0, 0, 1,
                                    [
                                        {offset: 0, color: 'rgba(20,200,212,0.5)'},
                                        {offset: 0.2, color: 'rgba(20,200,212,0.2)'},
                                        {offset: 1, color: 'rgba(20,200,212,0)'}
                                    ]
                                )
                            }
                        },
                        z: -12,
                        data: lineData
                    }, {
                        name: 'dotted',
                        type: 'pictorialBar',
                        symbol: 'rect',
                        itemStyle: {
                            normal: {
                                color: bgColor
                            }
                        },
                        symbolRepeat: true,
                        symbolSize: [12, 4],
                        symbolMargin: 1,
                        z: -10,
                        data: lineData
                    }]
                };
            });

        </script>












    </body>
</html>