@antv/g6
Version:
graph visualization frame work
53 lines (47 loc) • 1.63 kB
JavaScript
/**
* @fileOverview shape base class
* @author huangtonger@aliyun.com
*/
var Util = require('../util/');
var Shape = {};
var ShapeBase = {
draw: function draw() {}
};
var ShapeManagerBase = {
defaultShapeType: null,
getShape: function getShape(type, inputDefaultShape) {
var shape = this[type] || this[inputDefaultShape] || this[this.defaultShapeType] || ShapeBase;
return shape;
},
getExtendShape: function getExtendShape(extendShapeName, defaultShapeType) {
var _this = this;
if (Util.isArray(extendShapeName)) {
var rst = {};
extendShapeName.forEach(function (subExtendShapeName) {
rst = Util.mix({}, rst, _this.getShape(subExtendShapeName, defaultShapeType));
});
return rst;
}
return this.getShape(extendShapeName, defaultShapeType);
}
};
Shape.registerShapeManager = function (type, cfg) {
var shapeManager = Util.mix({}, ShapeManagerBase, cfg);
var Type = Util.upperFirst(type);
Shape[Type] = shapeManager;
Shape['register' + Type] = function (shapeType, cfg, extendShapeName, defaultShapeType) {
// if (shapeManager[shapeType]) {
// throw new Error(shapeType + ' was already exist, please choose another name.');
// }
if (Util.isNil(extendShapeName) && Util.isNil(defaultShapeType)) {
extendShapeName = shapeType;
}
var extendShape = shapeManager.getExtendShape(extendShapeName, defaultShapeType);
var shapeObj = Util.mix(true, {}, extendShape, cfg);
shapeObj.type = shapeType;
shapeManager[shapeType] = shapeObj;
return shapeObj;
};
return shapeManager;
};
module.exports = Shape;