<!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>