|  | /* | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | /*jshint unused:false*/ | 
|  | /*jshint camelcase:false*/ | 
|  |  | 
|  | function createChart(id, echarts, option, height) { | 
|  | return window.testHelper.createChart(echarts, id, option, height); | 
|  | } | 
|  |  | 
|  | function extend(target, source) { | 
|  | for (var key in source) { | 
|  | if (source.hasOwnProperty(key)) { | 
|  | target[key] = source[key]; | 
|  | } | 
|  | } | 
|  | return target; | 
|  | } | 
|  |  | 
|  | function makeCategoryData(scale, catePrefix, dataCount) { | 
|  | var categoryData = []; | 
|  | var data1 = []; | 
|  | var data2 = []; | 
|  | var data3 = []; | 
|  | scale = scale || 1; | 
|  | catePrefix = catePrefix || 'category'; | 
|  | dataCount = dataCount || 10; | 
|  |  | 
|  | categoryData.push(catePrefix + -1); | 
|  | data1.push('-'); | 
|  | data2.push('-'); | 
|  | data3.push('-'); | 
|  |  | 
|  | for (var i = 0; i < 5; i++) { | 
|  | categoryData.push(catePrefix + i); | 
|  | data1.push(((-Math.random() - 0.2) * scale).toFixed(3)); | 
|  | data2.push(((Math.random() + 0.3) * scale).toFixed(3)); | 
|  | data3.push(((Math.random() + 0.2) * scale).toFixed(3)); | 
|  | } | 
|  |  | 
|  | categoryData.push(catePrefix + i); | 
|  | data1.push('-'); | 
|  | data2.push('-'); | 
|  | data3.push('-'); | 
|  |  | 
|  | for (; i < dataCount - 1; i++) { | 
|  | categoryData.push(catePrefix + i); | 
|  | data1.push(((-Math.random() - 0.2) * scale).toFixed(3)); | 
|  | data2.push(((Math.random() + 0.3) * scale).toFixed(3)); | 
|  | data3.push(((Math.random() + 0.2) * scale).toFixed(3)); | 
|  | } | 
|  | categoryData.push(catePrefix + i); | 
|  | data1.push('-'); | 
|  | data2.push('-'); | 
|  | data3.push('-'); | 
|  |  | 
|  | return {categoryData: categoryData, data1: data1, data2: data2, data3: data3}; | 
|  | } | 
|  |  | 
|  | function makeValueData() { | 
|  | var data1 = []; | 
|  | var data2 = []; | 
|  | var data3 = []; | 
|  |  | 
|  | data1.push(['-', '-']); | 
|  | data2.push(['-', '-']); | 
|  | data3.push(['-', '-']); | 
|  |  | 
|  | for (var i = 0; i < 5; i++) { | 
|  | data1.push([(Math.random() * 1000).toFixed(2), (-Math.random() - 0.4).toFixed(3)]); | 
|  | data2.push([(Math.random() * 1000).toFixed(2), (Math.random() + 1.8).toFixed(3)]); | 
|  | data3.push([(Math.random() * 1000).toFixed(2), (Math.random() + 0.2).toFixed(3)]); | 
|  | } | 
|  |  | 
|  | data1.push(['-', '-']); | 
|  | data2.push(['-', '-']); | 
|  | data3.push(['-', '-']); | 
|  |  | 
|  | for (; i < 10; i++) { | 
|  | data1.push([(Math.random() * 1000).toFixed(2), (-Math.random() - 0.2).toFixed(3)]); | 
|  | data2.push([(Math.random() * 1000).toFixed(2), (Math.random() + 0.3).toFixed(3)]); | 
|  | data3.push([(Math.random() * 1000).toFixed(2), (Math.random() + 0.2).toFixed(3)]); | 
|  | } | 
|  | data1.push(['-', '-']); | 
|  | data2.push(['-', '-']); | 
|  | data3.push(['-', '-']); | 
|  |  | 
|  | return {data1: data1, data2: data2, data3: data3}; | 
|  | } | 
|  |  | 
|  |  | 
|  | function makeTimeData() { | 
|  | var data1 = []; | 
|  | var data2 = []; | 
|  | var data3 = []; | 
|  |  | 
|  | data1.push(['-', '-']); | 
|  | data2.push(['-', '-']); | 
|  | data3.push(['-', '-']); | 
|  |  | 
|  | var day = 3600 * 1000 * 24; | 
|  | var time = +new Date(2017, 2, 15); | 
|  | for (var i = 0; i < 100; i++, time += day) { | 
|  | var d = new Date(time); | 
|  | var dayStr = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join('-'); | 
|  | data1.push([dayStr, (-Math.random() - 0.2).toFixed(3)]); | 
|  | var val2 = (Math.random() + 0.3).toFixed(3); | 
|  | if (i >= 25 && i <= 30) { | 
|  | val2 = '-'; | 
|  | } | 
|  | var val3 = (Math.random() + 0.2).toFixed(3); | 
|  | if (i >= 25 && i <= 30) { | 
|  | val3 = '-'; | 
|  | } | 
|  | data2.push([dayStr, val2]); | 
|  | data3.push([dayStr, val3]); | 
|  | } | 
|  |  | 
|  | return {data1: data1, data2: data2, data3: data3}; | 
|  | } | 
|  |  | 
|  | function getArray(obj, name) { | 
|  | return (obj[name] = obj[name] || []); | 
|  | } | 
|  |  | 
|  | function makeCategoryPolar(option, patterns, inV) { | 
|  | var data = makeCategoryData(); | 
|  | var key = Math.random().toFixed(5); | 
|  |  | 
|  | option.legend = option.legend || { | 
|  | tooltip: {show: true} | 
|  | }; | 
|  | getArray(option.legend, 'data').push('line1' + key, 'line2' + key, 'line3' + key); | 
|  |  | 
|  | var polar = extend({}, patterns.polar); | 
|  | polar.id = 'polar' + key; | 
|  | getArray(option, 'polar').push(polar); | 
|  |  | 
|  | var axisNames = ['radiusAxis', 'angleAxis']; | 
|  | inV && axisNames.reverse(); | 
|  |  | 
|  | getArray(option, axisNames[0]).push(extend({ | 
|  | id: axisNames[0] + key, | 
|  | polarId: polar.id, | 
|  | data: data.categoryData, | 
|  | boundaryGap: false, | 
|  | splitArea: { | 
|  | show: true | 
|  | } | 
|  | }, patterns[axisNames[0]])); | 
|  |  | 
|  | getArray(option, axisNames[1]).push(extend({ | 
|  | id: axisNames[1] + key, | 
|  | polarId: polar.id, | 
|  | nameLocation: 'middle', | 
|  | nameGap: 40 | 
|  | }, patterns[axisNames[1]])); | 
|  |  | 
|  | var patternsSeries = patterns.series || []; | 
|  |  | 
|  | getArray(option, 'series').push( | 
|  | extend({ | 
|  | id: 'line1-id' + key, | 
|  | name: 'line1' + key, | 
|  | coordinateSystem: 'polar', | 
|  | polarId: polar.id, | 
|  | type: 'line', | 
|  | symbolSize: 10, | 
|  | data: data.data1, | 
|  | connectNulls: true | 
|  | }, patternsSeries[0]), | 
|  | extend({ | 
|  | id: 'line2-id' + key, | 
|  | name: 'line2' + key, | 
|  | coordinateSystem: 'polar', | 
|  | polarId: polar.id, | 
|  | type: 'line', | 
|  | symbolSize: 10, | 
|  | data: data.data2 | 
|  | }, patternsSeries[1]), | 
|  | extend({ | 
|  | id: 'line3-id' + key, | 
|  | name: 'line3' + key, | 
|  | coordinateSystem: 'polar', | 
|  | polarId: polar.id, | 
|  | type: 'line', | 
|  | symbolSize: 10, | 
|  | symbol: 'circle', | 
|  | data: data.data3, | 
|  | label: { | 
|  | normal: { | 
|  | show: true | 
|  | } | 
|  | } | 
|  | }, patternsSeries[2]) | 
|  | ); | 
|  | } | 
|  |  | 
|  | function makeCategoryGrid(option, patterns, inV, dataCount, seriesType, catePrefix) { | 
|  | var data = makeCategoryData(null, catePrefix, dataCount); | 
|  | var key = Math.random().toFixed(5); | 
|  | seriesType = seriesType || 'line'; | 
|  |  | 
|  | option.legend = option.legend || { | 
|  | tooltip: {show: true} | 
|  | }; | 
|  | getArray(option.legend, 'data').push('line1' + key, 'line2' + key, 'line3' + key); | 
|  |  | 
|  | var grid = extend({}, patterns.grid); | 
|  | grid.id = 'grid' + key; | 
|  | getArray(option, 'grid').push(grid); | 
|  |  | 
|  | var axisNames = ['xAxis', 'yAxis']; | 
|  | inV && axisNames.reverse(); | 
|  |  | 
|  | getArray(option, axisNames[0]).push(extend({ | 
|  | id: axisNames[0] + key, | 
|  | gridId: grid.id, | 
|  | data: data.categoryData, | 
|  | boundaryGap: false, | 
|  | splitArea: { | 
|  | show: true | 
|  | } | 
|  | }, patterns[axisNames[0]])); | 
|  |  | 
|  | getArray(option, axisNames[1]).push(extend({ | 
|  | id: axisNames[1] + key, | 
|  | gridId: grid.id, | 
|  | nameLocation: 'middle', | 
|  | nameGap: 40 | 
|  | }, patterns[axisNames[1]])); | 
|  |  | 
|  | var patternsSeries = patterns.series || []; | 
|  |  | 
|  | getArray(option, 'series').push( | 
|  | extend({ | 
|  | id: 'line1-id' + key, | 
|  | name: 'line1' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: seriesType, | 
|  | symbolSize: 10, | 
|  | data: data.data1, | 
|  | smooth: true, | 
|  | connectNulls: true | 
|  | }, patternsSeries[0]), | 
|  | extend({ | 
|  | id: 'line2-id' + key, | 
|  | name: 'line2' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: seriesType, | 
|  | symbolSize: 10, | 
|  | data: data.data2, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[1]), | 
|  | extend({ | 
|  | id: 'line3-id' + key, | 
|  | name: 'line3' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: seriesType, | 
|  | symbolSize: 10, | 
|  | symbol: 'circle', | 
|  | data: data.data3, | 
|  | label: { | 
|  | normal: { | 
|  | show: true | 
|  | } | 
|  | }, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[2]) | 
|  | ); | 
|  | } | 
|  |  | 
|  | function makeValueGrid(option, patterns) { | 
|  | var data = makeValueData(); | 
|  | var key = Math.random().toFixed(5); | 
|  |  | 
|  | option.legend = option.legend || { | 
|  | tooltip: {show: true} | 
|  | }; | 
|  | getArray(option.legend, 'data').push('line1' + key, 'line2' + key, 'line3' + key); | 
|  |  | 
|  | var grid = extend({}, patterns.grid); | 
|  | grid.id = 'grid' + key; | 
|  | getArray(option, 'grid').push(grid); | 
|  |  | 
|  | getArray(option, 'xAxis').push(extend({ | 
|  | id: 'xAxis' + key, | 
|  | gridId: grid.id, | 
|  | type: 'value', | 
|  | splitArea: { | 
|  | show: true | 
|  | } | 
|  | }, patterns['xAxis'])); | 
|  |  | 
|  | getArray(option, 'yAxis').push(extend({ | 
|  | id: 'yAxis' + key, | 
|  | gridId: grid.id, | 
|  | nameLocation: 'middle', | 
|  | nameGap: 40 | 
|  | }, patterns['yAxis'])); | 
|  |  | 
|  | var patternsSeries = patterns.series || []; | 
|  |  | 
|  | getArray(option, 'series').push( | 
|  | extend({ | 
|  | id: 'scatter1-id' + key, | 
|  | name: 'scatter1' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'scatter', | 
|  | symbolSize: 10, | 
|  | data: data.data1, | 
|  | smooth: true, | 
|  | connectNulls: true | 
|  | }, patternsSeries[0]), | 
|  | extend({ | 
|  | id: 'scatter2-id' + key, | 
|  | name: 'scatter2' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'scatter', | 
|  | symbolSize: 10, | 
|  | data: data.data2, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[1]), | 
|  | extend({ | 
|  | id: 'scatter3-id' + key, | 
|  | name: 'scatter3' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'scatter', | 
|  | symbolSize: 10, | 
|  | symbol: 'circle', | 
|  | data: data.data3, | 
|  | label: { | 
|  | normal: { | 
|  | show: true, | 
|  | textStyle: {color: '#333'} | 
|  | } | 
|  | }, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[2]) | 
|  | ); | 
|  | } | 
|  |  | 
|  |  | 
|  | function makeTimeGrid(option, patterns) { | 
|  | var data = makeTimeData(); | 
|  | var key = Math.random().toFixed(5); | 
|  |  | 
|  | option.legend = option.legend || { | 
|  | tooltip: {show: true} | 
|  | }; | 
|  | getArray(option.legend, 'data').push('scatter1' + key, 'scatter2' + key, 'scatter3' + key); | 
|  |  | 
|  | var grid = extend({}, patterns.grid); | 
|  | grid.id = 'grid' + key; | 
|  | getArray(option, 'grid').push(grid); | 
|  |  | 
|  | getArray(option, 'xAxis').push(extend({ | 
|  | id: 'xAxis' + key, | 
|  | type: 'time', | 
|  | gridId: grid.id, | 
|  | splitArea: { | 
|  | show: true | 
|  | } | 
|  | }, patterns['xAxis'])); | 
|  |  | 
|  | getArray(option, 'yAxis').push(extend({ | 
|  | id: 'yAxis' + key, | 
|  | gridId: grid.id, | 
|  | nameLocation: 'middle', | 
|  | nameGap: 40 | 
|  | }, patterns['yAxis'])); | 
|  |  | 
|  | var patternsSeries = patterns.series || []; | 
|  |  | 
|  | getArray(option, 'series').push( | 
|  | extend({ | 
|  | id: 'scatter1-id' + key, | 
|  | name: 'scatter1' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'line', | 
|  | symbolSize: 5, | 
|  | label: { | 
|  | emphasis: { | 
|  | show: true, | 
|  | textStyle: { | 
|  | color: '#333' | 
|  | } | 
|  | } | 
|  | }, | 
|  | data: data.data1, | 
|  | smooth: true, | 
|  | connectNulls: true | 
|  | }, patternsSeries[0]), | 
|  | extend({ | 
|  | id: 'scatter2-id' + key, | 
|  | name: 'scatter2' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'line', | 
|  | symbolSize: 5, | 
|  | label: { | 
|  | emphasis: { | 
|  | show: true, | 
|  | textStyle: { | 
|  | color: '#333' | 
|  | } | 
|  | } | 
|  | }, | 
|  | data: data.data2, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[1]), | 
|  | extend({ | 
|  | id: 'scatter3-id' + key, | 
|  | name: 'scatter3' + key, | 
|  | xAxisId: 'xAxis' + key, | 
|  | yAxisId: 'yAxis' + key, | 
|  | type: 'line', | 
|  | symbolSize: 5, | 
|  | symbol: 'circle', | 
|  | data: data.data3, | 
|  | label: { | 
|  | emphasis: { | 
|  | show: true, | 
|  | textStyle: { | 
|  | color: '#333' | 
|  | } | 
|  | } | 
|  | }, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[2]) | 
|  | ); | 
|  | } | 
|  |  | 
|  | function makeCategoryCartesian(option, patterns, xAxisIndex, yAxisIndex, scale, catePrefix) { | 
|  | var data = makeCategoryData(scale, catePrefix); | 
|  | var key = Math.random().toFixed(5); | 
|  |  | 
|  | var axisColors = [ | 
|  | '#2f4554', '#c23531', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3' | 
|  | ]; | 
|  | if (option.___test_axisColorIndex == null) { | 
|  | option.___test_axisColorIndex = 0; | 
|  | } | 
|  |  | 
|  | option.legend = option.legend || { | 
|  | tooltip: {show: true} | 
|  | }; | 
|  | getArray(option.legend, 'data').push('line1' + key, 'line2' + key, 'line3' + key); | 
|  |  | 
|  | var xAxes = getArray(option, 'xAxis'); | 
|  | var yAxes = getArray(option, 'yAxis'); | 
|  |  | 
|  | if (!xAxes[xAxisIndex]) { | 
|  | xAxes[xAxisIndex] = extend({ | 
|  | data: data.categoryData, | 
|  | boundaryGap: false, | 
|  | splitArea: { | 
|  | show: true | 
|  | }, | 
|  | axisLine: { | 
|  | lineStyle: { | 
|  | color: axisColors[option.___test_axisColorIndex++] | 
|  | } | 
|  | } | 
|  | }, patterns['xAxis']); | 
|  | } | 
|  | if (!yAxes[yAxisIndex]) { | 
|  | yAxes[yAxisIndex] = extend({ | 
|  | nameLocation: 'middle', | 
|  | nameGap: 40, | 
|  | axisLine: { | 
|  | lineStyle: { | 
|  | color: axisColors[option.___test_axisColorIndex++] | 
|  | } | 
|  | } | 
|  | }, patterns['yAxis']); | 
|  | } | 
|  |  | 
|  | var patternsSeries = patterns.series || []; | 
|  |  | 
|  | getArray(option, 'series').push( | 
|  | extend({ | 
|  | id: 'line1-id' + key, | 
|  | name: 'line1' + key, | 
|  | xAxisIndex: xAxisIndex, | 
|  | yAxisIndex: yAxisIndex, | 
|  | type: 'line', | 
|  | symbolSize: 10, | 
|  | itemStyle: { | 
|  | normal: { | 
|  | color: yAxes[yAxisIndex].axisLine.lineStyle.color | 
|  | } | 
|  | }, | 
|  | data: data.data1, | 
|  | smooth: true, | 
|  | connectNulls: true | 
|  | }, patternsSeries[0]), | 
|  | extend({ | 
|  | id: 'line2-id' + key, | 
|  | name: 'line2' + key, | 
|  | xAxisIndex: xAxisIndex, | 
|  | yAxisIndex: yAxisIndex, | 
|  | itemStyle: { | 
|  | normal: { | 
|  | color: yAxes[yAxisIndex].axisLine.lineStyle.color | 
|  | } | 
|  | }, | 
|  | type: 'line', | 
|  | symbolSize: 10, | 
|  | data: data.data2, | 
|  | connectNulls: true, | 
|  | smooth: true | 
|  | }, patternsSeries[1]) | 
|  | ); | 
|  | } |