UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

199 lines (167 loc) • 7.72 kB
"use strict"; // there are area, steparea, stackedarea, fullstackedarea, splinearea var objectUtils = require("../../core/utils/object"), extend = require("../../core/utils/extend").extend, scatterSeries = require("./scatter_series").chart, lineSeries = require("./line_series"), chartLineSeries = lineSeries.chart.line, polarLineSeries = lineSeries.polar.line, _map = require("../core/utils").map, _extend = extend, calculateBezierPoints = lineSeries.chart["spline"]._calculateBezierPoints; exports.chart = {}; exports.polar = {}; var baseAreaMethods = { _createBorderElement: chartLineSeries._createMainElement, _createLegendState: function _createLegendState(styleOptions, defaultColor) { return { fill: styleOptions.color || defaultColor, opacity: styleOptions.opacity, hatching: styleOptions.hatching }; }, getValueRangeInitialValue: function getValueRangeInitialValue() { if (this.valueAxisType !== "logarithmic" && this.valueType !== "datetime" && this.showZero !== false) { return 0; } else { return scatterSeries.getValueRangeInitialValue.call(this); } }, _getDefaultSegment: function _getDefaultSegment(segment) { var defaultSegment = chartLineSeries._getDefaultSegment(segment); defaultSegment.area = defaultSegment.line.concat(defaultSegment.line.slice().reverse()); return defaultSegment; }, _updateElement: function _updateElement(element, segment, animate, complete) { var lineParams = { points: segment.line }, areaParams = { points: segment.area }, borderElement = element.line; if (animate) { borderElement && borderElement.animate(lineParams); element.area.animate(areaParams, {}, complete); } else { borderElement && borderElement.attr(lineParams); element.area.attr(areaParams); } }, _removeElement: function _removeElement(element) { element.line && element.line.remove(); element.area.remove(); }, _drawElement: function _drawElement(segment) { return { line: this._bordersGroup && this._createBorderElement(segment.line, { "stroke-width": this._styles.normal.border["stroke-width"] }).append(this._bordersGroup), area: this._createMainElement(segment.area).append(this._elementsGroup) }; }, _applyStyle: function _applyStyle(style) { var that = this; that._elementsGroup && that._elementsGroup.smartAttr(style.elements); that._bordersGroup && that._bordersGroup.attr(style.border); (that._graphics || []).forEach(function (graphic) { graphic.line && graphic.line.attr({ 'stroke-width': style.border["stroke-width"] }).sharp(); }); }, _parseStyle: function _parseStyle(options, defaultColor, defaultBorderColor) { var borderOptions = options.border || {}, borderStyle = chartLineSeries._parseLineOptions(borderOptions, defaultBorderColor); borderStyle.stroke = borderOptions.visible && borderStyle["stroke-width"] ? borderStyle.stroke : "none"; borderStyle["stroke-width"] = borderStyle["stroke-width"] || 1; return { border: borderStyle, elements: { stroke: "none", fill: options.color || defaultColor, hatching: options.hatching, opacity: options.opacity } }; }, _areBordersVisible: function _areBordersVisible() { var options = this._options; return options.border.visible || options.hoverStyle.border.visible || options.selectionStyle.border.visible; }, _createMainElement: function _createMainElement(points, settings) { return this._renderer.path(points, "area").attr(settings); }, _getTrackerSettings: function _getTrackerSettings(segment) { return { "stroke-width": segment.singlePointSegment ? this._defaultTrackerWidth : 0 }; }, _getMainPointsFromSegment: function _getMainPointsFromSegment(segment) { return segment.area; } }; function createAreaPoints(points) { return _map(points, function (pt) { return pt.getCoords(); }).concat(_map(points.slice().reverse(), function (pt) { return pt.getCoords(true); })); } var areaSeries = exports.chart["area"] = _extend({}, chartLineSeries, baseAreaMethods, { _prepareSegment: function _prepareSegment(points, rotated) { var processedPoints = this._processSinglePointsAreaSegment(points, rotated); return { line: processedPoints, area: createAreaPoints(processedPoints), singlePointSegment: processedPoints !== points }; }, _processSinglePointsAreaSegment: function _processSinglePointsAreaSegment(points, rotated) { if (points && points.length === 1) { var p = points[0], p1 = objectUtils.clone(p); p1[rotated ? "y" : "x"] += 1; p1.argument = null; return [p, p1]; } return points; } }); exports.polar["area"] = _extend({}, polarLineSeries, baseAreaMethods, { _prepareSegment: function _prepareSegment(points, rotated, lastSegment) { lastSegment && polarLineSeries._closeSegment.call(this, points); return areaSeries._prepareSegment.call(this, points); }, _processSinglePointsAreaSegment: function _processSinglePointsAreaSegment(points) { return lineSeries.polar.line._prepareSegment.call(this, points).line; } }); exports.chart["steparea"] = _extend({}, areaSeries, { _prepareSegment: function _prepareSegment(points, rotated) { var stepLineSeries = lineSeries.chart["stepline"]; points = areaSeries._processSinglePointsAreaSegment(points, rotated); return areaSeries._prepareSegment.call(this, stepLineSeries._calculateStepLinePoints(points)); } }); exports.chart["splinearea"] = _extend({}, areaSeries, { _areaPointsToSplineAreaPoints: function _areaPointsToSplineAreaPoints(areaPoints) { var previousMiddlePoint = areaPoints[areaPoints.length / 2 - 1], middlePoint = areaPoints[areaPoints.length / 2]; areaPoints.splice(areaPoints.length / 2, 0, { x: previousMiddlePoint.x, y: previousMiddlePoint.y }, { x: middlePoint.x, y: middlePoint.y }); ///#DEBUG if (previousMiddlePoint.defaultCoords) { areaPoints[areaPoints.length / 2].defaultCoords = true; } if (middlePoint.defaultCoords) { areaPoints[areaPoints.length / 2 - 1].defaultCoords = true; } ///#ENDDEBUG }, _prepareSegment: function _prepareSegment(points, rotated) { var processedPoints = areaSeries._processSinglePointsAreaSegment(points, rotated), areaSegment = areaSeries._prepareSegment.call(this, calculateBezierPoints(processedPoints, rotated)); this._areaPointsToSplineAreaPoints(areaSegment.area); areaSegment.singlePointSegment = processedPoints !== points; return areaSegment; }, _getDefaultSegment: function _getDefaultSegment(segment) { var areaDefaultSegment = areaSeries._getDefaultSegment(segment); this._areaPointsToSplineAreaPoints(areaDefaultSegment.area); return areaDefaultSegment; }, _createMainElement: function _createMainElement(points, settings) { return this._renderer.path(points, "bezierarea").attr(settings); }, _createBorderElement: lineSeries.chart["spline"]._createMainElement });