@visactor/vgrammar-core
Version:
VGrammar is a visual grammar library
182 lines (166 loc) • 9.18 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerCircleAxis = exports.registerLineAxis = exports.registerAxis = exports.Axis = exports.generateCoordinateAxisAttribute = exports.generateCircleAxisAttributes = exports.generateLineAxisAttributes = void 0;
const vutils_1 = require("@visactor/vutils"), vrender_components_1 = require("@visactor/vrender-components"), enums_1 = require("../graph/enums"), scale_1 = require("./scale"), encode_1 = require("../graph/mark/encode"), util_1 = require("../parse/util"), factory_1 = require("../core/factory"), generateLineAxisAttributes = (scale, theme, addition, tickCount) => {
var _a, _b, _c, _d;
const axisTheme = null !== (_b = null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.axis) && void 0 !== _b ? _b : {};
if (!scale) return (0, vutils_1.merge)({}, axisTheme, null != addition ? addition : {});
const items = [ (null !== (_d = null === (_c = scale.tickData) || void 0 === _c ? void 0 : _c.call(scale, tickCount)) && void 0 !== _d ? _d : []).map((tick => ({
id: tick.index,
label: tick.tick,
value: tick.value,
rawValue: tick.tick
}))) ];
return (0, vutils_1.merge)({}, axisTheme, {
items: items
}, null != addition ? addition : {});
};
exports.generateLineAxisAttributes = generateLineAxisAttributes;
const generateCircleAxisAttributes = (scale, theme, addition, tickCount) => {
var _a, _b, _c, _d;
const axisTheme = null !== (_b = null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.circleAxis) && void 0 !== _b ? _b : {};
if (!scale) return (0, vutils_1.merge)({}, axisTheme, null != addition ? addition : {});
const items = [ (null !== (_d = null === (_c = scale.tickData) || void 0 === _c ? void 0 : _c.call(scale, tickCount)) && void 0 !== _d ? _d : []).map((tick => ({
id: tick.index,
label: tick.tick,
value: tick.value,
rawValue: tick.tick
}))) ];
return (0, vutils_1.merge)({}, axisTheme, {
items: items
}, null != addition ? addition : {});
};
exports.generateCircleAxisAttributes = generateCircleAxisAttributes;
const generateCoordinateAxisAttribute = (scale, coordinate, inside, baseValue, layout, isGrid) => {
var _a;
const axisPosition = scale.getCoordinateAxisPosition();
layout && "auto" === layout.position && (layout.position = inside ? "content" : axisPosition);
const axisPoints = scale.getCoordinateAxisPoints(baseValue);
if (axisPoints) {
const res = {
start: axisPoints[0],
end: axisPoints[1],
verticalFactor: ("top" === axisPosition || "left" === axisPosition ? -1 : 1) * (inside ? -1 : 1) * ((null === (_a = scale.getSpec().range) || void 0 === _a ? void 0 : _a.reversed) ? -1 : 1)
};
if (isGrid && "polar" === coordinate.type) {
const angle = coordinate.angle();
res.center = coordinate.origin(), res.startAngle = angle[0], res.endAngle = angle[1];
}
return res;
}
const radius = coordinate.radius(), angle = coordinate.angle();
return {
center: coordinate.origin(),
radius: radius[1],
innerRadius: radius[0],
inside: inside,
startAngle: angle[0],
endAngle: angle[1]
};
};
exports.generateCoordinateAxisAttribute = generateCoordinateAxisAttribute;
class Axis extends scale_1.ScaleComponent {
constructor(view, group, mode) {
super(view, enums_1.ComponentEnum.axis, group), this.spec.componentType = enums_1.ComponentEnum.axis,
this.mode = mode;
}
parseAddition(spec) {
return super.parseAddition(spec), this.axisType(spec.axisType), this.tickCount(spec.tickCount),
this.inside(spec.inside), this.baseValue(spec.baseValue), this;
}
scale(scale) {
return super.scale(scale), this._axisComponentType = null, this;
}
axisType(axisType) {
return this.spec.axisType = axisType, this._axisComponentType = null, this._prepareRejoin(),
this.commit(), this;
}
addGraphicItem(attrs, groupKey) {
const initialAttributes = (0, vutils_1.merge)({
x: 0,
y: 0,
start: {
x: 0,
y: 0
},
end: {
x: 0,
y: 0
}
}, attrs), graphicItem = factory_1.Factory.createGraphicComponent(this._getAxisComponentType(), initialAttributes, {
mode: this.mode,
skipDefault: this.spec.skipTheme
});
return super.addGraphicItem(initialAttributes, groupKey, graphicItem);
}
tickCount(tickCount) {
const scaleGrammar = (0, vutils_1.isString)(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;
return scaleGrammar && scaleGrammar.tickCount(tickCount), this.setFunctionSpec(tickCount, "tickCount");
}
inside(inside) {
return this.setFunctionSpec(inside, "inside");
}
baseValue(baseValue) {
return this.setFunctionSpec(baseValue, "baseValue");
}
getAxisComponentType() {
return this._axisComponentType;
}
_updateComponentEncoders() {
const scaleGrammar = (0, vutils_1.isString)(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale, encoders = Object.assign({
update: {}
}, this.spec.encode), componentEncoders = Object.keys(encoders).reduce(((res, state) => {
const encoder = encoders[state];
return encoder && (res[state] = {
callback: (datum, element, parameters) => {
var _a, _b;
const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();
let addition = (0, encode_1.invokeEncoder)(encoder, datum, element, parameters);
const inside = (0, util_1.invokeFunctionType)(this.spec.inside, parameters, datum, element), baseValue = (0,
util_1.invokeFunctionType)(this.spec.baseValue, parameters, datum, element), coordinate = null === (_a = null == scaleGrammar ? void 0 : scaleGrammar.getCoordinate) || void 0 === _a ? void 0 : _a.call(scaleGrammar);
coordinate && (addition = Object.assign((0, exports.generateCoordinateAxisAttribute)(scaleGrammar, coordinate, inside, baseValue, this.spec.layout), addition));
const scale = null === (_b = null == scaleGrammar ? void 0 : scaleGrammar.getScale) || void 0 === _b ? void 0 : _b.call(scaleGrammar), tickCount = (0,
util_1.invokeFunctionType)(this.spec.tickCount, parameters, datum, element);
switch (this._getAxisComponentType()) {
case enums_1.AxisEnum.lineAxis:
return (0, exports.generateLineAxisAttributes)(scale, theme, addition, tickCount);
case enums_1.AxisEnum.circleAxis:
return (0, exports.generateCircleAxisAttributes)(scale, theme, addition, tickCount);
}
return addition;
}
}), res;
}), {});
this._encoders = componentEncoders;
}
_getAxisComponentType() {
var _a;
if (this._axisComponentType) return this._axisComponentType;
let type = this.spec.axisType;
if ((0, vutils_1.isNil)(type)) {
const scaleGrammar = (0, vutils_1.isString)(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;
type = (null === (_a = null == scaleGrammar ? void 0 : scaleGrammar.getCoordinate) || void 0 === _a ? void 0 : _a.call(scaleGrammar)) ? scaleGrammar.getCoordinateAxisPoints() ? "line" : "circle" : "line";
}
return this._axisComponentType = "circle" === type ? enums_1.AxisEnum.circleAxis : enums_1.AxisEnum.lineAxis,
this._axisComponentType;
}
}
exports.Axis = Axis, Axis.componentType = enums_1.ComponentEnum.axis;
const registerAxis = () => {
factory_1.Factory.registerGraphicComponent(enums_1.AxisEnum.lineAxis, ((attrs, options) => new vrender_components_1.LineAxis(attrs, options))),
factory_1.Factory.registerGraphicComponent(enums_1.AxisEnum.circleAxis, (attrs => new vrender_components_1.CircleAxis(attrs))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.axis, Axis);
};
exports.registerAxis = registerAxis;
const registerLineAxis = () => {
factory_1.Factory.registerGraphicComponent(enums_1.AxisEnum.lineAxis, ((attrs, options) => new vrender_components_1.LineAxis(attrs, options))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.axis, Axis);
};
exports.registerLineAxis = registerLineAxis;
const registerCircleAxis = () => {
factory_1.Factory.registerGraphicComponent(enums_1.AxisEnum.circleAxis, (attrs => new vrender_components_1.CircleAxis(attrs))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.axis, Axis);
};
exports.registerCircleAxis = registerCircleAxis;
//# sourceMappingURL=axis.js.map