| /* | 
 | * 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. | 
 | */ | 
 |  | 
 | import { init, EChartsType } from '../../../src/echarts.all'; | 
 |  | 
 | import { | 
 |     curry as zrUtilCurry, | 
 |     bind as zrUtilBind, | 
 |     extend as zrUtilExtend | 
 | } from 'zrender/src/core/util'; | 
 | import { ComponentMainType } from '../../../src/util/types'; | 
 | import Group from 'zrender/src/graphic/Group'; | 
 | import Element from 'zrender/src/Element'; | 
 | import GlobalModel from '../../../src/model/Global'; | 
 |  | 
 |  | 
 | export function createChart(params?: { | 
 |     width?: number, | 
 |     height?: number, | 
 |     theme?: Parameters<typeof init>[1], | 
 |     opts?: Parameters<typeof init>[2] | 
 | }): EChartsType { | 
 |     params = params || {}; | 
 |     const el = document.createElement('div'); | 
 |     el.style.cssText = [ | 
 |         'visibility:hidden', | 
 |         'width:' + (params.width || '500') + 'px', | 
 |         'height:' + (params.height || '400') + 'px', | 
 |         'position:absolute', | 
 |         'bottom:0', | 
 |         'right:0' | 
 |     ].join(';'); | 
 |     Object.defineProperty(el, 'clientWidth', { | 
 |         get() { | 
 |             return params.width || 500; | 
 |         } | 
 |     }); | 
 |     Object.defineProperty(el, 'clientHeight', { | 
 |         get() { | 
 |             return params.height || 400; | 
 |         } | 
 |     }); | 
 |     const chart = init(el, params.theme, params.opts); | 
 |     return chart; | 
 | }; | 
 |  | 
 | export function removeChart(chart: EChartsType): void { | 
 |     chart.dispose(); | 
 | }; | 
 |  | 
 | export const extend = zrUtilExtend; | 
 |  | 
 | export function g(id: string): HTMLElement { | 
 |     return document.getElementById(id); | 
 | } | 
 |  | 
 | export function removeEl(el: HTMLElement): void { | 
 |     const parent = parentEl(el); | 
 |     parent && parent.removeChild(el); | 
 | } | 
 |  | 
 | export function parentEl(el: HTMLElement): HTMLElement { | 
 |     //parentElement for ie. | 
 |     return el.parentElement || el.parentNode as HTMLElement; | 
 | } | 
 |  | 
 | export function getHeadEl(): HTMLElement { | 
 |     return document.head | 
 |         || document.getElementsByTagName('head')[0] | 
 |         || document.documentElement; | 
 | } | 
 |  | 
 | export const curry = zrUtilCurry; | 
 |  | 
 | export const bind = zrUtilBind; | 
 |  | 
 | // /** | 
 | //  * @public | 
 | //  * @param {Array.<string>} deps | 
 | //  * @param {Array.<Function>} testFnList | 
 | //  * @param {Function} done All done callback. | 
 | //  */ | 
 | // export function resetAMDLoaderEachTest(deps, testFnList, done) { | 
 | //     const i = -1; | 
 | //     next(); | 
 |  | 
 | //     function next() { | 
 | //         i++; | 
 | //         if (testFnList.length <= i) { | 
 | //             done(); | 
 | //             return; | 
 | //         } | 
 |  | 
 | //         utHelper.resetAMDLoader(function () { | 
 | //             global.require(deps, function () { | 
 | //                 testFnList[i].apply(null, arguments); | 
 | //                 next(); | 
 | //             }); | 
 | //         }); | 
 | //     } | 
 | // }; | 
 |  | 
 | export function getGraphicElements( | 
 |     chartOrGroup: EChartsType | Group, | 
 |     mainType: ComponentMainType, | 
 |     index?: number | 
 | ): Element[] { | 
 |     if ((chartOrGroup as Group).type === 'group') { | 
 |         return (chartOrGroup as Group).children(); | 
 |     } | 
 |     else { | 
 |         const viewGroup = getViewGroup(chartOrGroup as EChartsType, mainType, index); | 
 |         if (viewGroup) { | 
 |             const list: Element[] = [viewGroup]; | 
 |             viewGroup.traverse(function (el: Element) { | 
 |                 list.push(el); | 
 |             }); | 
 |             return list; | 
 |         } | 
 |         else { | 
 |             return []; | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | export function getViewGroup( | 
 |     chart: EChartsType, | 
 |     mainType: ComponentMainType, | 
 |     index?: number | 
 | ): Group { | 
 |     const component = getECModel(chart).getComponent(mainType, index); | 
 |     return component ? chart[ | 
 |         mainType === 'series' ? '_chartsMap' : '_componentsMap' | 
 |     ][component.__viewId].group : null; | 
 | } | 
 |  | 
 | export function getECModel(chart: EChartsType): GlobalModel { | 
 |     // @ts-ignore | 
 |     return chart.getModel(); | 
 | } |