| <!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'> | 
 |         <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
 |         <script src="lib/simpleRequire.js"></script> | 
 |         <script src="lib/config.js"></script> | 
 |         <script src='lib/jquery.min.js'></script> | 
 |         <script src="../dist/echarts.js"></script> | 
 |         <script src="lib/testHelper.js"></script> | 
 |         <link rel="stylesheet" href="lib/reset.css" /> | 
 |     </head> | 
 |     <body> | 
 |         <style> | 
 |         </style> | 
 |  | 
 |         <div id="main0"></div> | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |  | 
 |         require([ | 
 |             'echarts', 'ecStat', 'ecSimpleTransform', 'ecSimpleOptionPlayer', | 
 |             'data/life-expectancy-table.json' | 
 |         ], function (echarts, ecStat, ecSimpleTransform, ecSimpleOptionPlayer, rawData) { | 
 |  | 
 |             echarts.registerTransform(ecSimpleTransform.aggregate); | 
 |             echarts.registerTransform(ecSimpleTransform.id); | 
 |  | 
 |             const COLORS = [ | 
 |                 '#37A2DA', '#e06343', '#37a354', '#b55dba', '#b5bd48', '#8378EA', '#96BFFF' | 
 |             ]; | 
 |             var COUNTRY_A = 'Germany'; | 
 |             var COUNTRY_B = 'France'; | 
 |             const CONTENT_COLORS = { | 
 |                 [COUNTRY_A]: '#37a354', | 
 |                 [COUNTRY_B]: '#e06343' | 
 |             }; | 
 |             const Z2 = { | 
 |                 [COUNTRY_A]: 1, | 
 |                 [COUNTRY_B]: 2 | 
 |             } | 
 |  | 
 |             // const COLORS = [ | 
 |             //     {name: 'Income', index: 0, text: '人均收入', unit: '美元'}, | 
 |             //     {name: 'LifeExpectancy', index: 1, text: '人均寿命', unit: '岁'}, | 
 |             //     {name: 'Population', index: 2, text: '总人口', unit: ''}, | 
 |             //     {name: 'Country', index: 3, text: '国家', unit: ''} | 
 |             // ]; | 
 |  | 
 |             var RAW_DATA_DIMENSIONS = ['Income', 'Life Expectancy', 'Population', 'Country', 'Year']; | 
 |             var ID_RAW_DATA_DIMENSIONS = ['Income', 'Life Expectancy', 'Population', 'Country', 'Year', 'Id']; | 
 |             var SUM_INCOME_DIMENSIONS = ['Income', 'Country']; | 
 |             var ANIMATION_DURATION_UPDATE = 1000; | 
 |             var AXIS_NAME_STYLE = { | 
 |                 nameGap: 25, | 
 |                 nameTextStyle: { | 
 |                     fontSize: 20 | 
 |                 }, | 
 |             }; | 
 |  | 
 |             var baseOption = { | 
 |                 animationDurationUpdate: ANIMATION_DURATION_UPDATE, | 
 |                 dataset: [{ | 
 |                     id: 'RawData', | 
 |                     source: rawData | 
 |                 }, { | 
 |                     id: 'IdRawData', | 
 |                     fromDatasetId: 'RawData', | 
 |                     transform: [{ | 
 |                         type: 'filter', | 
 |                         config: { | 
 |                             dimension: 'Year', gte: 1950 | 
 |                         } | 
 |                     }, { | 
 |                         type: 'ecSimpleTransform:id', | 
 |                         config: { | 
 |                             dimensionIndex: ID_RAW_DATA_DIMENSIONS.indexOf('Id'), | 
 |                             dimensionName: 'Id' | 
 |                         } | 
 |                     }] | 
 |                 }, { | 
 |                     id: 'CountryABData', | 
 |                     fromDatasetId: 'IdRawData', | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { | 
 |                             or: [{ | 
 |                                 dimension: 'Country', '=': COUNTRY_A | 
 |                             }, { | 
 |                                 dimension: 'Country', '=': COUNTRY_B | 
 |                             }] | 
 |                         } | 
 |                     } | 
 |                 }, { | 
 |                     id: 'CountryABSumIncome', | 
 |                     fromDatasetId: 'CountryABData', | 
 |                     transform: { | 
 |                         type: 'ecSimpleTransform:aggregate', | 
 |                         config: { | 
 |                             resultDimensions: [ | 
 |                                 { from: 'Income', method: 'sum' }, | 
 |                                 { from: 'Country' } | 
 |                             ], | 
 |                             groupBy: 'Country' | 
 |                         } | 
 |                     } | 
 |                 }], | 
 |                 tooltip: {} | 
 |             }; | 
 |  | 
 |             var optionCreators = { | 
 |  | 
 |                 'CountryAB_Year_Income_Bar': function (datasetId, onlyCountry) { | 
 |                     return { | 
 |                         xAxis: { | 
 |                             type: 'category' | 
 |                         }, | 
 |                         yAxis: { | 
 |                             name: 'Income', | 
 |                             ...AXIS_NAME_STYLE | 
 |                         }, | 
 |                         series: { | 
 |                             type: 'custom', | 
 |                             coordinateSystem: 'cartesian2d', | 
 |                             datasetId: datasetId, | 
 |                             encode: { | 
 |                                 x: 'Year', | 
 |                                 y: 'Income', | 
 |                                 itemName: 'Year', | 
 |                                 tooltip: ['Income'], | 
 |                             }, | 
 |                             renderItem: function (params, api) { | 
 |                                 var valPos = api.coord([api.value('Year'), api.value('Income')]); | 
 |                                 var basePos = api.coord([api.value('Year'), 0]); | 
 |                                 var width = api.size([1, 0])[0] * 0.9; | 
 |  | 
 |                                 var country = api.value('Country'); | 
 |                                 if (onlyCountry != null && onlyCountry !== country) { | 
 |                                     return; | 
 |                                 } | 
 |  | 
 |                                 return { | 
 |                                     type: 'group', | 
 |                                     children: [{ | 
 |                                         type: 'rect', | 
 |                                         transition: ['shape', 'style'], | 
 |                                         shape: { | 
 |                                             x: basePos[0], | 
 |                                             y: basePos[1], | 
 |                                             width: width, | 
 |                                             height: valPos[1] - basePos[1] | 
 |                                         }, | 
 |                                         z2: Z2[country], | 
 |                                         style: { | 
 |                                             fill: CONTENT_COLORS[country], | 
 |                                             opacity: 0.8 | 
 |                                         } | 
 |                                     }] | 
 |                                 }; | 
 |                             } | 
 |                         } | 
 |                     }; | 
 |                 }, | 
 |  | 
 |                 'CountryAB_Year_Population_Bar': function (datasetId, onlyCountry) { | 
 |                     return { | 
 |                         xAxis: { | 
 |                             type: 'category' | 
 |                         }, | 
 |                         yAxis: { | 
 |                             name: 'Population', | 
 |                             ...AXIS_NAME_STYLE | 
 |                         }, | 
 |                         series: { | 
 |                             type: 'custom', | 
 |                             coordinateSystem: 'cartesian2d', | 
 |                             datasetId: datasetId, | 
 |                             encode: { | 
 |                                 x: 'Year', | 
 |                                 y: 'Population', | 
 |                                 itemName: 'Year', | 
 |                                 tooltip: ['Population'], | 
 |                             }, | 
 |                             renderItem: function (params, api) { | 
 |                                 var valPos = api.coord([api.value('Year'), api.value('Population')]); | 
 |                                 var basePos = api.coord([api.value('Year'), 0]); | 
 |                                 var width = api.size([1, 0])[0] * 0.9; | 
 |  | 
 |                                 var country = api.value('Country'); | 
 |                                 if (onlyCountry != null && onlyCountry !== country) { | 
 |                                     return; | 
 |                                 } | 
 |  | 
 |                                 return { | 
 |                                     type: 'group', | 
 |                                     children: [{ | 
 |                                         type: 'rect', | 
 |                                         transition: ['shape', 'style'], | 
 |                                         shape: { | 
 |                                             x: basePos[0], | 
 |                                             y: basePos[1], | 
 |                                             width: width, | 
 |                                             height: valPos[1] - basePos[1] | 
 |                                         }, | 
 |                                         style: { | 
 |                                             fill: CONTENT_COLORS[country] | 
 |                                         } | 
 |                                     }] | 
 |                                 }; | 
 |                             } | 
 |                         } | 
 |                     }; | 
 |                 }, | 
 |  | 
 |                 'CountryAB_Income_Population_Scatter': function (datasetId, onlyCountry) { | 
 |                     return { | 
 |                         xAxis: { | 
 |                             name: 'Income', | 
 |                             ...AXIS_NAME_STYLE, | 
 |                             scale: true | 
 |                         }, | 
 |                         yAxis: { | 
 |                             name: 'Population', | 
 |                             ...AXIS_NAME_STYLE, | 
 |                             scale: true | 
 |                         }, | 
 |                         series: { | 
 |                             type: 'custom', | 
 |                             coordinateSystem: 'cartesian2d', | 
 |                             datasetId: datasetId, | 
 |                             encode: { | 
 |                                 x: 'Income', | 
 |                                 y: 'Population', | 
 |                                 itemName: ['Year'], | 
 |                                 tooltip: ['Income', 'Population', 'Country'] | 
 |                             }, | 
 |                             renderItem: function (params, api) { | 
 |                                 var pos = api.coord([api.value('Income'), api.value('Population')]); | 
 |  | 
 |                                 var country = api.value('Country'); | 
 |                                 if (onlyCountry != null && onlyCountry !== country) { | 
 |                                     return; | 
 |                                 } | 
 |  | 
 |                                 return { | 
 |                                     type: 'group', | 
 |                                     children: [{ | 
 |                                         type: 'circle', | 
 |                                         transition: ['shape', 'style'], | 
 |                                         shape: { | 
 |                                             cx: pos[0], | 
 |                                             cy: pos[1], | 
 |                                             r: 10 | 
 |                                         }, | 
 |                                         style: { | 
 |                                             fill: CONTENT_COLORS[country], | 
 |                                             lineWidth: 1, | 
 |                                             stroke: '#333', | 
 |                                             opacity: 1, | 
 |                                             enterFrom: { | 
 |                                                 opacity: 0 | 
 |                                             } | 
 |                                         } | 
 |                                     }] | 
 |                                 }; | 
 |                             } | 
 |                         } | 
 |                     }; | 
 |                 }, | 
 |  | 
 |  | 
 |                 'CountryAB_Income_Sum_Bar': function (datasetId) { | 
 |                     return { | 
 |                         xAxis: { | 
 |                             name: 'Income', | 
 |                             ...AXIS_NAME_STYLE | 
 |                         }, | 
 |                         yAxis: { | 
 |                             type: 'category' | 
 |                         }, | 
 |                         series: { | 
 |                             type: 'custom', | 
 |                             coordinateSystem: 'cartesian2d', | 
 |                             datasetId: datasetId, | 
 |                             encode: { | 
 |                                 x: 'Income', | 
 |                                 y: 'Country', | 
 |                                 itemName: ['Country'], | 
 |                                 tooltip: ['Income'] | 
 |                             }, | 
 |                             renderItem: function (params, api) { | 
 |                                 var country = api.ordinalRawValue('Country'); | 
 |                                 var valPos = api.coord([api.value('Income'), country]); | 
 |                                 var basePos = api.coord([0, country]); | 
 |                                 var height = api.size([0, 1])[1] * 0.4; | 
 |  | 
 |                                 return { | 
 |                                     type: 'group', | 
 |                                     children: [{ | 
 |                                         type: 'rect', | 
 |                                         transition: ['shape', 'style'], | 
 |                                         shape: { | 
 |                                             x: basePos[0], | 
 |                                             y: valPos[1] - height / 2, | 
 |                                             width: valPos[0] - basePos[0], | 
 |                                             height: height | 
 |                                         }, | 
 |                                         style: { | 
 |                                             fill: CONTENT_COLORS[country] | 
 |                                             // lineWidth: 0, | 
 |                                             // stroke: '#333', | 
 |                                             // opacity: 1, | 
 |                                             // enterFrom: { | 
 |                                             //     opacity: 0 | 
 |                                             // } | 
 |                                         } | 
 |                                     }] | 
 |                                 }; | 
 |                             } | 
 |                         } | 
 |                     }; | 
 |                 } | 
 |  | 
 |             }; | 
 |  | 
 |             var player = ecSimpleOptionPlayer.create({ | 
 |                 chart: function () { | 
 |                     return chart; | 
 |                 }, | 
 |                 seriesIndex: 0, | 
 |                 replaceMerge: ['xAxis', 'yAxis'], | 
 |                 dataMeta: { | 
 |                     'IdRawData': { | 
 |                         dimensions: ID_RAW_DATA_DIMENSIONS, | 
 |                         uniqueDimension: 'Id' | 
 |                     }, | 
 |                     'CountryABData': { | 
 |                         dimensions: ID_RAW_DATA_DIMENSIONS, | 
 |                         uniqueDimension: 'Id' | 
 |                     }, | 
 |                     'CountryABSumIncome': { | 
 |                         dimensions: SUM_INCOME_DIMENSIONS, | 
 |                         uniqueDimension: 'Country' | 
 |                     } | 
 |                 }, | 
 |                 optionList: [{ | 
 |                     dataMetaKey: 'CountryABData', | 
 |                     option: optionCreators['CountryAB_Year_Income_Bar']('CountryABData', COUNTRY_A) | 
 |                 }, { | 
 |                     dataMetaKey: 'CountryABData', | 
 |                     option: optionCreators['CountryAB_Year_Population_Bar']('CountryABData', COUNTRY_A) | 
 |                 }, { | 
 |                     dataMetaKey: 'CountryABData', | 
 |                     option: optionCreators['CountryAB_Income_Population_Scatter']('CountryABData', COUNTRY_A) | 
 |                 }, { | 
 |                     dataMetaKey: 'CountryABData', | 
 |                     option: optionCreators['CountryAB_Income_Population_Scatter']('CountryABData') | 
 |                 }, { | 
 |                     dataMetaKey: 'CountryABSumIncome', | 
 |                     option: optionCreators['CountryAB_Income_Sum_Bar']('CountryABSumIncome') | 
 |                 }, { | 
 |                     dataMetaKey: 'CountryABData', | 
 |                     option: optionCreators['CountryAB_Year_Income_Bar']('CountryABData') | 
 |                 }] | 
 |             }); | 
 |  | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main0', { | 
 |                 title: [ | 
 |                     'Test: buttons, should morph animation merge/split.', | 
 |                     'Test: click buttons **before animation finished**, should no blink.', | 
 |                     'Test: click buttons **twice**, should no blink.' | 
 |                 ], | 
 |                 option: baseOption, | 
 |                 lazyUpdate: true, | 
 |                 height: 600, | 
 |                 buttons: [{ | 
 |                     text: 'next', | 
 |                     onclick: function () { | 
 |                         player.next(); | 
 |                     } | 
 |                 }, { | 
 |                     text: 'previous', | 
 |                     onclick: function () { | 
 |                         player.previous(); | 
 |                     } | 
 |                 }] | 
 |             }); | 
 |  | 
 |             player.next(); | 
 |  | 
 |         }); | 
 |  | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |     </body> | 
 | </html> |