UNPKG

chartx

Version:

Data Visualization Chart Library

428 lines (424 loc) 13 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _component = _interopRequireDefault(require("../component")); var _canvax = _interopRequireDefault(require("canvax")); var _tools = require("../../utils/tools"); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var _ = _canvax.default._, event = _canvax.default.event; var Line = _canvax.default.Shapes.Line; var Circle = _canvax.default.Shapes.Circle; var Text = _canvax.default.Display.Text; var markCloumn = /*#__PURE__*/function (_Component) { function markCloumn(opt, app) { var _this; (0, _classCallCheck2.default)(this, markCloumn); _this = _callSuper(this, markCloumn, [opt, app]); _this.name = "markcloumn"; _.extend(true, _this, (0, _tools.getDefaultProps)(markCloumn.defaultProps()), opt); _this.sprite = new _canvax.default.Display.Sprite(); _this.app.graphsSprite.addChild(_this.sprite, 0); _this._line = null; _this._lineSp = new _canvax.default.Display.Sprite(); _this.sprite.addChild(_this._lineSp); _this.nodes = []; _this._nodes = new _canvax.default.Display.Sprite(); _this.sprite.addChild(_this._nodes); _this._labels = new _canvax.default.Display.Sprite(); _this.sprite.addChild(_this._labels); _this._nameSp = new _canvax.default.Display.Sprite(); _this.sprite.addChild(_this._nameSp); return _this; } (0, _inherits2.default)(markCloumn, _Component); return (0, _createClass2.default)(markCloumn, [{ key: "draw", value: function draw(opt) { !opt && (opt = {}); this.width = opt.width; this.height = opt.height; this.origin = opt.origin; this.sprite.context.x = this.origin.x; this.sprite.context.y = this.origin.y; this._widget(); } }, { key: "reset", value: function reset(opt) { opt && _.extend(true, this, opt); this._widget(); } }, { key: "_widget", value: function _widget() { var me = this; var _coord = this.app.getComponent({ name: 'coord' }); var _xAxis = _coord._xAxis; var xNode; if (this.xVal != null) { xNode = _xAxis.getNodeInfoOfVal(this.xVal); } ; if (this.xPixel != null) { xNode = _xAxis.getNodeInfoOfX(this.xPixel); } ; if (!xNode) { return; } ; me.nodes = []; me._drawLine(xNode); me._drawTitle(xNode); me.on("complete", function () { me._drawNodes(xNode); me._drawLabels(xNode); }); var i = 0; var _graphs = this.app.getGraphs(); _.each(_graphs, function (_g) { function _f() { i++; if (me.markTo && _.flatten([_g.field]).indexOf(me.markTo) == -1) { //非markTo 的graph 跳过 } else { var nodes = _g.getNodesOfPos(xNode.x); if (me.markTo) { var _node = _.find(nodes, function (node) { return node.field == me.markTo; }); _node && (me.nodes = [_node]); } else { me.nodes = me.nodes.concat(nodes); } ; } ; if (i == _graphs.length) { me.fire("complete"); } ; } ; if (_g.inited) { _f(); } else { _g.on('complete', function () { _f(); }); } ; }); } }, { key: "_drawLine", value: function _drawLine(xNode) { var me = this; if (!me.line.enabled) return; var lineOpt = _.extend(true, { x: parseInt(xNode.x), start: { x: 0, y: 0 }, end: { x: 0, y: -me.height }, //默认贯穿整个画布 lineWidth: me.line.lineWidth, strokeStyle: me.line.strokeStyle, //"#cccccc", lineType: me.line.lineType, lineDash: me.line.lineDash }, this.line); if (me.line.endY != null) { var y = 0; if (_.isNumber(me.line.endY)) { y = me.line.endY; } ; if (me.line.endY == 'auto') { _.each(me.nodes, function (node) { y = Math.min(node.y, y); }); } ; lineOpt.end.y = y; } ; if (this._line) { _.extend(this._line.context, lineOpt); } else { this._line = new Line({ context: lineOpt }); this._lineSp.addChild(this._line); this._line.on(event.types.get(), function (e) { e.eventInfo = { xAxis: {}, nodes: me.nodes }; if (me.xVal != null) { e.eventInfo.xAxis.value = me.xVal; e.eventInfo.xAxis.text = me.xVal + ''; e.eventInfo.title = me.xVal + ''; } ; me.app.fire(e.type, e); }); } ; //线条渲染结束 } }, { key: "_drawNodes", value: function _drawNodes() { var me = this; if (!me.node.enabled) return; me._nodes.removeAllChildren(); _.each(me.nodes, function (nodeData) { var nodeCtx = _.extend({ x: nodeData.x, y: nodeData.y, cursor: "pointer", r: me.node.radius, lineWidth: me.node.lineWidth || nodeData.lineWidth, strokeStyle: me.node.strokeStyle || nodeData.color, fillStyle: me.node.fillStyle || nodeData.fillStyle }); var _node = new Circle({ context: nodeCtx }); _node.nodeData = nodeData; _node.on(event.types.get(), function (e) { e.eventInfo = { //iNode : this.iNode, xAxis: {}, nodes: [nodeData] }; if (me.xVal != null) { e.eventInfo.xAxis.value = me.xVal; e.eventInfo.xAxis.text = me.xVal + ''; e.eventInfo.title = me.xVal + ''; } ; me.app.fire(e.type, e); }); me._nodes.addChild(_node); }); } }, { key: "_drawLabels", value: function _drawLabels() { var me = this; if (!me.node.enabled) return; me._labels.removeAllChildren(); _.each(me.nodes, function (nodeData) { var labelCtx = { x: nodeData.x, y: nodeData.y - me.node.radius - 2, fillStyle: me.label.fontColor || nodeData.color, fontSize: me.label.fontSize, textAlign: "center", textBaseline: "bottom" }; var text = me.label.text; if (_.isFunction(text)) { text = text.apply(me, [nodeData]); } ; if (!text) return; var _label = new Text(text, { context: labelCtx }); me._labels.addChild(_label); //矫正label位置,可能出去了,目前只做了最右侧的检测 if (_label.localToGlobal().x + _label.getTextWidth() / 2 > me.app.width) { _label.context.x = me.app.width - _label.getTextWidth() / 2 - _label.parent.localToGlobal().x; } ; }); } }, { key: "_drawTitle", value: function _drawTitle(xNode) { var me = this; if (!me.title.enabled) return; me._nameSp.removeAllChildren(); var markcloumnGroupInd = this.app.getComponents({ name: 'markcloumn' }).indexOf(this); var y = -me.height + 4 + markcloumnGroupInd * 20; var nameCtx = { x: parseInt(xNode.x) + 4, y: y, fillStyle: me.title.fontColor, fontSize: me.title.fontSize, textAlign: "left", textBaseline: "top" }; var text = me.title.text; if (_.isFunction(text)) { text = text.apply(me); } ; if (!text) return; var _name = new Text(text, { context: nameCtx }); me._nameSp.addChild(_name); //矫正label位置,可能出去了,目前只做了最右侧的检测 // if( _name.localToGlobal().x + _name.getTextWidth()/2 > me.app.width ){ // _name.context.x = me.app.width - _name.getTextWidth()/2-_name.parent.localToGlobal().x; // }; var _coordWidth = me.app.getCoord().width - 4; if (xNode.x + 4 + _name.getTextWidth() > _coordWidth) { _name.context.x = _coordWidth - _name.getTextWidth(); } } }], [{ key: "defaultProps", value: function defaultProps() { return { xVal: { detail: 'x的value值', default: null }, xPixel: { detail: 'x方向的具体像素值', default: null }, markTo: { detail: '标准哪个目标字段,主要用作折线图', documentation: '如果设置了这个字段,那么line的起点将是这个graphs上的node节点', default: null }, line: { detail: '线的配置', propertys: { enabled: { detail: '是否开启', default: true }, lineWidth: { detail: '线宽', default: 1 }, strokeStyle: { detail: '线的颜色', default: '#ccc' }, lineType: { detail: '线的样式,虚线(dashed)实线(solid)', default: 'solid' }, startY: { detail: 'startY', default: 0 }, endY: { detail: 'startY', default: null //'node' }, lineDash: { detail: '虚线样式', default: [3, 6] } } }, node: { detail: '数据图形节点', propertys: { enabled: { detail: '是否开启', default: true }, radius: { detail: '节点半径', default: 5 }, fillStyle: { detail: '节点图形的背景色', default: '#ffffff' }, strokeStyle: { detail: '节点图形的描边色,默认和line.strokeStyle保持一致', default: null }, lineWidth: { detail: '节点图形边宽大小', default: 2 } } }, label: { detail: '文本', propertys: { enabled: { detail: '是否开启', default: false }, fontColor: { detail: '文本字体颜色', default: null }, fontSize: { detail: '文本字体大小', default: 12 }, text: { detail: '文本内容', documentation: "可以是函数", default: null }, format: { detail: '文本格式化函数', default: null } } }, title: { detail: '名称', propertys: { enabled: { detail: '是否开启', default: false }, fontColor: { detail: '文本字体颜色', default: '#666' }, fontSize: { detail: '文本字体大小', default: 12 }, text: { detail: '文本内容', documentation: "可以是函数", default: null }, format: { detail: '文本格式化函数', default: null } } } }; } }]); }(_component.default); _component.default.registerComponent(markCloumn, 'markcloumn'); var _default = exports.default = markCloumn;