| <!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="main0"></div> | 
 |         <div id="main1"></div> | 
 |         <div id="main2"></div> | 
 |         <div id="main3"></div> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require([ | 
 |             'echarts', | 
 |             // 'map/js/china', | 
 |             // './data/nutrients.json' | 
 |         ], function (echarts) { | 
 |             function createCase(isTestingNull, hasAnimation) { | 
 |                 var option; | 
 |                 var cellSize = [50, 51]; | 
 |                 var isFirst = true; | 
 |                 var clickTimes = 0; | 
 |  | 
 |                 option = { | 
 |                     calendar: [ | 
 |                         { | 
 |                         orient: 'vertical', | 
 |                         cellSize: cellSize, | 
 |                         yearLabel: { | 
 |                             show: false | 
 |                         }, | 
 |                         monthLabel: { | 
 |                             show: false | 
 |                         }, | 
 |                         range: ['2022-1'] | 
 |                         } | 
 |                     ], | 
 |                     series: [ | 
 |                         { | 
 |                             type: 'custom', | 
 |                             universalTransition: { | 
 |                                 enabled: false | 
 |                             }, | 
 |                             name: 'a', | 
 |                             coordinateSystem: 'calendar', | 
 |                             animation: hasAnimation ? 3000 : 0, | 
 |                             data: [ | 
 |                                 ['2022-01-16', 'e', false] | 
 |                             ], | 
 |                             renderItem: (params, api) => { | 
 |                                 const date = api.value(0); | 
 |                                 const cellPoint = api.coord(date); | 
 |                                 const xPos = cellPoint[0] - cellSize[0] / 2; | 
 |                                 const yPos = cellPoint[1] - cellSize[1] / 2; | 
 |                                 const name = api.value(1); | 
 |                                 const cellWidth = params.coordSys.cellWidth; | 
 |                                 const position = [xPos, yPos]; | 
 |                                 const rect = { | 
 |                                     type: 'rect', | 
 |                                     shape: { | 
 |                                         x: 0, | 
 |                                         y: 0, | 
 |                                         width: cellWidth, | 
 |                                         height: 15 | 
 |                                     }, | 
 |                                     position, | 
 |                                     style: { | 
 |                                         fill: api.value(2) ? '#eee' : '#6ee' | 
 |                                     }, | 
 |                                     textContent: { | 
 |                                         style: { | 
 |                                         text: name, | 
 |                                         fill: '#888', | 
 |                                         overflow: 'truncate', | 
 |                                         width: cellWidth, | 
 |                                         height: 13, | 
 |                                         y: 1 | 
 |                                         } | 
 |                                     }, | 
 |                                     textConfig: { | 
 |                                         position: 'insideLeft', | 
 |                                         distance: 2 | 
 |                                     }, | 
 |                                     name: 'rect' | 
 |                                 }; | 
 |  | 
 |                                 const borderLeft = api.value(2) | 
 |                                     ? (isTestingNull ? null : {}) | 
 |                                     : { | 
 |                                         type: 'rect', | 
 |                                         shape: { | 
 |                                             x: -20, | 
 |                                             y: 0, | 
 |                                             width: 20, | 
 |                                             height: 15 | 
 |                                         }, | 
 |                                         position, | 
 |                                         style: { | 
 |                                             fill: 'red' | 
 |                                         }, | 
 |                                         name: 'bar' | 
 |                                     }; | 
 |  | 
 |                                 const right = api.value(2) | 
 |                                     ? { | 
 |                                     type: 'circle', | 
 |                                     shape: { | 
 |                                         cx: cellWidth + 20, | 
 |                                         cy: 20, | 
 |                                         r: 30 | 
 |                                     }, | 
 |                                     position, | 
 |                                     style: { | 
 |                                         fill: 'transparent', | 
 |                                         stroke: 'blue', | 
 |                                     } | 
 |                                 } | 
 |                                 : { | 
 |                                     type: 'circle', | 
 |                                     shape: { | 
 |                                         cx: cellWidth + 20, | 
 |                                         cy: 20, | 
 |                                         r: 15 | 
 |                                     }, | 
 |                                     position, | 
 |                                     style: { | 
 |                                         fill: 'red' | 
 |                                     } | 
 |                                 }; | 
 |  | 
 |                                 const group = { | 
 |                                     type: 'group', | 
 |                                     children: [rect, borderLeft, right] | 
 |                                 }; | 
 |                                 return group; | 
 |                             }, | 
 |                             silent: true, | 
 |                             z: 2, | 
 |                             legendHoverLink: true, | 
 |                             clip: false, | 
 |                             label: {}, | 
 |                             emphasis: { label: {} } | 
 |                         } | 
 |                     ] | 
 |                 }; | 
 |  | 
 |                 var rendered = isTestingNull ? ' NOT' : ''; | 
 |                 var chartId = (isTestingNull ? 2 : 0) + (hasAnimation ? 1 : 0); | 
 |                 var chart = testHelper.create(echarts, 'main' + chartId, { | 
 |                     title: [ | 
 |                         'Update group with ' + (isTestingNull ? 'null' : '{}') + ' as new child', | 
 |                         'Animation: ' + (hasAnimation ? 'true' : 'false'), | 
 |                         'The red shapes should be' + rendered + ' rendered after "Update"' | 
 |                     ], | 
 |                     option: option, | 
 |                     // height: 300, | 
 |                     buttons: [{text: 'Update', onclick: function () { | 
 |                         isFirst = false; | 
 |                         var testId = clickTimes % 2; | 
 |                         chart.setOption({ | 
 |                             calendar: { | 
 |                                 range: testId === 0 ? ['2022-02'] : ['2022-01'] | 
 |                             }, | 
 |                             series: [ | 
 |                             { | 
 |                                 type: 'custom', | 
 |                                 data: [ | 
 |                                     [ | 
 |                                         testId === 0 ? '2022-02-13' : '2022-01-16' , | 
 |                                         'e', | 
 |                                         testId === 0 | 
 |                                     ] | 
 |                                 ] | 
 |                             } | 
 |                             ] | 
 |                         }); | 
 |                         ++clickTimes; | 
 |                     }}] | 
 |                 }); | 
 |             } | 
 |  | 
 |             createCase(false, false); | 
 |             createCase(true, false); | 
 |             createCase(false, true); | 
 |             createCase(true, true); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |     </body> | 
 | </html> |