import { upperFirst, isArray, Array } from '../../util/common'; import Shape from './shape'; var SHAPE_MAP = {}; var INDEX = '_INDEX'; function getComparer(compare) { return function (left, right) { var result = compare(left, right); return result === 0 ? left[INDEX] - right[INDEX] : result; }; } export default { getGroupClass() {}, getChildren() { return this.get('children'); }, addShape(type) { var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var shapeType = SHAPE_MAP[type]; if (!shapeType) { shapeType = upperFirst(type); SHAPE_MAP[type] = shapeType; } var shape = new Shape[shapeType](cfg); this.add(shape); return shape; }, addGroup(cfg) { var groupClass = this.getGroupClass(); var rst = new groupClass(cfg); this.add(rst); return rst; }, contain(item) { var children = this.get('children'); return children.indexOf(item) > -1; }, sort() { var children = this.get('children'); for (var i = 0, len = children.length; i < len; i++) { var child = children[i]; child[INDEX] = i; } children.sort(getComparer(function (obj1, obj2) { return obj1.get('zIndex') - obj2.get('zIndex'); })); return this; }, drawChildren(context) { var children = this.get('children'); for (var i = 0, len = children.length; i < len; i++) { var child = children[i]; child.draw(context); } return this; }, clear() { var children = this.get('children'); while (children.length !== 0) { children[children.length - 1].remove(true); } return this; }, add(items) { var self = this; var children = self.get('children'); if (!isArray(items)) { items = [items]; } for (var i = 0, len = items.length; i < len; i++) { var item = items[i]; var parent = item.get('parent'); if (parent) { var descendants = parent.get('children'); Array.remove(descendants, item); } self._setEvn(item); children.push(item); } return self; }, _setEvn(item) { var self = this; var { context, canvas, aria } = self._attrs; var { isGroup, type } = item._attrs; item._attrs.parent = self; item._attrs.context = context; item._attrs.canvas = canvas; // 是否需要无障碍处理 if (aria && item._attrs.aria !== false) { item._attrs.aria = aria; } if (type === 'text' && canvas && canvas.get('fontFamily')) { item._attrs.attrs.fontFamily = item._attrs.attrs.fontFamily || canvas.get('fontFamily'); } var clip = item._attrs.attrs.clip; if (clip) { clip._attrs.parent = self; clip._attrs.context = context; clip._attrs.canvas = canvas; } if (isGroup) { var children = item._attrs.children; for (var i = 0, len = children.length; i < len; i++) { item._setEvn(children[i]); } } }, _getAriaLabel() { var { aria, ariaLabel, children } = this._attrs; // 主动关闭 if (!aria) return; var childAriaLabels = []; if (children && children.length) { for (var i = 0, len = children.length; i < len; i++) { var _childAriaLabel = children[i].getAriaLabel(); if (_childAriaLabel) { childAriaLabels.push(_childAriaLabel); } } } var childAriaLabel = childAriaLabels.join(' '); // 2个都有时拼接成完整句子 if (ariaLabel && childAriaLabel) { return "".concat(ariaLabel, " ").concat(childAriaLabel, " "); } // 只有1个,或者都没有 return ariaLabel || childAriaLabel; } };