<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta name="robots" content="noindex, nofollow">
    <title>ECharts2 · Example</title>

    <link rel="shortcut icon" href="../asset/ico/favicon.png">

    <link href="../asset/css/font-awesome.min.css" rel="stylesheet">
    <link href="../asset/css/bootstrap.css" rel="stylesheet">
    <link href="../asset/css/carousel.css" rel="stylesheet">
    <link href="../asset/css/echartsHome.css" rel="stylesheet">
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->

    <script src="./www/js/echarts.js"></script>
    <script src="../asset/js/codemirror.js"></script>
    <script src="../asset/js/javascript.js"></script>

    <link href="../asset/css/codemirror.css" rel="stylesheet">
    <link href="../asset/css/monokai.css" rel="stylesheet">
    <style type="text/css">
        .CodeMirror {
            height: 550px;
        }
    </style>
</head>

<body>
    <!-- Fixed navbar -->
    <div class="navbar navbar-default navbar-fixed-top" role="navigation" id="head"></div>


    <div class="container-fluid">
        <div class="row-fluid example">
            <div id="sidebar-code" class="col-md-4">
                <div class="well sidebar-nav">
                    <div class="nav-header"><a href="#" onclick="autoResize()" class="glyphicon glyphicon-resize-full" id ="icon-resize" ></a>option</div>
                    <textarea id="code" name="code">
dataRangeStyle = [
// 0
    {
        min: 0,
        max: 2000,
        formatter : function(v, v2){
            if (v2 < 1000) { return '低于' + v2}
            else if (v > 1000) { return '高于' + v}
            else { return '中' }
        }
    },
// 1
    {
        orient: 'horizontal', // 'vertical'
        min: 0,
        max: 2000,
        formatter : '{value} 到 {value2}'
    },
// 2
    {
        text:['高','低'],           // 文本，默认为数值文本
        min: 0,
        max: 2000
    },
// 3
    {
        orient: 'horizontal', // 'vertical'
        text:['高','低'],           // 文本，默认为数值文本
        min: 0,
        max: 2000
    },
// 4
    {
        splitNumber: 0,
        min: 0,
        max: 2000
    },
// 5
    {
        orient: 'horizontal', // 'vertical'
        splitNumber: 0,
        min: 0,
        max: 2000
    },
// 6
    {
        splitNumber: 0,
        text:['高','低'],            // 文本，默认为数值文本
        min: 0,
        max: 2000
    },
// 7
    {
        orient: 'horizontal', // 'vertical'
        splitNumber: 0,
        text:['高','低'],            // 文本，默认为数值文本
        min: 0,
        max: 2000
    },
// 8
    {
        calculable : true,
        min: 0,
        max: 2000,
        formatter : function(v) {
            if (v > 1500) {return v + ' (高)'}
            else if (v < 500) {return v + ' (低)'}
            else {return v + ' (中)'};
        }
    },
// 9
    {
        orient: 'horizontal',      // 'vertical'
        calculable : true,
        min: 0,
        max: 2000
    },
// 10
    {
        color:['red','yellow'],    //颜色
        text:['高','低'],            // 文本，默认为数值文本
        calculable : true,
        min: 0,
        max: 2000
    },
// 11
    {
        orient: 'horizontal',      // 'vertical'
        color:['red','yellow'],    //颜色
        text:['高','低'],            // 文本，默认为数值文本
        calculable : true,
        min: 0,
        max: 2000
    },
// 12
    {
        orient: 'vertical',      // 'vertical'
        color: ['red', 'pink'],    //颜色
        splitList: [
            {start: 300000},
            {start: 900, end: 200000},
            {start: 310, end: 1000},
            {start: 200, end: 300},
            {start: 10, end: 200, label: '自定义label: 10 到 200'},
            {start: 5, end: 5},
            {end: 10, color: 'black'}
        ]
    }
]
var cur = curIndex++%dataRangeStyle.length;
option = {
    title:{
        text: '当前样式序号:' + cur,
        subtext: 'NO.' + cur
    },
    dataRange: dataRangeStyle[cur],
    series : [
        {
            name: '',
            type: 'map',
            data:[]
        }
    ]
};
                    </textarea>
              </div><!--/.well -->
            </div><!--/span-->
            <div id="graphic" class="col-md-8">
                <div id="main" class="main" style="height: 530px;"></div>
                <div>
                    <button type="button" class="btn btn-sm btn-success" onclick="refresh(true)">刷 新</button>
                    <span class="text-primary">切换主题</span>
                    <select id="theme-select"></select>
                    &nbsp;&nbsp;&nbsp;
                    <a target="_blank" href="./dataRange2.html">dataRange间隔自定义（customize split）</a>

                    <span id='wrong-message' style="color:red"></span>
                </div>
            </div><!--/span-->
        </div><!--/row-->

        </div><!--/.fluid-container-->

    <footer id="footer"></footer>
    <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="../asset/js/jquery.min.js"></script>
    <script type="text/javascript" src="../asset/js/echartsHome.js"></script>
    <script src="../asset/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        var curIndex = 0;
    </script>
    <script src="../asset/js/echartsExample.js"></script>
    <script>
        function focusGraphic() {
            domCode.className = 'col-md-4 ani';
            domGraphic.className = 'col-md-8 ani';
            refresh();
        }
    </script>
</body>
</html>
