all files / chart/series/ last-value-label.js

97.83% Statements 90/92
87.86% Branches 152/173
100% Functions 11/11
97.83% Lines 90/92
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153   12× 12×   12× 12× 12×   16× 12×   16×   16×   16× 16× 16×     16× 16× 16× 16× 16×   16×               16×     16×     16×   16×   16× 16× 16× 16× 16× 16×           16×     16× 16× 16× 16× 16×   16× 16× 16× 16× 16× 16× 16×             16×             16× 16× 16× 16× 16× 16× 16×   16×     16×   16×   16× 16× 16× 16× 16×   12× 11× 11×           120× 120× 120× 120×           44575×          
define(["require", "exports", "@syncfusion/ej2-svg-base", "../../common/utils/helper", "@syncfusion/ej2-base"], function (require, exports, ej2_svg_base_1, helper_1, ej2_base_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var LastValueLabel = (function () {
        function LastValueLabel(chartInstance) {
            this.padding = 6;
            this.chart = chartInstance;
        }
        LastValueLabel.prototype.initPrivateVariables = function (chart) {
            this.chart = chart;
            this.elementID = chart.element.id;
            this.svgRenderer = chart.renderer;
        };
        LastValueLabel.prototype.render = function (series, chart, lastValueLabel, isExisting) {
            if (!this.chart || !this.svgRenderer) {
                this.initPrivateVariables(chart);
            }
            if (!chart.enableCanvas && !series.lastValueLabelElement) {
                var groupID = this.elementID + "_LastValueLabel_Group_" + series.index;
                series.lastValueLabelElement = chart.renderer.createGroup({ id: groupID });
            }
            this.renderLastValue(series, chart, lastValueLabel, isExisting ? isExisting : false);
        };
        LastValueLabel.prototype.renderLastValue = function (series, chart, lastValueLabel, isExisting) {
            var isHighLowOpenClose = series.seriesType === 'HighLowOpenClose';
            var isHighLow = series.seriesType === 'HighLow';
            Iif (series.visiblePoints.length < 1) {
                return;
            }
            var lastPoint = series.visiblePoints[series.visiblePoints.length - 1];
            var yAxis = series.yAxis;
            var clipRect = series.clipRect;
            var labelId = this.elementID + "_LastValueLabel_" + series.index;
            var rawValue = isHighLowOpenClose ? parseFloat(lastPoint.close)
                : isHighLow ? parseFloat(lastPoint.low) : lastPoint.yValue;
            Iif (!(series.type === 'Candle'
                ? (lastPoint.symbolLocations && lastPoint.symbolLocations.length > 0)
                : isHighLowOpenClose
                    ? (lastPoint.regions && lastPoint.regions.length > 0)
                    : (lastPoint.symbolLocations && lastPoint.symbolLocations.length > 0))
                || (rawValue > yAxis.visibleRange.max || rawValue < yAxis.visibleRange.min)) {
                return;
            }
            var translateX = series.chart.requireInvertedAxis ? clipRect.x + (series.type === 'Candle'
                ? lastPoint.symbolLocations[1].x : isHighLowOpenClose ? (lastPoint.open <= lastPoint.close)
                ? lastPoint.regions[1].x : lastPoint.regions[2].x : lastPoint.symbolLocations[0].x) : clipRect.x;
            var translateY = series.chart.requireInvertedAxis ? (clipRect.y) : clipRect.y
                + (series.type === 'Candle' ? lastPoint.symbolLocations[1].y : isHighLowOpenClose
                    ? (lastPoint.open <= lastPoint.close) ? lastPoint.regions[1].y : lastPoint.regions[2].y : lastPoint.symbolLocations[0].y);
            translateX = chart.requireInvertedAxis && (isHighLow || series.type === 'Candle') && !yAxis.isInversed
                ? translateX - lastPoint.regions[isHighLow ? 0 : 1].width : translateX;
            translateY = !chart.requireInvertedAxis && (isHighLow || series.type === 'Candle') && !yAxis.isInversed
                ? translateY + lastPoint.regions[isHighLow ? 0 : 1].height : translateY;
            var transformValue = 'translate(' + translateX + ',' + translateY + ')';
            var previousTransform = series.lastValueLabelElement ? series.lastValueLabelElement.getAttribute('transform') : null;
            var labelFormat = yAxis.labelFormat;
            var formattedRawValue = rawValue.toString();
            Eif (!(labelFormat && labelFormat.indexOf('n') > -1)) {
                formattedRawValue = (rawValue % 1 === 0)
                    ? rawValue.toFixed(0)
                    : (rawValue.toFixed(2).slice(-1) === '0'
                        ? rawValue.toFixed(1)
                        : rawValue.toFixed(2));
            }
            var lastLabeltext = labelFormat && labelFormat.match('{value}') !== null
                ? labelFormat.replace('{value}', yAxis.format(parseFloat(formattedRawValue)))
                : yAxis.format(parseFloat(formattedRawValue));
            var style = lastValueLabel.font;
            var size = ej2_svg_base_1.measureText(lastLabeltext, style, this.chart.themeStyle.crosshairLabelFont);
            var labelWidth = size.width + this.padding * 2;
            var labelHeight = size.height + this.padding * 2;
            var baseValue = chart.requireInvertedAxis ? (chart.enableCanvas ? yAxis.rect.y : yAxis.rect.y - translateY)
                : (chart.enableCanvas ? yAxis.rect.x : yAxis.rect.x - translateX);
            var tickSize = yAxis.tickPosition === 'Outside' ? yAxis.majorTickLines.height : 0;
            var axisLabelPadding = yAxis.labelPadding;
            var borderWidth = lastValueLabel.border.width * 2;
            var labelSize = chart.requireInvertedAxis ? yAxis.maxLabelSize.height : yAxis.maxLabelSize.width;
            var isOutside = yAxis.labelPosition === 'Outside';
            var isOpposed = chart.enableRtl && !chart.requireInvertedAxis ? !yAxis.opposedPosition : yAxis.opposedPosition;
            var labelX = chart.requireInvertedAxis ? (chart.enableCanvas ? translateX : 0) - labelWidth / 2 : isOutside
                ? baseValue + (isOpposed
                    ? axisLabelPadding + tickSize - borderWidth
                    : -(axisLabelPadding + tickSize + borderWidth + labelSize))
                : baseValue + (isOpposed
                    ? -(labelWidth)
                    : 0);
            var labelY = chart.requireInvertedAxis ? isOutside
                ? baseValue + (isOpposed
                    ? -(labelHeight + axisLabelPadding + tickSize)
                    : (axisLabelPadding + tickSize + borderWidth))
                : baseValue + (isOpposed
                    ? 0
                    : -(labelHeight)) : (chart.enableCanvas ? translateY : 0) - labelHeight / 2;
            labelX = Math.max(-translateX + borderWidth, Math.min(labelX, chart.availableSize.width - labelWidth - borderWidth - translateX));
            labelY = Math.max(-translateY + borderWidth, Math.min(labelY, chart.availableSize.height - labelHeight - borderWidth - translateY));
            var labelRect = new ej2_svg_base_1.Rect(labelX, labelY, labelWidth, labelHeight);
            chart.lastValueLabelCollections.push(labelRect);
            var background = this.chart.renderer.drawRectangle(new helper_1.RectOption(this.elementID + "_LastValueLabel_Background_" + series.index, lastValueLabel.background || chart.themeStyle.crosshairFill, { width: lastValueLabel.border.width || 1, color: lastValueLabel.border.color }, 1, labelRect, lastValueLabel.rx, lastValueLabel.ry));
            helper_1.appendChildElement(this.chart.enableCanvas, series.lastValueLabelElement, background, this.chart.redraw);
            var lineStartY = chart.requireInvertedAxis ? (chart.enableCanvas ? translateY : 0)
                + (isOpposed ? clipRect.height : 0) : chart.enableCanvas ? translateY : 0;
            var lineStartX = chart.requireInvertedAxis ? chart.enableCanvas ? translateX : 0
                : (isOpposed ? chart.enableCanvas ? translateX : 0 : chart.enableCanvas ? translateX
                    + clipRect.width : clipRect.width);
            var lineEndX = chart.requireInvertedAxis ? chart.enableCanvas ? translateX : 0
                : isOpposed ? labelX : labelX + labelWidth;
            var lineEndY = chart.requireInvertedAxis ? (isOpposed ? (labelY + labelHeight)
                : labelY) : chart.enableCanvas ? translateY : 0;
            var linePath = "M " + lineStartX + " " + lineStartY + " L " + lineEndX + " " + lineEndY;
            var line = this.chart.renderer.drawPath(new ej2_svg_base_1.PathOption(this.elementID + "_LastValueLine_" + series.index, 'none', lastValueLabel.lineWidth || 1, lastValueLabel.lineColor || chart.themeStyle.crosshairLine, 1, lastValueLabel.dashArray || '', linePath));
            helper_1.appendChildElement(this.chart.enableCanvas, series.lastValueLabelElement, line, this.chart.redraw);
            helper_1.textElement(this.chart.renderer, new ej2_svg_base_1.TextOption(labelId, labelRect.x + labelRect.width / 2, (labelRect.y + labelRect.height / 2 + size.height * 0.35), 'middle', lastLabeltext), style, style.color || chart.themeStyle.crosshairLabelFont.color, series.lastValueLabelElement, false, chart.redraw, false, false, null, null, null, null, chart.enableCanvas, null, this.chart.themeStyle.crosshairLabelFont, new helper_1.ChartLocation(labelRect.x + labelRect.width / 2, (labelRect.y + labelRect.height / 2 + size.height * 0.35)));
            if (!this.chart.enableCanvas && isExisting && previousTransform && this.chart.enableAnimation) {
                this.animateLastValueLabel(series.lastValueLabelElement, previousTransform, translateX, translateY, series.chart.duration);
            }
            else if (!this.chart.enableCanvas) {
                series.lastValueLabelElement.setAttribute('transform', transformValue);
                series.lastValueLabelElement.setAttribute('visibility', (chart.stockChart ? chart.stockChart.initialRender : chart.animateSeries) && series.animation.enable ? 'hidden' : 'visible');
            }
        };
        LastValueLabel.prototype.animateLastValueLabel = function (element, previousTransform, targetX, targetY, animateDuration) {
            var transform = previousTransform;
            var transformValues = transform.split(/[(),\s]+/);
            var existingTranslateX = parseFloat(transformValues[1]) || 0;
            var existingTranslateY = parseFloat(transformValues[2]) || 0;
            var duration = 500;
            if (!ej2_base_1.isNullOrUndefined(animateDuration)) {
                duration = animateDuration;
            }
            new ej2_base_1.Animation({}).animate(ej2_base_1.createElement('div'), {
                duration: duration,
                progress: function (args) {
                    var calculatedTranslateY = helper_1.linear(args.timeStamp, existingTranslateY, targetY - existingTranslateY, args.duration);
                    var calculatedTranslateX = helper_1.linear(args.timeStamp, existingTranslateX, targetX - existingTranslateX, args.duration);
                    var transformValue = 'translate(' + calculatedTranslateX + ',' + calculatedTranslateY + ')';
                    element.setAttribute('transform', transformValue);
                },
                end: function () {
                    var transformValue = 'translate(' + targetX + ',' + targetY + ')';
                    element.setAttribute('transform', transformValue);
                }
            });
        };
        LastValueLabel.prototype.getModuleName = function () {
            return 'LastValueLabel';
        };
        LastValueLabel.prototype.destroy = function () {
        };
        return LastValueLabel;
    }());
    exports.LastValueLabel = LastValueLabel;
});