@visactor/vgrammar-core
Version:
VGrammar is a visual grammar library
208 lines (192 loc) • 11.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerCircleGrid = exports.registerLineGrid = exports.registerGrid = exports.Grid = exports.generateCircleAxisGridAttributes = exports.generateLineAxisGridAttributes = 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"), axis_1 = require("./axis"), factory_1 = require("../core/factory"), generateLineAxisGridAttributes = (scale, theme, addition, tickCount) => {
var _a, _b, _c, _d;
const gridTheme = null !== (_b = null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.grid) && void 0 !== _b ? _b : {};
if (!scale) return (0, vutils_1.merge)({}, gridTheme, 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)({}, gridTheme, {
items: items
}, null != addition ? addition : {});
};
exports.generateLineAxisGridAttributes = generateLineAxisGridAttributes;
const generateCircleAxisGridAttributes = (scale, theme, addition, tickCount) => {
var _a, _b, _c, _d;
const gridTheme = null !== (_b = null === (_a = null == theme ? void 0 : theme.components) || void 0 === _a ? void 0 : _a.circleGrid) && void 0 !== _b ? _b : {};
if (!scale) return (0, vutils_1.merge)({}, gridTheme, 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)({}, gridTheme, {
items: items
}, null != addition ? addition : {});
};
exports.generateCircleAxisGridAttributes = generateCircleAxisGridAttributes;
class Grid extends scale_1.ScaleComponent {
constructor(view, group, mode) {
super(view, enums_1.ComponentEnum.grid, group), this.spec.componentType = enums_1.ComponentEnum.grid,
this.mode = mode;
}
parseAddition(spec) {
return super.parseAddition(spec), this.target(spec.target), this.gridType(spec.gridType),
this.gridShape(spec.gridShape), this;
}
scale(scale) {
return super.scale(scale), this._gridComponentType = null, this;
}
gridType(gridType) {
return this.spec.gridType = gridType, this._gridComponentType = null, this._prepareRejoin(),
this.commit(), this;
}
gridShape(gridShape) {
return this.spec.gridShape = gridShape, this.commit(), this;
}
target(axis) {
if (this.spec.target) {
const prevAxis = (0, vutils_1.isString)(this.spec.target) ? this.view.getMarkById(this.spec.target) : this.spec.target;
this.detach(prevAxis);
}
this.spec.target = axis;
const nextAxis = (0, vutils_1.isString)(axis) ? this.view.getMarkById(axis) : axis;
return this.attach(nextAxis), this._targetAxis = nextAxis, this._gridComponentType = null,
this._updateComponentEncoders(), this.commit(), this;
}
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");
}
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._getGridComponentType(), initialAttributes, {
mode: this.mode,
skipDefault: this.spec.skipTheme
});
return super.addGraphicItem(initialAttributes, groupKey, graphicItem);
}
_updateComponentEncoders() {
const 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, _c, _d;
const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();
let scaleGrammar, addition = (0, encode_1.invokeEncoder)(encoder, datum, element, parameters);
const baseValue = (0, util_1.invokeFunctionType)(this.spec.baseValue, parameters, datum, element);
if (this._targetAxis) {
const targetScale = null === (_a = this._targetAxis.getSpec()) || void 0 === _a ? void 0 : _a.scale;
scaleGrammar = (0, vutils_1.isString)(targetScale) ? this.view.getScaleById(targetScale) : targetScale;
const targetElement = this._targetAxis.elements[0];
if (targetElement) switch (this._getGridComponentType()) {
case enums_1.GridEnum.lineAxisGrid:
addition = Object.assign({
x: targetElement.getGraphicAttribute("x"),
y: targetElement.getGraphicAttribute("y"),
start: targetElement.getGraphicAttribute("start"),
end: targetElement.getGraphicAttribute("end"),
verticalFactor: null !== (_b = targetElement.getGraphicAttribute("verticalFactor")) && void 0 !== _b ? _b : 1
}, addition);
break;
case enums_1.GridEnum.circleAxisGrid:
addition = Object.assign({
x: targetElement.getGraphicAttribute("x"),
y: targetElement.getGraphicAttribute("y"),
center: targetElement.getGraphicAttribute("center"),
radius: targetElement.getGraphicAttribute("radius"),
innerRadius: targetElement.getGraphicAttribute("innerRadius"),
inside: targetElement.getGraphicAttribute("inside"),
startAngle: targetElement.getGraphicAttribute("startAngle"),
endAngle: targetElement.getGraphicAttribute("endAngle")
}, addition);
}
} else {
scaleGrammar = (0, vutils_1.isString)(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;
const inside = (0, util_1.invokeFunctionType)(this.spec.inside, parameters, datum, element), coordinate = null === (_c = null == scaleGrammar ? void 0 : scaleGrammar.getCoordinate) || void 0 === _c ? void 0 : _c.call(scaleGrammar);
coordinate && (addition = Object.assign((0, axis_1.generateCoordinateAxisAttribute)(scaleGrammar, coordinate, inside, baseValue, this.spec.layout, !0), addition));
}
this._getGridComponentType() === enums_1.GridEnum.lineAxisGrid && (addition = "line" !== this.spec.gridShape && this.spec.gridShape ? Object.assign({
center: addition.start,
closed: !0
}, addition, {
type: this.spec.gridShape
}) : Object.assign({}, addition, {
type: "line"
}));
const scale = null === (_d = null == scaleGrammar ? void 0 : scaleGrammar.getScale) || void 0 === _d ? void 0 : _d.call(scaleGrammar), tickCount = (0,
util_1.invokeFunctionType)(this.spec.tickCount, parameters, datum, element);
switch (this._getGridComponentType()) {
case enums_1.GridEnum.lineAxisGrid:
return (0, exports.generateLineAxisGridAttributes)(scale, theme, addition, tickCount);
case enums_1.GridEnum.circleAxisGrid:
return (0, exports.generateCircleAxisGridAttributes)(scale, theme, addition, tickCount);
}
return addition;
}
}), res;
}), {});
this._encoders = componentEncoders;
}
_getGridComponentType() {
var _a;
if (this._gridComponentType) return this._gridComponentType;
if (this.spec.gridType) if ("circle" === this.spec.gridType) this._gridComponentType = enums_1.GridEnum.circleAxisGrid; else this._gridComponentType = enums_1.GridEnum.lineAxisGrid; else if (this._targetAxis) {
switch (this._targetAxis.getAxisComponentType()) {
case enums_1.AxisEnum.circleAxis:
this._gridComponentType = enums_1.GridEnum.circleAxisGrid;
break;
case enums_1.AxisEnum.lineAxis:
default:
this._gridComponentType = enums_1.GridEnum.lineAxisGrid;
}
} else if (this.spec.scale) {
const scaleGrammar = (0, vutils_1.isString)(this.spec.scale) ? this.view.getScaleById(this.spec.scale) : this.spec.scale;
this._gridComponentType = (null === (_a = null == scaleGrammar ? void 0 : scaleGrammar.getCoordinate) || void 0 === _a ? void 0 : _a.call(scaleGrammar)) ? scaleGrammar.getCoordinateAxisPoints() ? enums_1.GridEnum.lineAxisGrid : enums_1.GridEnum.circleAxisGrid : enums_1.GridEnum.lineAxisGrid;
} else this._gridComponentType = enums_1.GridEnum.lineAxisGrid;
return this._gridComponentType;
}
}
exports.Grid = Grid, Grid.componentType = enums_1.ComponentEnum.grid;
const registerGrid = () => {
factory_1.Factory.registerGraphicComponent(enums_1.GridEnum.lineAxisGrid, ((attrs, options) => new vrender_components_1.LineAxisGrid(attrs, options))),
factory_1.Factory.registerGraphicComponent(enums_1.GridEnum.circleAxisGrid, ((attrs, options) => new vrender_components_1.CircleAxisGrid(attrs, options))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.grid, Grid);
};
exports.registerGrid = registerGrid;
const registerLineGrid = () => {
factory_1.Factory.registerGraphicComponent(enums_1.GridEnum.lineAxisGrid, ((attrs, options) => new vrender_components_1.LineAxisGrid(attrs, options))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.grid, Grid);
};
exports.registerLineGrid = registerLineGrid;
const registerCircleGrid = () => {
factory_1.Factory.registerGraphicComponent(enums_1.GridEnum.circleAxisGrid, ((attrs, options) => new vrender_components_1.CircleAxisGrid(attrs, options))),
factory_1.Factory.registerComponent(enums_1.ComponentEnum.grid, Grid);
};
exports.registerCircleGrid = registerCircleGrid;
//# sourceMappingURL=grid.js.map