UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

228 lines (227 loc) • 10.3 kB
/** * DevExtreme (viz/series/financial_series.js) * Version: 18.1.3 * Build date: Tue May 15 2018 * * Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var scatterSeries = require("./scatter_series").chart, barSeries = require("./bar_series").chart.bar, _extend = require("../../core/utils/extend").extend, _isDefined = require("../../core/utils/type").isDefined, _normalizeEnum = require("../core/utils").normalizeEnum, _noop = require("../../core/utils/common").noop, DEFAULT_FINANCIAL_POINT_SIZE = 10; exports.stock = _extend({}, scatterSeries, { _animate: _noop, _applyMarkerClipRect: function(settings) { settings["clip-path"] = this._forceClipping ? this._paneClipRectID : this._widePaneClipRectID }, _updatePointsVisibility: barSeries._updatePointsVisibility, _getOptionsForPoint: barSeries._getOptionsForPoint, getErrorBarRangeCorrector: _noop, _createErrorBarGroup: _noop, areErrorBarsVisible: _noop, _createGroups: scatterSeries._createGroups, _setMarkerGroupSettings: function() { var that = this, markersGroup = that._markersGroup, styles = that._createPointStyles(that._getMarkerGroupOptions()), defaultStyle = _extend(styles.normal, { "class": "default-markers" }), defaultPositiveStyle = _extend(styles.positive.normal, { "class": "default-positive-markers" }), reductionStyle = _extend(styles.reduction.normal, { "class": "reduction-markers" }), reductionPositiveStyle = _extend(styles.reductionPositive.normal, { "class": "reduction-positive-markers" }), markerSettings = { "class": "dxc-markers" }; that._applyMarkerClipRect(markerSettings); markersGroup.attr(markerSettings); that._createGroup("defaultMarkersGroup", markersGroup, markersGroup, defaultStyle); that._createGroup("reductionMarkersGroup", markersGroup, markersGroup, reductionStyle); that._createGroup("defaultPositiveMarkersGroup", markersGroup, markersGroup, defaultPositiveStyle); that._createGroup("reductionPositiveMarkersGroup", markersGroup, markersGroup, reductionPositiveStyle) }, _setGroupsSettings: function() { scatterSeries._setGroupsSettings.call(this, false) }, _getCreatingPointOptions: function() { var defaultPointOptions, that = this, creatingPointOptions = that._predefinedPointOptions; if (!creatingPointOptions) { defaultPointOptions = this._getPointOptions(); that._predefinedPointOptions = creatingPointOptions = _extend(true, { styles: {} }, defaultPointOptions); creatingPointOptions.styles.normal = creatingPointOptions.styles.positive.normal = creatingPointOptions.styles.reduction.normal = creatingPointOptions.styles.reductionPositive.normal = { "stroke-width": defaultPointOptions.styles && defaultPointOptions.styles.normal && defaultPointOptions.styles.normal["stroke-width"] } } return creatingPointOptions }, _checkData: function(data) { return _isDefined(data.argument) && void 0 !== data.highValue && void 0 !== data.lowValue && void 0 !== data.openValue && void 0 !== data.closeValue && data.highValue === data.highValue && data.lowValue === data.lowValue }, _getPointDataSelector: function(data, options) { var level, that = this, valueFields = that.getValueFields(), argumentField = that.getArgumentField(), openValueField = valueFields[0], highValueField = valueFields[1], lowValueField = valueFields[2], closeValueField = valueFields[3]; that.level = that._options.reduction.level; switch (_normalizeEnum(that.level)) { case "open": level = openValueField; break; case "high": level = highValueField; break; case "low": level = lowValueField; break; default: level = closeValueField; that.level = "close" } var prevLevelValue = void 0; return function(data) { var reductionValue = data[level]; var isReduction = false; if (null !== reductionValue) { if (_isDefined(prevLevelValue)) { isReduction = reductionValue < prevLevelValue } prevLevelValue = reductionValue } return { argument: data[argumentField], highValue: data[highValueField], lowValue: data[lowValueField], closeValue: data[closeValueField], openValue: data[openValueField], reductionValue: reductionValue, tag: data[that.getTagField()], isReduction: isReduction, data: data } } }, _parsePointStyle: function(style, defaultColor, innerColor) { return { stroke: style.color || defaultColor, "stroke-width": style.width, fill: style.color || innerColor } }, _getDefaultStyle: function(options) { var that = this, mainPointColor = options.color || that._options.mainSeriesColor; return { normal: that._parsePointStyle(options, mainPointColor, mainPointColor), hover: that._parsePointStyle(options.hoverStyle, mainPointColor, mainPointColor), selection: that._parsePointStyle(options.selectionStyle, mainPointColor, mainPointColor) } }, _getReductionStyle: function(options) { var that = this, reductionColor = options.reduction.color; return { normal: that._parsePointStyle({ color: reductionColor, width: options.width, hatching: options.hatching }, reductionColor, reductionColor), hover: that._parsePointStyle(options.hoverStyle, reductionColor, reductionColor), selection: that._parsePointStyle(options.selectionStyle, reductionColor, reductionColor) } }, _createPointStyles: function(pointOptions) { var positiveStyle, reductionStyle, reductionPositiveStyle, that = this, innerColor = that._options.innerColor, styles = that._getDefaultStyle(pointOptions); positiveStyle = _extend(true, {}, styles); reductionStyle = that._getReductionStyle(pointOptions); reductionPositiveStyle = _extend(true, {}, reductionStyle); positiveStyle.normal.fill = positiveStyle.hover.fill = positiveStyle.selection.fill = innerColor; reductionPositiveStyle.normal.fill = reductionPositiveStyle.hover.fill = reductionPositiveStyle.selection.fill = innerColor; styles.positive = positiveStyle; styles.reduction = reductionStyle; styles.reductionPositive = reductionPositiveStyle; return styles }, _endUpdateData: function() { delete this._predefinedPointOptions }, _defaultAggregator: "ohlc", _aggregators: { ohlc: function(_ref, series) { var intervalStart = _ref.intervalStart, data = _ref.data; if (!data.length) { return } var result = {}, valueFields = series.getValueFields(), highValueField = valueFields[1], lowValueField = valueFields[2]; result[highValueField] = -(1 / 0); result[lowValueField] = 1 / 0; result = data.reduce(function(result, item) { if (null !== item[highValueField]) { result[highValueField] = Math.max(result[highValueField], item[highValueField]) } if (null !== item[lowValueField]) { result[lowValueField] = Math.min(result[lowValueField], item[lowValueField]) } return result }, result); result[valueFields[0]] = data[0][valueFields[0]]; result[valueFields[3]] = data[data.length - 1][valueFields[3]]; if (!isFinite(result[highValueField])) { result[highValueField] = null } if (!isFinite(result[lowValueField])) { result[lowValueField] = null } result[series.getArgumentField()] = intervalStart; return result } }, getValueFields: function() { var options = this._options; return [options.openValueField || "open", options.highValueField || "high", options.lowValueField || "low", options.closeValueField || "close"] }, getArgumentField: function() { return this._options.argumentField || "date" }, _patchMarginOptions: function(options) { var pointOptions = this._getCreatingPointOptions(), styles = pointOptions.styles, border = [styles.normal, styles.hover, styles.selection].reduce(function(max, style) { return Math.max(max, style["stroke-width"]) }, 0); options.size = DEFAULT_FINANCIAL_POINT_SIZE + border; options.sizePointNormalState = DEFAULT_FINANCIAL_POINT_SIZE; return options } }); exports.candlestick = _extend({}, exports.stock, { _parsePointStyle: function(style, defaultColor, innerColor) { var color = style.color || innerColor, base = exports.stock._parsePointStyle.call(this, style, defaultColor, color); base.fill = color; base.hatching = style.hatching; return base } });