@jiaminghi/charts
Version:
Lightweight charting
390 lines (347 loc) • 12.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.radarAxis = radarAxis;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _updater = require("../class/updater.class");
var _index = require("../config/index");
var _util = require("@jiaminghi/c-render/lib/plugin/util");
var _util2 = require("../util");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function radarAxis(chart) {
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var radar = option.radar;
var radarAxis = [];
if (radar) {
radarAxis = mergeRadarAxisDefaultConfig(radar);
radarAxis = calcRadarAxisCenter(radarAxis, chart);
radarAxis = calcRadarAxisRingRadius(radarAxis, chart);
radarAxis = calcRadarAxisLinePosition(radarAxis);
radarAxis = calcRadarAxisAreaRadius(radarAxis);
radarAxis = calcRadarAxisLabelPosition(radarAxis);
radarAxis = [radarAxis];
}
var radarAxisForUpdate = radarAxis;
if (radarAxis.length && !radarAxis[0].show) radarAxisForUpdate = [];
(0, _updater.doUpdate)({
chart: chart,
series: radarAxisForUpdate,
key: 'radarAxisSplitArea',
getGraphConfig: getSplitAreaConfig,
beforeUpdate: beforeUpdateSplitArea,
beforeChange: beforeChangeSplitArea
});
(0, _updater.doUpdate)({
chart: chart,
series: radarAxisForUpdate,
key: 'radarAxisSplitLine',
getGraphConfig: getSplitLineConfig,
beforeUpdate: beforeUpdateSplitLine,
beforeChange: beforeChangeSplitLine
});
(0, _updater.doUpdate)({
chart: chart,
series: radarAxisForUpdate,
key: 'radarAxisLine',
getGraphConfig: getAxisLineConfig
});
(0, _updater.doUpdate)({
chart: chart,
series: radarAxisForUpdate,
key: 'radarAxisLable',
getGraphConfig: getAxisLabelConfig
});
chart.radarAxis = radarAxis[0];
}
function mergeRadarAxisDefaultConfig(radar) {
return (0, _util2.deepMerge)((0, _util.deepClone)(_index.radarAxisConfig), radar);
}
function calcRadarAxisCenter(radarAxis, chart) {
var area = chart.render.area;
var center = radarAxis.center;
radarAxis.centerPos = center.map(function (v, i) {
if (typeof v === 'number') return v;
return parseInt(v) / 100 * area[i];
});
return radarAxis;
}
function calcRadarAxisRingRadius(radarAxis, chart) {
var area = chart.render.area;
var splitNum = radarAxis.splitNum,
radius = radarAxis.radius;
var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2["default"])(area)) / 2;
if (typeof radius !== 'number') radius = parseInt(radius) / 100 * maxRadius;
var splitGap = radius / splitNum;
radarAxis.ringRadius = new Array(splitNum).fill(0).map(function (foo, i) {
return splitGap * (i + 1);
});
radarAxis.radius = radius;
return radarAxis;
}
function calcRadarAxisLinePosition(radarAxis) {
var indicator = radarAxis.indicator,
centerPos = radarAxis.centerPos,
radius = radarAxis.radius,
startAngle = radarAxis.startAngle;
var fullAngle = Math.PI * 2;
var indicatorNum = indicator.length;
var indicatorGap = fullAngle / indicatorNum;
var angles = new Array(indicatorNum).fill(0).map(function (foo, i) {
return indicatorGap * i + startAngle;
});
radarAxis.axisLineAngles = angles;
radarAxis.axisLinePosition = angles.map(function (g) {
return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, g]));
});
return radarAxis;
}
function calcRadarAxisAreaRadius(radarAxis) {
var ringRadius = radarAxis.ringRadius;
var subRadius = ringRadius[0] / 2;
radarAxis.areaRadius = ringRadius.map(function (r) {
return r - subRadius;
});
return radarAxis;
}
function calcRadarAxisLabelPosition(radarAxis) {
var axisLineAngles = radarAxis.axisLineAngles,
centerPos = radarAxis.centerPos,
radius = radarAxis.radius,
axisLabel = radarAxis.axisLabel;
radius += axisLabel.labelGap;
radarAxis.axisLabelPosition = axisLineAngles.map(function (angle) {
return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, angle]));
});
return radarAxis;
}
function getSplitAreaConfig(radarAxis) {
var areaRadius = radarAxis.areaRadius,
polygon = radarAxis.polygon,
animationCurve = radarAxis.animationCurve,
animationFrame = radarAxis.animationFrame,
rLevel = radarAxis.rLevel;
var name = polygon ? 'regPolygon' : 'ring';
return areaRadius.map(function (foo, i) {
return {
name: name,
index: rLevel,
visible: radarAxis.splitArea.show,
animationCurve: animationCurve,
animationFrame: animationFrame,
shape: getSplitAreaShape(radarAxis, i),
style: getSplitAreaStyle(radarAxis, i)
};
});
}
function getSplitAreaShape(radarAxis, i) {
var polygon = radarAxis.polygon,
areaRadius = radarAxis.areaRadius,
indicator = radarAxis.indicator,
centerPos = radarAxis.centerPos;
var indicatorNum = indicator.length;
var shape = {
rx: centerPos[0],
ry: centerPos[1],
r: areaRadius[i]
};
if (polygon) shape.side = indicatorNum;
return shape;
}
function getSplitAreaStyle(radarAxis, i) {
var splitArea = radarAxis.splitArea,
ringRadius = radarAxis.ringRadius,
axisLineAngles = radarAxis.axisLineAngles,
polygon = radarAxis.polygon,
centerPos = radarAxis.centerPos;
var color = splitArea.color,
style = splitArea.style;
style = _objectSpread({
fill: 'rgba(0, 0, 0, 0)'
}, style);
var lineWidth = ringRadius[0] - 0;
if (polygon) {
var point1 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[0]]));
var point2 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[1]]));
lineWidth = (0, _util2.getPointToLineDistance)(centerPos, point1, point2);
}
style = (0, _util2.deepMerge)((0, _util.deepClone)(style, true), {
lineWidth: lineWidth
});
if (!color.length) return style;
var colorNum = color.length;
return (0, _util2.deepMerge)(style, {
stroke: color[i % colorNum]
});
}
function beforeUpdateSplitArea(graphs, radarAxis, i, updater) {
var cache = graphs[i];
if (!cache) return;
var render = updater.chart.render;
var polygon = radarAxis.polygon;
var name = cache[0].name;
var currentName = polygon ? 'regPolygon' : 'ring';
var delAll = currentName !== name;
if (!delAll) return;
cache.forEach(function (g) {
return render.delGraph(g);
});
graphs[i] = null;
}
function beforeChangeSplitArea(graph, config) {
var side = config.shape.side;
if (typeof side !== 'number') return;
graph.shape.side = side;
}
function getSplitLineConfig(radarAxis) {
var ringRadius = radarAxis.ringRadius,
polygon = radarAxis.polygon,
animationCurve = radarAxis.animationCurve,
animationFrame = radarAxis.animationFrame,
rLevel = radarAxis.rLevel;
var name = polygon ? 'regPolygon' : 'ring';
return ringRadius.map(function (foo, i) {
return {
name: name,
index: rLevel,
animationCurve: animationCurve,
animationFrame: animationFrame,
visible: radarAxis.splitLine.show,
shape: getSplitLineShape(radarAxis, i),
style: getSplitLineStyle(radarAxis, i)
};
});
}
function getSplitLineShape(radarAxis, i) {
var ringRadius = radarAxis.ringRadius,
centerPos = radarAxis.centerPos,
indicator = radarAxis.indicator,
polygon = radarAxis.polygon;
var shape = {
rx: centerPos[0],
ry: centerPos[1],
r: ringRadius[i]
};
var indicatorNum = indicator.length;
if (polygon) shape.side = indicatorNum;
return shape;
}
function getSplitLineStyle(radarAxis, i) {
var splitLine = radarAxis.splitLine;
var color = splitLine.color,
style = splitLine.style;
style = _objectSpread({
fill: 'rgba(0, 0, 0, 0)'
}, style);
if (!color.length) return style;
var colorNum = color.length;
return (0, _util2.deepMerge)(style, {
stroke: color[i % colorNum]
});
}
function beforeUpdateSplitLine(graphs, radarAxis, i, updater) {
var cache = graphs[i];
if (!cache) return;
var render = updater.chart.render;
var polygon = radarAxis.polygon;
var name = cache[0].name;
var currenName = polygon ? 'regPolygon' : 'ring';
var delAll = currenName !== name;
if (!delAll) return;
cache.forEach(function (g) {
return render.delGraph(g);
});
graphs[i] = null;
}
function beforeChangeSplitLine(graph, config) {
var side = config.shape.side;
if (typeof side !== 'number') return;
graph.shape.side = side;
}
function getAxisLineConfig(radarAxis) {
var axisLinePosition = radarAxis.axisLinePosition,
animationCurve = radarAxis.animationCurve,
animationFrame = radarAxis.animationFrame,
rLevel = radarAxis.rLevel;
return axisLinePosition.map(function (foo, i) {
return {
name: 'polyline',
index: rLevel,
visible: radarAxis.axisLine.show,
animationCurve: animationCurve,
animationFrame: animationFrame,
shape: getAxisLineShape(radarAxis, i),
style: getAxisLineStyle(radarAxis, i)
};
});
}
function getAxisLineShape(radarAxis, i) {
var centerPos = radarAxis.centerPos,
axisLinePosition = radarAxis.axisLinePosition;
var points = [centerPos, axisLinePosition[i]];
return {
points: points
};
}
function getAxisLineStyle(radarAxis, i) {
var axisLine = radarAxis.axisLine;
var color = axisLine.color,
style = axisLine.style;
if (!color.length) return style;
var colorNum = color.length;
return (0, _util2.deepMerge)(style, {
stroke: color[i % colorNum]
});
}
function getAxisLabelConfig(radarAxis) {
var axisLabelPosition = radarAxis.axisLabelPosition,
animationCurve = radarAxis.animationCurve,
animationFrame = radarAxis.animationFrame,
rLevel = radarAxis.rLevel;
return axisLabelPosition.map(function (foo, i) {
return {
name: 'text',
index: rLevel,
visible: radarAxis.axisLabel.show,
animationCurve: animationCurve,
animationFrame: animationFrame,
shape: getAxisLableShape(radarAxis, i),
style: getAxisLableStyle(radarAxis, i)
};
});
}
function getAxisLableShape(radarAxis, i) {
var axisLabelPosition = radarAxis.axisLabelPosition,
indicator = radarAxis.indicator;
return {
content: indicator[i].name,
position: axisLabelPosition[i]
};
}
function getAxisLableStyle(radarAxis, i) {
var axisLabel = radarAxis.axisLabel,
_radarAxis$centerPos = (0, _slicedToArray2["default"])(radarAxis.centerPos, 2),
x = _radarAxis$centerPos[0],
y = _radarAxis$centerPos[1],
axisLabelPosition = radarAxis.axisLabelPosition;
var color = axisLabel.color,
style = axisLabel.style;
var _axisLabelPosition$i = (0, _slicedToArray2["default"])(axisLabelPosition[i], 2),
labelXpos = _axisLabelPosition$i[0],
labelYPos = _axisLabelPosition$i[1];
var textAlign = labelXpos > x ? 'left' : 'right';
var textBaseline = labelYPos > y ? 'top' : 'bottom';
style = (0, _util2.deepMerge)({
textAlign: textAlign,
textBaseline: textBaseline
}, style);
if (!color.length) return style;
var colorNum = color.length;
return (0, _util2.deepMerge)(style, {
fill: color[i % colorNum]
});
}