| <!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="lib/facePrint.js"></script> | 
 |         <script src="lib/testHelper.js"></script> | 
 |         <!-- <script src="ut/lib/canteen.js"></script> --> | 
 |         <link rel="stylesheet" href="lib/reset.css" /> | 
 |     </head> | 
 |     <body> | 
 |         <style> | 
 |         </style> | 
 |  | 
 |  | 
 |  | 
 |         <div id="main_simplest_pies"></div> | 
 |         <div id="main_pies_encode_price"></div> | 
 |         <div id="main_cartesian_parse_trim_time_reg"></div> | 
 |         <div id="main_cartesian_sort"></div> | 
 |         <div id="main_update_condition"></div> | 
 |         <div id="main_update_source_no_dim_inside_data"></div> | 
 |         <div id="main_no_dimension_defined"></div> | 
 |         <div id="main_fromTransformResult"></div> | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |             var FOOD_SALES_PRICE_HEADER = | 
 |                 ['Product', 'Sales', 'Price', 'Year']; | 
 |             var FOOD_SALES_PRICE_NO_HEADER = [ | 
 |                 ['Cake', 123, 32.12, 2011], | 
 |                 ['Cereal', 231, 14.41, 2011], | 
 |                 ['Tofu', 235, 5.14, 2011], | 
 |                 ['Dumpling', 341, 25.53, 2011], | 
 |                 ['Biscuit', 122, 29.36, 2011], | 
 |                 ['Cake', 143, 30.21, 2012], | 
 |                 ['Cereal', 201, 19.85, 2012], | 
 |                 ['Tofu', 255, 7.61, 2012], | 
 |                 ['Dumpling', 241, 27.89, 2012], | 
 |                 ['Biscuit', 102, 34.53, 2012], | 
 |                 ['Cake', 153, 28.82, 2013], | 
 |                 ['Cereal', 181, 21.16, 2013], | 
 |                 ['Tofu', 295, 4.24, 2013], | 
 |                 ['Dumpling', 281, 31.66, 2013], | 
 |                 ['Biscuit', 92, 39.82, 2013], | 
 |                 ['Cake', 223, 29.22, 2014], | 
 |                 ['Cereal', 211, 17.88, 2014], | 
 |                 ['Tofu', 345, 3.09, 2014], | 
 |                 ['Dumpling', 211, 35.05, 2014], | 
 |                 ['Biscuit', 72, 24.19, 2014] | 
 |             ]; | 
 |             var FOOD_SALES_PRICE_WITH_HEADER = | 
 |                 [FOOD_SALES_PRICE_HEADER] | 
 |                 .concat(FOOD_SALES_PRICE_NO_HEADER); | 
 |  | 
 |             var NAME_SCORE_DIM = { | 
 |                 Name: 0, | 
 |                 Age: 1, | 
 |                 Profession: 2, | 
 |                 Score: 3, | 
 |                 Date: 4, | 
 |                 DirtyNumber: 5, | 
 |                 Numeric: 6, | 
 |                 HasEmpty: 7, | 
 |                 Percent: 8 | 
 |             }; | 
 |             var NAME_SCORE_DIRTY_DATA_HEADER = | 
 |                 ['Name', 'Age', 'Profession', 'Score', 'Date', 'DirtyNumber', 'Numeric', 'HasEmpty', 'Percent']; | 
 |             var NAME_SCORE_DIRTY_DATA_NO_HEADER = [ | 
 |                 // This is for trim testing. | 
 |                 [' Jobs Mat ', 41, 'Designer', 314, '2011-02-12', '13', ' 91000 ', 45, ' 12% ' ], | 
 |                 // This is for edge testing (03-01, 20) | 
 |                 ['Hottlyuipe Xu ', 20, 'Engineer', 351, '2011-03-01', 44, ' 83000 ', 13, '44%' ], | 
 |                 [' Jone Mat ', 52, 'Designer', 287, '2011-02-14', null, ' 43000 ', null, '15%' ], | 
 |                 ['Uty Xu', 19, 'Designer', 219, '2011-02-18', undefined, ' 63000 ', 81, '94%' ], | 
 |                 ['Tatum von Godden', 25, null, 301, '2011-04-02', '-', ' 13000 ', undefined, '61%' ], | 
 |                 ['Must Godden', 31, 'Engineer', 235, '2011-03-19', ' 454', '-', 32, '' ], | 
 |                 ['Caoas Xu', 71, 'Designer', 318, '2011-02-24', NaN, ' 73000 ', '-', '76%' ], | 
 |                 ['Malise Mat', 67, 'Engineer', 366, '2011-03-12', '232a', ' 23000 ', 19, '26%' ] | 
 |             ]; | 
 |             var NAME_SCORE_DIRTY_DATA_WITH_HEADER = | 
 |                 [NAME_SCORE_DIRTY_DATA_HEADER] | 
 |                 .concat(NAME_SCORE_DIRTY_DATA_NO_HEADER); | 
 |  | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <!-- ------------------------------- --> | 
 |         <!-- ------------------------------- --> | 
 |         <!-- ------------------------------- --> | 
 |         <!-- ------------------------------- --> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var option = { | 
 |                 dataset: [{ | 
 |                     source: FOOD_SALES_PRICE_WITH_HEADER | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Year', value: 2011 } | 
 |                     } | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Year', value: 2012 } | 
 |                     } | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Year', value: 2013 } | 
 |                     } | 
 |                 }], | 
 |                 tooltip: {}, | 
 |                 series: [{ | 
 |                     type: 'pie', | 
 |                     datasetIndex: 1, | 
 |                     radius: 50, | 
 |                     center: ['25%', '50%'] | 
 |                 }, { | 
 |                     type: 'pie', | 
 |                     datasetIndex: 2, | 
 |                     radius: 50, | 
 |                     center: ['50%', '50%'] | 
 |                 }, { | 
 |                     type: 'pie', | 
 |                     datasetIndex: 3, | 
 |                     radius: 50, | 
 |                     center: ['75%', '50%'] | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_simplest_pies', { | 
 |                 title: [ | 
 |                     '**3 pies** should shoud **Sales data** (interger about hundreds)', | 
 |                     'Pie by "Year", Sector by "Product"' | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var option = { | 
 |                 dataset: [{ | 
 |                     source: FOOD_SALES_PRICE_WITH_HEADER | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Product', value: 'Tofu' } | 
 |                     } | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Product', value: 'Biscuit' } | 
 |                     } | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Product', value: 'Dumpling' } | 
 |                     } | 
 |                 }], | 
 |                 series: [{ | 
 |                     type: 'pie', | 
 |                     datasetIndex: 1, | 
 |                     center: ['25%', '50%'], | 
 |                     radius: 50, | 
 |                     encode: { itemName: 'Year', value: 'Price' }, | 
 |                 }, { | 
 |                     type: 'pie', | 
 |                     datasetIndex: 2, | 
 |                     center: ['50%', '50%'], | 
 |                     radius: 50, | 
 |                     encode: { itemName: 'Year', value: 'Price' } | 
 |                 }, { | 
 |                     type: 'pie', | 
 |                     datasetIndex: 3, | 
 |                     center: ['75%', '50%'], | 
 |                     radius: 50, | 
 |                     encode: { itemName: 'Year', value: 'Price' } | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_pies_encode_price', { | 
 |                 title: [ | 
 |                     '**3 pies** should shoud **Prices data** (float like xx.xx)', | 
 |                     'Pie by "Product", Sector by "Year"' | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var option = { | 
 |                 dataset: [{ source: NAME_SCORE_DIRTY_DATA_WITH_HEADER }], | 
 |                 tooltip: {}, | 
 |                 grid: [], | 
 |                 xAxis: [], | 
 |                 yAxis: [], | 
 |                 series: [] | 
 |             }; | 
 |  | 
 |             var leftStart = 50; | 
 |             var leftBase = leftStart; | 
 |             var topBase = 30; | 
 |             var gridWidth = 100; | 
 |             var gridHeight = 100; | 
 |             var gapWidth = 70; | 
 |             var gapHeight = 80; | 
 |             var chartWidth = 800; | 
 |  | 
 |             function addCartesian(opt) { | 
 |                 option.grid.push({ | 
 |                     left: leftBase, | 
 |                     top: topBase, | 
 |                     width: gridWidth, | 
 |                     height: gridHeight | 
 |                 }); | 
 |  | 
 |                 leftBase += gridWidth + gapWidth; | 
 |                 if (leftBase + gridWidth > chartWidth) { | 
 |                     leftBase = leftStart; | 
 |                     topBase += gridHeight + gapHeight; | 
 |                 } | 
 |  | 
 |                 option.xAxis.push({ | 
 |                     name: opt.xAxis.name, | 
 |                     type: 'category', | 
 |                     nameLocation: 'middle', | 
 |                     nameGap: 30, | 
 |                     gridIndex: option.grid.length - 1 | 
 |                 }); | 
 |                 option.yAxis.push({ | 
 |                     gridIndex: option.grid.length - 1 | 
 |                 }); | 
 |  | 
 |                 var series = opt.series; | 
 |  | 
 |                 series.type = 'scatter'; | 
 |                 series.xAxisIndex = option.xAxis.length - 1; | 
 |                 series.yAxisIndex = option.yAxis.length - 1; | 
 |                 series.label = { show: true, position: 'bottom' }; | 
 |                 series.encode = { | 
 |                     x: NAME_SCORE_DIM.Date, | 
 |                     y: NAME_SCORE_DIM.Score, | 
 |                     label: series.encode && series.encode.label || [NAME_SCORE_DIM.Name], | 
 |                     tooltip: [ | 
 |                         NAME_SCORE_DIM.Name, | 
 |                         NAME_SCORE_DIM.Date, | 
 |                         NAME_SCORE_DIM.Score, | 
 |                         NAME_SCORE_DIM.Profession, | 
 |                         NAME_SCORE_DIM.Age, | 
 |                         NAME_SCORE_DIM.DirtyNumber | 
 |                     ] | 
 |                 }; | 
 |                 option.series.push(series); | 
 |             } | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'a', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Name, eq: 'Jobs Mat', parser: 'trim' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'a' | 
 |                 }, | 
 |                 xAxis: { name: 'Only show "Jobs Mat"' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'b', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Date, lt: '2011-03', gte: '2011-02', parser: 'time' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'b' | 
 |                 }, | 
 |                 xAxis: { name: 'Show four points\nDate in 2011-02' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'c', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Date, lte: '2011-03', gte: '2011-02-29', parser: 'time' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'c' | 
 |                 }, | 
 |                 xAxis: { name: 'Show "Hottlyuipe Xu"' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'd', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Name, reg: /\sXu$/, parser: 'trim' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'd' | 
 |                 }, | 
 |                 xAxis: { name: 'Show three points\nname reg /sXu$/' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'e', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Profession, ne: 'Designer', parser: 'trim' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'e', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show four points\n!Designer' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'f', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { | 
 |                         and: [ | 
 |                             { dimension: NAME_SCORE_DIM.Profession, eq: 'Designer', parser: 'trim' }, | 
 |                             { dimension: NAME_SCORE_DIM.Score, '>': 300 } | 
 |                         ] | 
 |                     } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'f', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show two points\nDesigner > 300' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'g', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { | 
 |                         and: [ | 
 |                             { dimension: NAME_SCORE_DIM.Profession, eq: 'Engineer' }, | 
 |                             { | 
 |                                 or: [ | 
 |                                     { dimension: NAME_SCORE_DIM.Age, '>=': 20, '<=': 30 }, | 
 |                                     { dimension: NAME_SCORE_DIM.Age, '>=': 60 } | 
 |                                 ] | 
 |                             } | 
 |                         ] | 
 |                     } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'g', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show three points\nEngineer && (20-30 || 60)' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'h', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { | 
 |                         not: { | 
 |                             and: [ | 
 |                                 { dimension: NAME_SCORE_DIM.Profession, eq: 'Engineer' }, | 
 |                                 { | 
 |                                     or: [ | 
 |                                         { dimension: NAME_SCORE_DIM.Age, '>=': 20, '<=': 30 }, | 
 |                                         { dimension: NAME_SCORE_DIM.Age, '>=': 60 } | 
 |                                     ] | 
 |                                 } | 
 |                             ] | 
 |                         } | 
 |                     } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'h', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show six points\n!(Engineer && (20-30 || 60))' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'i', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: true | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'i', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight points\nconfig: true' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'j', | 
 |                 transform: { | 
 |                     type: 'filter', | 
 |                     // print: true, | 
 |                     config: { | 
 |                         or: [{ | 
 |                             dimension: NAME_SCORE_DIM.DirtyNumber, | 
 |                             eq: 454 | 
 |                         }, { | 
 |                             dimension: NAME_SCORE_DIM.DirtyNumber, | 
 |                             eq: 232 | 
 |                         }] | 
 |                     } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'j', | 
 |                     encode: { label: [NAME_SCORE_DIM.DirtyNumber] } | 
 |                 }, | 
 |                 xAxis: { name: 'Show only "Must Godden"' } | 
 |             }); | 
 |  | 
 |  | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_cartesian_parse_trim_time_reg', { | 
 |                 title: [ | 
 |                     'Check each cartesians.', | 
 |                     'The expectationa are below each cartesian.' | 
 |                 ], | 
 |                 width: chartWidth, | 
 |                 height: 600, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var option = { | 
 |                 dataset: [{ source: NAME_SCORE_DIRTY_DATA_WITH_HEADER }], | 
 |                 tooltip: {}, | 
 |                 grid: [], | 
 |                 xAxis: [], | 
 |                 yAxis: [], | 
 |                 series: [] | 
 |             }; | 
 |  | 
 |             var leftStart = 50; | 
 |             var leftBase = leftStart; | 
 |             var topBase = 30; | 
 |             var gridWidth = 200; | 
 |             var gridHeight = 100; | 
 |             var gapWidth = 70; | 
 |             var gapHeight = 80; | 
 |             var chartWidth = 800; | 
 |  | 
 |             function addCartesian(opt) { | 
 |                 option.grid.push({ | 
 |                     left: leftBase, | 
 |                     top: topBase, | 
 |                     width: gridWidth, | 
 |                     height: gridHeight | 
 |                 }); | 
 |  | 
 |                 leftBase += gridWidth + gapWidth; | 
 |                 if (leftBase + gridWidth > chartWidth) { | 
 |                     leftBase = leftStart; | 
 |                     topBase += gridHeight + gapHeight; | 
 |                 } | 
 |  | 
 |                 option.xAxis.push({ | 
 |                     name: opt.xAxis.name, | 
 |                     type: 'category', | 
 |                     nameLocation: 'middle', | 
 |                     nameGap: 30, | 
 |                     gridIndex: option.grid.length - 1 | 
 |                 }); | 
 |                 option.yAxis.push({ | 
 |                     gridIndex: option.grid.length - 1 | 
 |                 }); | 
 |  | 
 |                 var series = opt.series; | 
 |  | 
 |                 series.type = 'bar'; | 
 |                 series.xAxisIndex = option.xAxis.length - 1; | 
 |                 series.yAxisIndex = option.yAxis.length - 1; | 
 |                 series.label = { | 
 |                     show: true, | 
 |                     position: 'insideBottom', | 
 |                     rotate: 90, | 
 |                     align: 'left', | 
 |                     verticalAlign: 'middle' | 
 |                 }; | 
 |                 series.encode = { | 
 |                     x: NAME_SCORE_DIM.Date, | 
 |                     y: NAME_SCORE_DIM.Score, | 
 |                     label: series.encode && series.encode.label || [NAME_SCORE_DIM.Name], | 
 |                     tooltip: [ | 
 |                         NAME_SCORE_DIM.Name, | 
 |                         NAME_SCORE_DIM.Date, | 
 |                         NAME_SCORE_DIM.Score, | 
 |                         NAME_SCORE_DIM.Profession, | 
 |                         NAME_SCORE_DIM.Age, | 
 |                         NAME_SCORE_DIM.DirtyNumber, | 
 |                         NAME_SCORE_DIM.Numeric, | 
 |                         NAME_SCORE_DIM.HasEmpty, | 
 |                         NAME_SCORE_DIM.Percent, | 
 |                     ] | 
 |                 }; | 
 |                 option.series.push(series); | 
 |             } | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'a', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Score, order: 'asc' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.Score }, | 
 |                     datasetId: 'a' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\norder by Score asc' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'b', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     // print: true, | 
 |                     config: { dimension: NAME_SCORE_DIM.Age, order: 'desc' } | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'b', | 
 |                     encode: { label: NAME_SCORE_DIM.Age } | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\norder by Age desc' } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'c', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     // print: true, | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.Profession, order: 'asc' }, | 
 |                         { dimension: NAME_SCORE_DIM.Score, order: 'desc' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     datasetId: 'c', | 
 |                     encode: { label: [NAME_SCORE_DIM.Profession, NAME_SCORE_DIM.Score] } | 
 |                 }, | 
 |                 xAxis: { | 
 |                     name: [ | 
 |                         'Show eight bars (empty Profession last)', | 
 |                         'Profession asc (all Engineer left)', | 
 |                         'Score desc in each Profession' | 
 |                     ].join('\n') | 
 |                 } | 
 |             }); | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'd', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     // print: true, | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.Date, order: 'asc', parser: 'time' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.Date }, | 
 |                     datasetId: 'd' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nDate asc' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'e', | 
 |                 transform: [{ | 
 |                     type: 'filter', | 
 |                     config: { dimension: NAME_SCORE_DIM.Age, lte: 40, gte: 20 } | 
 |                 }, { | 
 |                     type: 'sort', | 
 |                     config: { dimension: NAME_SCORE_DIM.Score, order: 'asc' } | 
 |                 }] | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: [NAME_SCORE_DIM.Age, NAME_SCORE_DIM.Score] }, | 
 |                     datasetId: 'e' | 
 |                 }, | 
 |                 xAxis: { name: 'Show three bars\nFilter by Age 20-40\nOrder by Score asc' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'f', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.DirtyNumber, order: 'desc', parser: 'number' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.DirtyNumber }, | 
 |                     datasetId: 'f' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nOrder by DirtyNumber desc' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'g', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.Numeric, order: 'asc' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.Numeric }, | 
 |                     datasetId: 'g' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nOrder by Numeric asc\nOnly one empty at right' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'h', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.HasEmpty, order: 'desc' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.HasEmpty }, | 
 |                     datasetId: 'h' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nOrder by HasEmpty desc\nempty at right' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'i', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.HasEmpty, order: 'desc', incomparable: 'max' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.HasEmpty }, | 
 |                     datasetId: 'i' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nOrder by HasEmpty desc\nempty at left' } | 
 |             }); | 
 |  | 
 |  | 
 |             option.dataset.push({ | 
 |                 id: 'j', | 
 |                 transform: { | 
 |                     type: 'sort', | 
 |                     config: [ | 
 |                         { dimension: NAME_SCORE_DIM.Percent, order: 'desc', parse: 'number' } | 
 |                     ] | 
 |                 } | 
 |             }); | 
 |             addCartesian({ | 
 |                 series: { | 
 |                     encode: { label: NAME_SCORE_DIM.Percent }, | 
 |                     datasetId: 'j' | 
 |                 }, | 
 |                 xAxis: { name: 'Show all eight bars\nOrder by Percent desc\nempty at right' } | 
 |             }); | 
 |  | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_cartesian_sort', { | 
 |                 title: [ | 
 |                     'Test sort transform. Check each cartesians.', | 
 |                     'The expectationa are below each cartesian.', | 
 |                     'Ordered dimension is on **bar label **' | 
 |                 ], | 
 |                 width: chartWidth, | 
 |                 height: 800, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var currentYear = 2011 | 
 |             var option = { | 
 |                 title: { | 
 |                     text: currentYear, | 
 |                     left: 'center' | 
 |                 }, | 
 |                 dataset: [{ | 
 |                     source: FOOD_SALES_PRICE_WITH_HEADER | 
 |                 }, { | 
 |                     id: 'one_year', | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 'Year', value: currentYear } | 
 |                     } | 
 |                 }], | 
 |                 tooltip: {}, | 
 |                 xAxis: { type: 'category' }, | 
 |                 yAxis: {}, | 
 |                 series: [{ | 
 |                     name: 'one year', | 
 |                     type: 'bar', | 
 |                     datasetIndex: 1, | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_update_condition', { | 
 |                 title: [ | 
 |                     'click "next year", check the bar change.' | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option, | 
 |                 buttons: [{ | 
 |                     text: 'next year', | 
 |                     onclick: function () { | 
 |                         currentYear++; | 
 |                         if (currentYear >= 2014) { | 
 |                             currentYear = 2011 | 
 |                         } | 
 |                         chart.setOption({ | 
 |                             title: { | 
 |                                 text: currentYear | 
 |                             }, | 
 |                             dataset: { | 
 |                                 id: 'one_year', | 
 |                                 transform: { | 
 |                                     type: 'filter', | 
 |                                     config: { dimension: 'Year', value: currentYear } | 
 |                                 } | 
 |                             } | 
 |                         }); | 
 |                     } | 
 |                 }] | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var currData = FOOD_SALES_PRICE_NO_HEADER; | 
 |  | 
 |             var option = { | 
 |                 dataset: [{ | 
 |                     id: 'all_data', | 
 |                     dimensions: FOOD_SALES_PRICE_HEADER, | 
 |                     source: currData | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         print: true, | 
 |                         config: { dimension: 'Price', '<': 40 } | 
 |                     } | 
 |                 }], | 
 |                 tooltip: {}, | 
 |                 legend: {}, | 
 |                 xAxis: { type: 'category' }, | 
 |                 yAxis: { scale: true }, | 
 |                 series: [{ | 
 |                     name: 'all data', | 
 |                     type: 'scatter', | 
 |                     symbolSize: 15, | 
 |                     encode: { | 
 |                         itemId: 'Product', | 
 |                         y: 'Price', | 
 |                         label: [0, 1, 2, 3] | 
 |                     }, | 
 |                     itemStyle: { | 
 |                         color: '#999' | 
 |                     } | 
 |                 }, { | 
 |                     name: 'Price < 40', | 
 |                     type: 'scatter', | 
 |                     encode: { | 
 |                         itemId: 'Product', | 
 |                         x: 0, | 
 |                         y: 'Price', | 
 |                         label: [0, 1, 2, 3] | 
 |                     }, | 
 |                     datasetIndex: 1 | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_update_source_no_dim_inside_data', { | 
 |                 title: [ | 
 |                     'Init: all items that Price < 40', | 
 |                     'click "add price 10", check the bar change.' | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option, | 
 |                 buttons: [{ | 
 |                     text: 'add price 10', | 
 |                     onclick: function () { | 
 |                         currData = echarts.util.clone(currData); | 
 |                         echarts.util.each(currData, function (line) { | 
 |                             line[2] += 10; | 
 |                         }); | 
 |  | 
 |                         chart.setOption({ | 
 |                             dataset: { | 
 |                                 id: 'all_data', | 
 |                                 source: currData | 
 |                             } | 
 |                         }); | 
 |                     } | 
 |                 }] | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             var option = { | 
 |                 dataset: [{ | 
 |                     source: FOOD_SALES_PRICE_NO_HEADER | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'filter', | 
 |                         config: { dimension: 3, value: 2011 } | 
 |                     } | 
 |                 }, { | 
 |                     transform: [{ | 
 |                         type: 'filter', | 
 |                         config: { dimension: 3, value: 2012 } | 
 |                     }, { | 
 |                         type: 'sort', | 
 |                         config: { dimension: 2, order: 'asc' } | 
 |                     }] | 
 |                 }], | 
 |                 tooltip: {}, | 
 |                 series: [{ | 
 |                     type: 'pie', | 
 |                     datasetIndex: 1, | 
 |                     radius: 50, | 
 |                     center: ['35%', '50%'] | 
 |                 }, { | 
 |                     type: 'pie', | 
 |                     datasetIndex: 2, | 
 |                     radius: 50, | 
 |                     center: ['65%', '50%'] | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_no_dimension_defined', { | 
 |                 title: [ | 
 |                     '**2 pies** should shoud **Sales data** (interger about hundreds)', | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts', 'data/Michelson-Morley.json.js'], function (echarts, rawData) { | 
 |             var option = { | 
 |                 dataset: [{ | 
 |                     source: rawData | 
 |                 }, { | 
 |                     transform: { | 
 |                         type: 'boxplot', | 
 |                         config: { itemNameFormatter: 'expr {value}' } | 
 |                     } | 
 |                 }, { | 
 |                     fromDatasetIndex: 1, | 
 |                     fromTransformResult: 1 | 
 |                 }, { | 
 |                     fromDatasetIndex: 1, | 
 |                     fromTransformResult: 1, | 
 |                     transform: { | 
 |                         type: 'sort', | 
 |                         config: { dimension: 0, order: 'desc' } | 
 |                     } | 
 |                 }], | 
 |                 tooltip: {}, | 
 |                 xAxis: { | 
 |                     type: 'category' | 
 |                 }, | 
 |                 yAxis: { | 
 |                 }, | 
 |                 series: [{ | 
 |                     type: 'boxplot', | 
 |                     datasetIndex: 1 | 
 |                 }, { | 
 |                     type: 'scatter', | 
 |                     symbolSize: 30, | 
 |                     datasetIndex: 2 | 
 |                 }, { | 
 |                     type: 'line', | 
 |                     z: 100, | 
 |                     datasetIndex: 3 | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'main_fromTransformResult', { | 
 |                 title: [ | 
 |                     '**boxplot** and **outlier scatter (green)** and **line** (yellow) should be displayed.', | 
 |                 ], | 
 |                 height: 400, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     </body> | 
 | </html> | 
 |  |