<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="./vendors/jquery/jquery.js"></script>
    <script type="text/javascript" src="./vendors/bootstrap/js/bootstrap.js"></script>
    <script type="text/javascript" src="./vendors/lodash.js"></script>
    <script type="text/javascript" src="./vendors/dat.gui.min.js"></script>
    <script type="text/javascript" src="./vendors/echarts/echarts.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="./vendors/echarts-gl/echarts-gl.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="./vendors/echarts-stat/ecStat.min.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="./vendors/echarts/map/js/china.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="./vendors/echarts/map/js/world.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="./vendors/echarts/extension/dataTool.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&amp;ak=KOmVjPVUAey1G2E8zNhPiuQ6QiEmAwZu"></script>
    <script type="text/javascript" src="./vendors/echarts/extension/bmap.js?_v_=1510583857922"></script>
    <script type="text/javascript" src="../tool/seedrandom.js"></script>
    <style>
        html, body, #viewport {
            margin: 0;
            height: 100%;
            width: 100%;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div id="viewport"></div>
<script>
    // Params parser
    var params = {};
    (location.search || '').substr(1).split('&').forEach(function (item) {
        var kv = item.split('=');
        params[kv[0]] = kv[1];
    });
    var myChart = echarts.init(document.getElementById('viewport'), params.t || null);
    var app = {};
</script>
<script>
    var myrng = new Math.seedrandom('echarts');
    Math.random = function () {
        return myrng();
    };

    if (params.c) {
        if (!window.ROOT_PATH) {
            // When visiting `screenshot.html` In browser.
            console.error('No ROOT_PATH specified. Use default ROOT_PATH "./"');
            window.ROOT_PATH = './';
        }
        console.log('ROOT_PATH', window.ROOT_PATH);
        var sourceFolder = params.s || 'data';
        var scriptTag = document.createElement('script');
        scriptTag.async = false;
        scriptTag.src = `./${sourceFolder}/${params.c}.js`
        document.body.appendChild(scriptTag);
        scriptTag.onload = function () {
            if (typeof option !== 'undefined' && option) {
                if (option.series) {
                    if (!(option.series instanceof Array)) {
                        option.series = [option.series];
                    }
                    option.series.forEach(function (seriesOpt) {
                        if (seriesOpt.type === 'graph') {
                            seriesOpt.force = seriesOpt.force || {};
                            seriesOpt.force.layoutAnimation = false;
                        }
                        seriesOpt.progressive = 0;
                        seriesOpt.animation = false;
                    });
                }
                option.animation = false;
                option.textStyle = {
                    fontFamily: 'noto-thin',
                    fontSize: 14
                };
                myChart.setOption(option);
            }
        }
    }
</script>
</body>
</html>