| <!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="lib/canteen.js"></script> | 
 |         <link rel="stylesheet" href="lib/reset.css" /> | 
 |     </head> | 
 |     <body> | 
 |         <style> | 
 |         </style> | 
 |  | 
 |  | 
 |         <div id="Legacy_compat_test"></div> | 
 |         <div id="insideFill_Stroke_auto_test"></div> | 
 |         <div id="textConfig_other_feature_test"></div> | 
 |         <div id="insideFill_Stroke_hover_test"></div> | 
 |         <div id="z_order_test"></div> | 
 |         <div id="hover_style_disable"></div> | 
 |         <div id="hover_style_remove"></div> | 
 |  | 
 |  | 
 |         <!-- Utils ----------------------------------------------- --> | 
 |         <script> | 
 |             function createMaker(opt) { | 
 |                 opt = opt || {}; | 
 |                 var xStart = opt.xCurr || 80; | 
 |                 var xCurr = xStart; | 
 |                 var yStart = opt.yCurr || 20; | 
 |                 var yCurr = yStart; | 
 |                 var xStep = opt.xStep || 100; | 
 |                 var yStep = opt.yStep || 65; | 
 |                 var colCount = 0; | 
 |                 var yMax = 0; | 
 |                 var maxCol = opt.maxCol || Infinity; | 
 |                 var children = []; | 
 |  | 
 |                 function createRectShape(width, height) { | 
 |                     width = width || 20; | 
 |                     height = height || 30; | 
 |                     return {x: -width / 2, y: 0, width: width, height: height}; | 
 |                 } | 
 |  | 
 |                 function makeGraphic(text, creators) { | 
 |                     var y = yCurr; | 
 |                     children.push({ | 
 |                         type: 'text', x: xCurr, y: y, | 
 |                         style: {text: text, fill: '#900', align: 'center', fontSize: 10} | 
 |                     }); | 
 |                     y += yStep; | 
 |                     for (var i = 0; i < creators.length; i++) { | 
 |                         children.push(creators[i](xCurr, y)); | 
 |                         y += yStep; | 
 |                     } | 
 |                     xCurr += xStep; | 
 |  | 
 |                     yMax = Math.max(y, yMax); | 
 |  | 
 |                     colCount++; | 
 |                     if (colCount >= maxCol) { | 
 |                         colCount = 0; | 
 |                         xCurr = xStart; | 
 |                         yCurr = yMax + yStep * 0.7; | 
 |                     } | 
 |                 } | 
 |  | 
 |                 return { | 
 |                     makeGraphic: makeGraphic, | 
 |                     createRectShape: createRectShape, | 
 |                     children: children | 
 |                 }; | 
 |             } | 
 |  | 
 |             // opt: {globalColor, backgroundColor} | 
 |             function createOption(renderItem, opt) { | 
 |                 return { | 
 |                     animation: false, | 
 |                     backgroundColor: opt && opt.backgroundColor, | 
 |                     color: opt && opt.globalColor, | 
 |                     xAxis: {axisLine: {lineStyle: {color: 'rgba(0,0,0,0.2)'}}, axisLabel: {show: false}, splitLine: {show: false}}, | 
 |                     yAxis: {axisLine: {lineStyle: {color: 'rgba(0,0,0,0.2)'}}, axisLabel: {show: false}, splitLine: {show: false}}, | 
 |                     grid: {left: 30}, | 
 |                     series: { | 
 |                         type: 'custom', | 
 |                         renderItem: renderItem, | 
 |                         data: [[1, 1]] | 
 |                     } | 
 |                 }; | 
 |             } | 
 |         </script> | 
 |         <!-- --------------------------------------------------- --> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |  | 
 |             function renderItem(params, api) { | 
 |                 var maker = createMaker({xStep: 120, yStep: 60, maxCol: 5}); | 
 |                 var makeGraphic = maker.makeGraphic; | 
 |                 var createRectShape = maker.createRectShape; | 
 |  | 
 |                 makeGraphic([ | 
 |                     'normal: green rect', 'inside orange' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: { | 
 |                                 // textPosition not set but by default 'inside' | 
 |                                 text: 'legacy1', fill: 'green', textFill: 'orange' | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 'ec5_api', fill: 'orange'}}, | 
 |                             textConfig: {position: 'inside'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic([ | 
 |                     'normal: green rect', 'inside orange', 'text is number 0', 'should be displayed' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: { | 
 |                                 // text is number 0, can be displayed | 
 |                                 text: 0, fill: 'green', textFill: 'orange' | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 0, fill: 'orange'}}, | 
 |                             textConfig: {position: 'inside'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic([ | 
 |                     'normal: green rect', 'inside white/bordered', 'hover: red rect', 'inside white/bordered' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0'}), | 
 |                             styleEmphasis: {fill: 'red'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: { | 
 |                                 text: 'legacy1', fill: 'green', textPosition: 'inside', | 
 |                                 textFill: '#fff', textStroke: 'green', textStrokeWidth: 2 | 
 |                             }, | 
 |                             styleEmphasis: {fill: 'red'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 'ec5_api'}}, | 
 |                             textConfig: {position: 'inside'}, | 
 |                             emphasis: {style: {fill: 'red'}} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic([ | 
 |                     'normal: green rect', 'bottom green', 'hover: red rect', 'bottom green' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0', textPosition: 'bottom'}), | 
 |                             styleEmphasis: {fill: 'red'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 'ec5_api'}}, | 
 |                             textConfig: {position: 'bottom', outsideFill: 'green'}, | 
 |                             emphasis: {style: {fill: 'red'}} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic([ | 
 |                     'green rect', 'normal: inside white/bordered', 'hover: inside red' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0'}), | 
 |                             styleEmphasis: {textFill: 'red'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: { | 
 |                                 text: 'legacy1', fill: 'green', textPosition: 'inside', | 
 |                                 textFill: '#fff', textStroke: 'green', textStrokeWidth: 2 | 
 |                             }, | 
 |                             styleEmphasis: {textFill: 'red'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 style: {text: 'ec5_api'}, | 
 |                                 emphasis: {style: {fill: 'red', stroke: 'green', lineWidth: 2}} | 
 |                             }, | 
 |                             textConfig: {position: 'inside'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic([ | 
 |                     'green rect', 'normal: bottom red', 'hover: bottom blue' | 
 |                 ].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0', textPosition: 'bottom', textFill: 'red'}), | 
 |                             styleEmphasis: {textFill: 'blue'} | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 style: {text: 'ec5_api', fill: 'red'}, | 
 |                                 emphasis: {style: {fill: 'blue'}} | 
 |                             }, | 
 |                             textConfig: {position: 'bottom'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect', 'normal: inside white/borded', 'hover: bottom'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0'}), | 
 |                             // Hover not compat to ec4 (to complicated) | 
 |                             styleEmphasis: {textPosition: 'bottom'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect', 'normal: inside red', 'hover: bottom red'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0', textFill: 'red'}), | 
 |                             styleEmphasis: {textPosition: 'bottom'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect', 'normal: inside white', 'hover: bottom red'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0', textFill: 'white'}), | 
 |                             styleEmphasis: {textFill: 'red', textPosition: 'bottom'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect', 'normal: inside white/bordered', 'hover: auto lift'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0'}) | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 'ec5_api'}}, | 
 |                             textConfig: {position: 'inside'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect', 'normal: bottom green', 'hover: auto lift'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', position: [x, y], shape: createRectShape(), | 
 |                             style: api.style({text: 'legacy0', textPosition: 'bottom'}) | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {style: {text: 'ec5_api', fill: 'green'}}, | 
 |                             textConfig: {position: 'bottom'} | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 return { | 
 |                     type: 'group', | 
 |                     children: maker.children | 
 |                 }; | 
 |             } | 
 |  | 
 |             var chart = testHelper.create(echarts, 'Legacy_compat_test', { | 
 |                 title: [ | 
 |                     'Legacy compat test', | 
 |                     'Each column rects are the same effect implemented by', | 
 |                     'legacy API and corresponding new API.', | 
 |                     'So **each column** must be **the same result**', | 
 |                     '(except text string and some ec5 enhancement).', | 
 |                     '**Hover** also needs to be tested' | 
 |                 ], | 
 |                 height: 550, | 
 |                 option: createOption(renderItem, {globalColor: ['green']}) | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             function renderItem() { | 
 |                 var maker = createMaker({maxCol: 5}); | 
 |                 var makeGraphic = maker.makeGraphic; | 
 |                 var createRectShape = maker.createRectShape; | 
 |  | 
 |                 // opt for example: | 
 |                 // opt.type | 
 |                 // opt.shape | 
 |                 // opt.textConfig: {}, | 
 |                 // opt.textContent: {}, if rich: textContent.style: {rich: {i: xxx}} | 
 |                 // opt.emphasis: {} | 
 |                 // opt.extraTitle: string[] | 
 |                 function makeTest(opt) { | 
 |                     var isRich = opt.textContent.style.rich; | 
 |                     var type = opt.type || 'rect'; | 
 |                     var shape = opt.shape || createRectShape(40, 120); | 
 |                     var title = ['green rect', (isRich ? 'rich text' : 'plain text')]; | 
 |                     opt.extraTitle && (title = title.concat(opt.extraTitle)); | 
 |                     makeGraphic(title.join('\n'), [ | 
 |                         function (x, y) { | 
 |                             var result = { | 
 |                                 type: type, x: x, y: y, shape: shape, style: {fill: 'green'}, | 
 |                                 textConfig: opt.textConfig, | 
 |                                 textContent: opt.textContent | 
 |                             } | 
 |                             if (opt.emphasis) { | 
 |                                 result.emphasis = opt.emphasis; | 
 |                             } | 
 |                             return result; | 
 |                         } | 
 |                     ]); | 
 |                 } | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {position: 'insideTop', rotation: -0.5 * Math.PI}, | 
 |                     textContent: {style: { | 
 |                         text: '90 rotated text align with:\nv: top h: middle\ndefault distance', | 
 |                         align: 'left', verticalAlign: 'middle' | 
 |                     }} | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {position: 'insideTop', rotation: -0.5 * Math.PI, distance: 0}, | 
 |                     textContent: {style: { | 
 |                         text: '90 rotated text align with:\n v: top h: middle\nno distance', | 
 |                         align: 'left', verticalAlign: 'middle' | 
 |                     }} | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {position: 'insideTop', rotation: -0.5 * Math.PI, distance: 0, offset: [0, -25]}, | 
 |                     textContent: {style: { | 
 |                         text: '90 rotated text outside right rect\nalign top', | 
 |                         fill: '#700', | 
 |                         align: 'left', verticalAlign: 'bottom' | 
 |                     }} | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {position: 'insideTop', rotation: -0.5 * Math.PI}, | 
 |                     textContent: {style: { | 
 |                         text: '90 rotated text align with:\n{i|v: top h: middle}\n{a|align right}', | 
 |                         align: 'left', verticalAlign: 'middle', | 
 |                         rich: { | 
 |                             i: {fontSize: 20, fill: 'orange'}, | 
 |                             a: {align: 'right'} | 
 |                         } | 
 |                     }} | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     extraTitle: ['emphasis:\nalign/verticalAlign rollback'], | 
 |                     textConfig: {position: 'left'}, | 
 |                     textContent: { | 
 |                         style: { | 
 |                             text: '--------\nalign\nright\n----', | 
 |                             fill: '#700' | 
 |                         } | 
 |                     }, | 
 |                     emphasis: { | 
 |                         textConfig: {position: null} | 
 |                     } | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     type: 'circle', | 
 |                     shape: {cx: 0, cy: 20, r: 30}, | 
 |                     textConfig: { | 
 |                         position: 'right', | 
 |                     }, | 
 |                     textContent: { | 
 |                         rotation: -0.3 * Math.PI, | 
 |                         originX: -35, | 
 |                         style: { | 
 |                             text: 'Rotate, outside, origin is center', | 
 |                             fontSize: 20, | 
 |                             fill: '#700', | 
 |                             align: 'left', | 
 |                             verticalAlign: 'middle' | 
 |                         } | 
 |                     } | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     type: 'circle', | 
 |                     shape: {cx: 0, cy: 20, r: 30}, | 
 |                     textConfig: { | 
 |                         position: 'inside', offset: [35, 0] | 
 |                     }, | 
 |                     textContent: { | 
 |                         rotation: -0.3 * Math.PI, | 
 |                         style: { | 
 |                             text: 'Rotate, outside, origin is center', | 
 |                             fontSize: 20, | 
 |                             fill: '#700', | 
 |                             align: 'left', | 
 |                             verticalAlign: 'middle' | 
 |                         } | 
 |                     } | 
 |                 }); | 
 |  | 
 |                 return { | 
 |                     type: 'group', | 
 |                     children: maker.children | 
 |                 }; | 
 |             } | 
 |  | 
 |             var chart = testHelper.create(echarts, 'textConfig_other_feature_test', { | 
 |                 title: [ | 
 |                     'textConfig other feature test' | 
 |                 ], | 
 |                 option: createOption(renderItem), | 
 |                 // recordCanvas: true, | 
 |                 height: 800 | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |             function renderItem() { | 
 |                 var maker = createMaker({maxCol: 6}); | 
 |                 var makeGraphic = maker.makeGraphic; | 
 |                 var createRectShape = maker.createRectShape; | 
 |  | 
 |                 // opt for example: | 
 |                 // opt.textConfig: {}, | 
 |                 // opt.textContentStyle: {}, if rich: textContentStyle: {rich: {i: xxx}} | 
 |                 // opt.expect: [ {fill: 'white', stroke: 'green'},  {fill: 'white', stroke: 'green'} ] | 
 |                 function makeTest(opt) { | 
 |                     var expect0 = opt.expect[0]; | 
 |                     var expect1 = opt.expect[1]; | 
 |                     var isRich = opt.textContentStyle.rich; | 
 |                     makeGraphic(['green rect', (isRich ? 'rich text' : 'plain text')].join('\n'), [ | 
 |                         function (x, y) { | 
 |                             var text = [ | 
 |                                 isRich ? '{i|inside}' : 'inside', | 
 |                                 'fill: ' + expect0.fill, | 
 |                                 'stroke: ' + expect0.stroke | 
 |                             ].join('\n'); | 
 |                             return { | 
 |                                 type: 'rect', x: x, y: y, shape: createRectShape(), style: {fill: 'green'}, | 
 |                                 textConfig: echarts.util.extend({position: 'inside'}, opt.textConfig), | 
 |                                 textContent: { | 
 |                                     style: echarts.util.extend({text: text}, opt.textContentStyle) | 
 |                                 } | 
 |                             } | 
 |                         }, | 
 |                         function (x, y) { | 
 |                             var text = [ | 
 |                                 isRich ? '{i|bottom}' : 'bottom', | 
 |                                 'fill: ' + expect1.fill, | 
 |                                 'stroke: ' + expect1.stroke | 
 |                             ].join('\n'); | 
 |                             return { | 
 |                                 type: 'rect', x: x, y: y, shape: createRectShape(), style: {fill: 'green'}, | 
 |                                 textConfig: echarts.util.extend({position: 'bottom'}, opt.textConfig), | 
 |                                 textContent: { | 
 |                                     style: echarts.util.extend({text: text}, opt.textContentStyle) | 
 |                                 } | 
 |                             } | 
 |                         } | 
 |                     ]); | 
 |                 } | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'green'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {backgroundColor: '#aaa'}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'none'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {borderColor: '#aaa', borderWidth: 2, padding: 5}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'none'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {rich: {i: {fontSize: 30}}}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'green'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {rich: {i: {backgroundColor: '#aaa'}}}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'none'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {rich: {i: {borderColor: '#aaa', borderWidth: 2, fontSize: 20}}}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'none'}, | 
 |                         {fill: 'black', stroke: 'green'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {fill: 'orange'}, | 
 |                     expect: [ | 
 |                         {fill: 'orange', stroke: 'none'}, | 
 |                         {fill: 'orange', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {fill: 'orange', stroke: 'blue', lineWidth: 2}, | 
 |                     expect: [ | 
 |                         {fill: 'orange', stroke: 'blue'}, | 
 |                         {fill: 'orange', stroke: 'blue'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {}, | 
 |                     textContentStyle: {stroke: 'blue', lineWidth: 2}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'blue'}, | 
 |                         {fill: 'black', stroke: 'blue'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {insideFill: 'yellow'}, | 
 |                     textContentStyle: {}, | 
 |                     expect: [ | 
 |                         {fill: 'yellow', stroke: 'green'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {insideFill: 'yellow'}, | 
 |                     textContentStyle: {fill: 'orange'}, | 
 |                     expect: [ | 
 |                         {fill: 'orange', stroke: 'none'}, | 
 |                         {fill: 'orange', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {insideFill: 'yellow', insideStroke: 'blue'}, | 
 |                     textContentStyle: {}, | 
 |                     expect: [ | 
 |                         {fill: 'yellow', stroke: 'blue'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {insideFill: 'yellow', insideStroke: 'blue'}, | 
 |                     textContentStyle: {fill: 'pink'}, | 
 |                     expect: [ | 
 |                         {fill: 'pink', stroke: 'blue'}, | 
 |                         {fill: 'pink', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {insideStroke: 'blue'}, | 
 |                     textContentStyle: {}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'blue'}, | 
 |                         {fill: 'black', stroke: 'none'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 makeTest({ | 
 |                     textConfig: {outsideFill: 'blue', outsideStroke: 'red'}, | 
 |                     textContentStyle: {}, | 
 |                     expect: [ | 
 |                         {fill: 'white', stroke: 'green'}, | 
 |                         {fill: 'blue', stroke: 'red'} | 
 |                     ] | 
 |                 }); | 
 |                 makeTest({ | 
 |                     textConfig: {outsideFill: 'blue', outsideStroke: 'red'}, | 
 |                     textContentStyle: {fill: 'pink'}, | 
 |                     expect: [ | 
 |                         {fill: 'pink', stroke: 'none'}, | 
 |                         {fill: 'pink', stroke: 'red'} | 
 |                     ] | 
 |                 }); | 
 |  | 
 |                 return { | 
 |                     type: 'group', | 
 |                     children: maker.children | 
 |                 }; | 
 |             } | 
 |  | 
 |             var chart = testHelper.create(echarts, 'insideFill_Stroke_auto_test', { | 
 |                 title: [ | 
 |                     'insideFill/insideStroke outsideFill/outsideStroke auto rule test' | 
 |                 ], | 
 |                 option: createOption(renderItem, {backgroundColor: '#ddd'}), | 
 |                 height: 800 | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |  | 
 |             function renderItem(params, api) { | 
 |                 var maker = createMaker({xCurr: 150, xStep: 150, yStep: 90}); | 
 |                 var makeGraphic = maker.makeGraphic; | 
 |                 var createRectShape = maker.createRectShape; | 
 |  | 
 |                 makeGraphic(['insideFill/Stroke not set', 'normal: white/bordered'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 type: 'text', silent: true, style: { | 
 |                                     text: 'if hover,\ntop black' | 
 |                                 } | 
 |                             }, | 
 |                             textConfig: {position: 'inside'}, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'top'} | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {type: 'text', silent: true, style: {text: 'if hover,\nright green'}}, | 
 |                             textConfig: { | 
 |                                 position: 'inside', outsideFill: 'green' | 
 |                             }, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'right'} | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 silent: true, style: {text: 'if hover,\nbottom\nlarge bordered red'}, | 
 |                                 emphasis: {style: {fontSize: 20}} | 
 |                             }, | 
 |                             textConfig: { | 
 |                                 position: 'inside', outsideFill: 'green', outsideStroke: 'red' | 
 |                             }, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'bottom'} | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 silent: true, | 
 |                                 style: { | 
 |                                     text: 'rich text\nif hover,\nbottom black\n{r|normal orange\nhover red}', | 
 |                                     rich: {r: {fontSize: 16, fill: 'orange'}}, | 
 |                                 }, | 
 |                                 emphasis: { | 
 |                                     style: { | 
 |                                         rich: {r: {fill: 'red'}} | 
 |                                     } | 
 |                                 } | 
 |                             }, | 
 |                             textConfig: {position: 'inside'}, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'bottom'} | 
 |                             } | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 makeGraphic(['green rect'].join('\n'), [ | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: {silent: true, style: { | 
 |                                 text: 'normal:\ninside yellow/bordered\nhover:\ntop black' | 
 |                             }}, | 
 |                             textConfig: {position: 'inside', insideFill: 'yellow'}, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'top'} | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |                     function (x, y) { | 
 |                         return { | 
 |                             type: 'rect', x: x, y: y, shape: createRectShape(), | 
 |                             style: {fill: 'green'}, | 
 |                             textContent: { | 
 |                                 silent: true, | 
 |                                 style: {text: 'normal:\ninside white/bordered\nhover:\nright green'} | 
 |                             }, | 
 |                             textConfig: { | 
 |                                 position: 'inside', outsideFill: 'green' | 
 |                             }, | 
 |                             emphasis: { | 
 |                                 textConfig: {position: 'right'} | 
 |                             } | 
 |                         }; | 
 |                     } | 
 |                 ]); | 
 |  | 
 |                 return { | 
 |                     type: 'group', | 
 |                     children: maker.children | 
 |                 }; | 
 |             } | 
 |  | 
 |             var chart = testHelper.create(echarts, 'insideFill_Stroke_hover_test', { | 
 |                 title: [ | 
 |                     'insideFill/Stroke & hover test. Please **hover any of them**' | 
 |                 ], | 
 |                 option: createOption(renderItem), | 
 |                 height: 600 | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |  | 
 |             function renderItem(params, api) { | 
 |                 return { | 
 |                     type: 'group', | 
 |                     children: [{ | 
 |                         type: 'circle', | 
 |                         shape: {cx: 100, cy: 100, r: 50}, | 
 |                         style: {fill: 'red'}, | 
 |                         z2: 100, | 
 |                         // textContent do not set z2, but auto follow the circle z2. | 
 |                         textContent: { | 
 |                             type: 'text', | 
 |                             style: { | 
 |                                 text: 'normal: {red|red} is over {green|green}.\nHover me', | 
 |                                 // stroke: '#fff', lineWidth: 2, | 
 |                                 rich: { | 
 |                                     red: {fill: 'red', stroke: '#fff', lineWidth: 2, fontSize: 20}, | 
 |                                     green: {fill: 'green', stroke: '#fff', lineWidth: 2, fontSize: 20} | 
 |                                 }, | 
 |                             }, | 
 |                             silent: true, | 
 |                             emphasis: { | 
 |                                 style: { | 
 |                                     text: 'emphasis: {green|green} over {red|red}\nText {below|below} green', | 
 |                                     rich: { | 
 |                                         below: {fontSize: 40} | 
 |                                     } | 
 |                                 } | 
 |                             } | 
 |                         }, | 
 |                         textConfig: { | 
 |                             position: 'inside' | 
 |                         } | 
 |                     }, { | 
 |                         type: 'circle', | 
 |                         shape: {cx: 100, cy: 140, r: 40}, | 
 |                         style: {fill: 'green'}, | 
 |                         // textContent do not set z2, but auto follow the circle z2. | 
 |                         textContent: { | 
 |                             type: 'text', | 
 |                             style: { | 
 |                                 text: 'text should be always\n{over|over} all circles.', | 
 |                                 rich: {over: {fontSize: 30}} | 
 |                             }, | 
 |                             silent: true | 
 |                         }, | 
 |                         textConfig: { | 
 |                             position: 'inside' | 
 |                         }, | 
 |                         z2: 80, | 
 |                         emphasis: { | 
 |                             z2: 110 | 
 |                         } | 
 |  | 
 |                     }, { | 
 |                         type: 'circle', | 
 |                         shape: {cx: 300, cy: 100, r: 50}, | 
 |                         style: {fill: 'red'}, | 
 |                         z2: 100, | 
 |                         // textContent do not set z2, but auto follow the circle z2. | 
 |                         textContent: { | 
 |                             type: 'text', | 
 |                             style: { | 
 |                                 text: 'normal: {red|red} is over {green|green}.\nHover me', | 
 |                                 // stroke: '#fff', lineWidth: 2, | 
 |                                 rich: { | 
 |                                     red: {fill: 'red', stroke: '#fff', lineWidth: 2, fontSize: 20}, | 
 |                                     green: {fill: 'green', stroke: '#fff', lineWidth: 2, fontSize: 20} | 
 |                                 }, | 
 |                             }, | 
 |                             silent: true, | 
 |                             emphasis: { | 
 |                                 style: { | 
 |                                     text: 'emphasis: {red|red} over {green|green}\nText {below|over} green', | 
 |                                     rich: { | 
 |                                         below: {fontSize: 40} | 
 |                                     } | 
 |                                 } | 
 |                             } | 
 |                         }, | 
 |                         textConfig: { | 
 |                             position: 'inside' | 
 |                         } | 
 |                     }, { | 
 |                         type: 'circle', | 
 |                         shape: {cx: 300, cy: 140, r: 40}, | 
 |                         style: {fill: 'green'}, | 
 |                         // textContent do not set z2, but auto follow the circle z2. | 
 |                         textContent: { | 
 |                             type: 'text', | 
 |                             style: { | 
 |                                 text: 'text should be always\n{over|over} all circles.', | 
 |                                 rich: {over: {fontSize: 30}} | 
 |                             }, | 
 |                             silent: true, | 
 |                             emphasis: { | 
 |                                 z2: 110 | 
 |                             } | 
 |                         }, | 
 |                         textConfig: { | 
 |                             position: 'inside' | 
 |                         }, | 
 |                         z2: 80 | 
 |  | 
 |                     }] | 
 |                 }; | 
 |             } | 
 |  | 
 |             var chart = testHelper.create(echarts, 'z_order_test', { | 
 |                 title: [ | 
 |                     'z order test. Please **hover any of them**.' | 
 |                 ], | 
 |                 option: createOption(renderItem) | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |  | 
 |             var option = { | 
 |                 xAxis: {scale: true, min: 0.75, max: 3}, | 
 |                 yAxis: {}, | 
 |                 series: [{ | 
 |                     type: 'custom', | 
 |                     renderItem: function (params, api) { | 
 |                         var shape0 = {x: 0, y: 30, width: 100, height: 50}; | 
 |                         var shape1 = {x: 30, y: 50, width: 100, height: 50}; | 
 |                         var shape2 = {x: 60, y: 70, width: 100, height: 50}; | 
 |                         var position = api.coord([api.value(0), api.value(1)]); | 
 |                         var name = api.value(2); | 
 |  | 
 |                         var map = { | 
 |                             legacy: { | 
 |                                 type: 'group', | 
 |                                 x: position[0], | 
 |                                 y: position[1], | 
 |                                 children: [{ | 
 |                                     type: 'rect', | 
 |                                     shape: shape0, | 
 |                                     style: {fill: '#333'} | 
 |                                 }, { | 
 |                                     type: 'rect', | 
 |                                     shape: shape1, | 
 |                                     style: { | 
 |                                         fill: '#555', | 
 |                                         text: 'has inner text', | 
 |                                         textFill: 'white', | 
 |                                         textPostion: 'insideTop' | 
 |                                     }, | 
 |                                     styleEmphasis: {textFill: 'yellow'} | 
 |                                 }, { | 
 |                                     type: 'rect', | 
 |                                     shape: shape2, | 
 |                                     style: {fill: '#500'}, | 
 |                                     styleEmphasis: false | 
 |                                 }] | 
 |                             }, | 
 |                             ec5: { | 
 |                                 type: 'group', | 
 |                                 x: position[0], | 
 |                                 y: position[1], | 
 |                                 children: [{ | 
 |                                     type: 'rect', | 
 |                                     shape: shape0, | 
 |                                     style: {fill: '#333'}, | 
 |                                 }, { | 
 |                                     type: 'rect', | 
 |                                     shape: shape1, | 
 |                                     style: {fill: '#555', text: 'has inner text'}, | 
 |                                     textContent: { | 
 |                                         style: {fill: 'white'}, | 
 |                                         emphasis: {style: {fill: 'yellow'}} | 
 |                                     }, | 
 |                                     textConfig: {position: 'insideTop'} | 
 |                                 }, { | 
 |                                     type: 'rect', | 
 |                                     shape: shape2, | 
 |                                     style: {fill: '#500'}, | 
 |                                     emphasis: { | 
 |                                         // set false to disable lift color and z2. | 
 |                                         style: false | 
 |                                     } | 
 |                                 }] | 
 |                             } | 
 |                         }; | 
 |  | 
 |                         return map[name]; | 
 |                     }, | 
 |                     data: [[1, 1, 'legacy'], [2, 1, 'ec5']] | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'hover_style_disable', { | 
 |                 title: [ | 
 |                     'Hover style disable: hover each group of elements,', | 
 |                     'all of the elements should lift color and z2 **except the red rect**' | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |         require(['echarts'], function (echarts) { | 
 |  | 
 |             var option = { | 
 |                 xAxis: {scale: true, min: 0.75, max: 3}, | 
 |                 yAxis: {}, | 
 |                 series: [{ | 
 |                     type: 'custom', | 
 |                     renderItem: function (params, api) { | 
 |                         var shape0 = {x: 00, y: 30, width: 100, height: 50}; | 
 |                         var shape1 = {x: 30, y: 50, width: 100, height: 50}; | 
 |                         var shape2 = {x: 60, y: 70, width: 100, height: 50}; | 
 |                         var position = api.coord([api.value(0), api.value(1)]); | 
 |                         var name = api.value(2); | 
 |                         var useHover = !!api.value(3); | 
 |                         var map = { | 
 |                             legacy: { | 
 |                                 type: 'group', | 
 |                                 x: position[0], | 
 |                                 y: position[1], | 
 |                                 children: [{ | 
 |                                     type: 'rect', | 
 |                                     shape: shape0, | 
 |                                     style: api.style({fill: '#222', text: 'legacy'}), | 
 |                                     styleEmphasis: useHover ? {fill: 'red', textFill: 'yellow'} : false | 
 |                                 }] | 
 |                             }, | 
 |                             ec5: { | 
 |                                 type: 'group', | 
 |                                 x: position[0], | 
 |                                 y: position[1], | 
 |                                 children: [{ | 
 |                                     type: 'rect', | 
 |                                     shape: shape0, | 
 |                                     style: {fill: '#222'}, | 
 |                                     textContent: { | 
 |                                         style: {text: 'ec5_api'}, | 
 |                                         emphasis: {style: useHover ? {fill: 'yellow'} : false} | 
 |                                     }, | 
 |                                     textConfig: {position: 'inside'}, | 
 |                                     emphasis: {style: useHover ? {fill: 'red'} : false} | 
 |                                 }] | 
 |                             } | 
 |                         }; | 
 |  | 
 |                         return map[name]; | 
 |                     }, | 
 |                     data: [[1, 1, 'legacy', 1], [2, 1, 'ec5', 1]] | 
 |                 }] | 
 |             }; | 
 |  | 
 |             var chart = testHelper.create(echarts, 'hover_style_remove', { | 
 |                 title: [ | 
 |                     'Hover style remove test: ', | 
 |                     '(1) Hover each: become **red rect, yellow text**', | 
 |                     '(2) Click "disable hover style", elements should more to right a bit.', | 
 |                     '(3) Hover each again: should no hover style', | 
 |                     '(4) Click "enable hover style", elements should more to left a bit.', | 
 |                     '(5) Check whether resume to (1)', | 
 |                 ], | 
 |                 height: 300, | 
 |                 option: option, | 
 |                 buttons: [{ | 
 |                     text: 'disable hover style', | 
 |                     onclick: function () { | 
 |                         chart.setOption({ | 
 |                             xAxis: {scale: true, min: 0.75, max: 7}, | 
 |                             series: { | 
 |                                 type: 'custom', | 
 |                                 data: [[3, 1, 'legacy', 0], [6, 1, 'ec5', 0]] | 
 |                             } | 
 |                         }) | 
 |                     } | 
 |                 }, { | 
 |                     text: 'enable hover style', | 
 |                     onclick: function () { | 
 |                         chart.setOption({ | 
 |                             xAxis: {scale: true, min: 0.75, max: 3}, | 
 |                             series: { | 
 |                                 type: 'custom', | 
 |                                 data: [[1, 1, 'legacy', 1], [2, 1, 'ec5', 1]] | 
 |                             } | 
 |                         }) | 
 |                     } | 
 |                 }] | 
 |             }); | 
 |         }); | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     </body> | 
 | </html> | 
 |  |