all files / stock-chart/renderer/ cartesian-chart.js

89.24% Statements 141/158
85.12% Branches 103/121
94.74% Functions 18/19
89.17% Lines 140/157
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 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 2611×   1× 1× 1× 327×   1× 699× 699× 699× 699× 699× 699× 699× 325×     325×     374× 374× 652×   374×       699× 699× 58× 59× 59× 59× 59× 4657× 4657× 4657× 4637×       5018×   699× 699×                       24033×     8×     713× 713× 713×   713×   713× 713× 713× 376× 376× 376× 376× 376× 376× 376×         369× 369× 369×     369×     369×       203×     376× 203×     173× 173× 42029× 42029× 42029× 42029×     42029× 42029×               42029× 6491×     173×     713× 713×   2×   1×     1×                               4× 2× 2× 2×   4× 4× 4× 4× 4× 2× 2×   2×                         699× 55× 51× 349× 349×     55×   699× 699× 699× 699× 6× 6×     1× 699× 699×   699× 699× 699× 699×   1× 699× 699× 715× 715× 715× 715× 715× 715× 715× 715× 715× 378×   715× 715×   699×   1× 699× 699×           1× 2× 2× 2× 2× 2× 2× 2×           2×       2× 2×   1× 349×   1× 2097×   1×   1×    
define(["require", "exports", "../../chart/chart", "@syncfusion/ej2-svg-base", "@syncfusion/ej2-base", "../../common/model/constants", "../../common/utils/helper", "@syncfusion/ej2-data"], function (require, exports, chart_1, ej2_svg_base_1, ej2_base_1, constants_1, helper_1, ej2_data_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var CartesianChart = (function () {
        function CartesianChart(chart) {
            this.stockChart = chart;
        }
        CartesianChart.prototype.initializeChart = function (chartArgsData) {
            var _this = this;
            var stockChart = this.stockChart;
            var isProtect = 'isProtectedOnChange';
            var startValue = null;
            var endValue = null;
            stockChart[isProtect] = true;
            if (!stockChart.chartObject) {
                stockChart.chartObject = stockChart.renderer.createGroup({
                    id: stockChart.element.id + '_stockChart_chart'
                });
                stockChart.mainObject.appendChild(stockChart.chartObject);
            }
            else {
                var chartElement = document.getElementById(stockChart.chartObject.id);
                while (chartElement.firstChild) {
                    chartElement.removeChild(chartElement.firstChild);
                }
                Iif (helper_1.getElement(stockChart.chartObject + '_tooltip')) {
                    ej2_base_1.remove(helper_1.getElement(stockChart.chartObject + '_tooltip'));
                }
            }
            this.stockChart.isDateTimeCategory = this.stockChart.primaryXAxis.valueType === 'DateTimeCategory';
            if (this.stockChart.isDateTimeCategory && !this.stockChart.sortedData.length) {
                for (var _i = 0, _a = this.stockChart.series; _i < _a.length; _i++) {
                    var series = _a[_i];
                    var dataSource = series.dataSource;
                    var xName = series.xName;
                    for (var _b = 0, dataSource_1 = dataSource; _b < dataSource_1.length; _b++) {
                        var dataItem = dataSource_1[_b];
                        var currentData = Date.parse(new Date(ej2_data_1.DataUtil.parse.parseJson({ val: dataItem[xName] }).val).toString());
                        if (this.stockChart.sortedData.indexOf(currentData) === -1) {
                            this.stockChart.sortedData.push(currentData);
                        }
                    }
                }
                this.stockChart.sortedData.sort(function (a, b) { return a - b; });
            }
            this.cartesianChartSize = this.calculateChartSize();
            stockChart.chart = new chart_1.Chart({
                chartArea: stockChart.chartArea,
                margin: this.findMargin(stockChart),
                primaryXAxis: this.copyObject(stockChart.primaryXAxis),
                primaryYAxis: this.copyObject(stockChart.primaryYAxis),
                rows: stockChart.rows,
                indicators: stockChart.indicators,
                axes: stockChart.axes,
                tooltipRender: function (args) {
                    _this.stockChart.trigger('tooltipRender', args);
                },
                axisLabelRender: function (args) {
                    _this.stockChart.trigger('axisLabelRender', args);
                },
                crosshairLabelRender: function (args) {
                    _this.stockChart.trigger('crosshairLabelRender', args);
                },
                seriesRender: function (args) {
                    var _startValue = _this.stockChart.startValue;
                    var _endValue = _this.stockChart.endValue;
                    startValue = (_startValue != null && _this.stockChart.isDateTimeCategory) ?
                        _this.stockChart.sortedData[Math.floor(_startValue)] : _startValue;
                    endValue = (_endValue != null && _this.stockChart.isDateTimeCategory) ?
                        _this.stockChart.sortedData[Math.floor(_endValue)] : _endValue;
                    var hasStart = startValue != null && !isNaN(Number(startValue));
                    var hasEnd = endValue != null && !isNaN(Number(endValue));
                    if (args.data && hasStart && hasEnd) {
                        var numStart = Number(startValue);
                        var numEnd = Number(endValue);
                        var source = args.series.liveCompleteData || args.data;
                        var xName = args.series.xName;
                        var hasJsonParse = !!(ej2_data_1.DataUtil && ej2_data_1.DataUtil.parse && typeof ej2_data_1.DataUtil.parse.parseJson === 'function');
                        var isAllRange = false;
                        if (source.length > 0
                            && typeof numStart === 'number'
                            && typeof numEnd === 'number'
                            && !isNaN(numStart)
                            && !isNaN(numEnd)) {
                            var firstRawX = source[0][xName];
                            var lastRawX = source[source.length - 1][xName];
                            var firstTime = (typeof firstRawX === 'number') ? firstRawX
                                : (firstRawX instanceof Date) ? firstRawX.getTime()
                                    : null;
                            var lastTime = (typeof lastRawX === 'number') ? lastRawX
                                : (lastRawX instanceof Date) ? lastRawX.getTime()
                                    : null;
                            if (firstTime !== null
                                && lastTime !== null
                                && numStart <= firstTime
                                && numEnd >= lastTime) {
                                isAllRange = true;
                            }
                        }
                        if (isAllRange) {
                            args.data = source;
                        }
                        else {
                            var filtered = [];
                            for (var _i = 0, source_1 = source; _i < source_1.length; _i++) {
                                var data = source_1[_i];
                                var rawX = data[xName];
                                var time = void 0;
                                Iif (typeof rawX === 'number') {
                                    time = rawX;
                                }
                                else Eif (rawX instanceof Date) {
                                    time = rawX.getTime();
                                }
                                else if (hasJsonParse) {
                                    time = new Date(ej2_data_1.DataUtil.parse.parseJson({ val: rawX }).val).getTime();
                                }
                                else {
                                    time = new Date(rawX).getTime();
                                }
                                if (time >= numStart && time <= numEnd) {
                                    filtered.push(data);
                                }
                            }
                            args.data = filtered;
                        }
                    }
                    args.data = chartArgsData ? chartArgsData : args.data;
                    _this.stockChart.trigger('seriesRender', args);
                },
                onZooming: function (args) { _this.stockChart.trigger(constants_1.onZooming, args); },
                pointClick: function (args) {
                    _this.stockChart.trigger('pointClick', args);
                },
                pointMove: function (args) {
                    _this.stockChart.trigger('pointMove', args);
                },
                dataSource: stockChart.dataSource,
                series: this.findSeriesCollection(stockChart.series),
                zoomSettings: this.copyObject(stockChart.zoomSettings),
                tooltip: stockChart.tooltip,
                crosshair: stockChart.crosshair,
                height: this.cartesianChartSize.height.toString(),
                selectedDataIndexes: stockChart.selectedDataIndexes,
                selectionMode: stockChart.selectionMode,
                isMultiSelect: stockChart.isMultiSelect,
                annotations: stockChart.annotations,
                theme: stockChart.theme,
                legendSettings: { visible: false },
                enableRtl: stockChart.enableRtl,
                zoomComplete: function (args) {
                    if (args.axis.valueType.indexOf('DateTime') !== -1 && stockChart.rangeNavigator) {
                        _this.stockChart.zoomChange = true;
                        var newRange = _this.calculateUpdatedRange(args.currentZoomFactor, args.currentZoomPosition, args.axis);
                        stockChart.rangeSelector.sliderChange(newRange.start, newRange.end);
                    }
                    Eif (typeof args.currentZoomFactor !== 'undefined' && args.currentZoomFactor < 1) {
                        stockChart.activeSelectionMethod = 'zoom';
                        stockChart.isUserZoomed = true;
                        stockChart.isPeriodSelectorChange = false;
                        if (args.axis && args.axis.name === 'primaryXAxis') {
                            stockChart.savedZoomStart = args.axis.visibleRange.min;
                            stockChart.savedZoomEnd = args.axis.visibleRange.max;
                        }
                        else Iif (stockChart.rangeNavigator && args.axis.name === 'primaryXAxis') {
                            stockChart.savedZoomStart = Number(stockChart.rangeNavigator.rangeSlider.currentStart);
                            stockChart.savedZoomEnd = Number(stockChart.rangeNavigator.rangeSlider.currentEnd);
                        }
                    }
                    else if (typeof args.currentZoomFactor !== 'undefined' && args.axis.name === 'primaryXAxis' && args.currentZoomFactor >= 1) {
                        stockChart.activeSelectionMethod = null;
                        stockChart.isUserZoomed = false;
                        stockChart.savedZoomStart = null;
                        stockChart.savedZoomEnd = null;
                    }
                }
            });
            if (stockChart.indicators.length !== 0) {
                if (stockChart.isSelect) {
                    for (var i = 0; i < stockChart.indicators.length; i++) {
                        stockChart.chart.indicators[i].animation.enable = false;
                        stockChart.chart.indicators[i].dataSource = ej2_base_1.extend([], stockChart.chart.series[0].dataSource, null, true);
                    }
                }
                stockChart.isSelect = true;
            }
            stockChart.chart.stockChart = stockChart;
            stockChart.chart.appendTo(stockChart.chartObject);
            stockChart[isProtect] = false;
            if (stockChart.onPanning) {
                helper_1.getElement(this.stockChart.element.id + '_stockChart_chart').setAttribute('cursor', 'pointer');
                stockChart.chart.mouseMove(stockChart.mouseMoveEvent);
            }
        };
        CartesianChart.prototype.findMargin = function (stockChart) {
            var margin = {};
            margin.top = stockChart.stockLegendModule && stockChart.legendSettings.visible && stockChart.legendSettings.position === 'Top' ?
                stockChart.margin.top : stockChart.margin.top * 2;
            margin.left = stockChart.margin.left;
            margin.right = stockChart.margin.right;
            margin.bottom = stockChart.margin.bottom;
            return margin;
        };
        CartesianChart.prototype.findSeriesCollection = function (series) {
            var chartSeries = [];
            for (var i = 0, len = series.length; i < len; i++) {
                chartSeries.push(series[i]);
                chartSeries[i].high = series[i].high;
                chartSeries[i].low = series[i].low;
                chartSeries[i].open = series[i].open;
                chartSeries[i].close = series[i].close;
                chartSeries[i].xName = series[i].xName;
                chartSeries[i].volume = series[i].volume;
                chartSeries[i].animation = series[i].animation;
                if (series[i].localData) {
                    chartSeries[i].dataSource = series[i].localData;
                }
                chartSeries[i].yName = series[i].yName === '' ? series[i].close : series[i].yName;
                chartSeries[i].splineType = chartSeries[i].type === 'Spline' ? 'Cardinal' : 'Natural';
            }
            return chartSeries;
        };
        CartesianChart.prototype.calculateChartSize = function () {
            var stockChart = this.stockChart;
            return (new ej2_svg_base_1.Size(stockChart.availableSize.width, (stockChart.enablePeriodSelector && stockChart.enableSelector) ?
                ((stockChart.availableSize.height - stockChart.toolbarHeight - 51)) :
                (stockChart.enableSelector && !stockChart.enablePeriodSelector) ? (stockChart.availableSize.height - 51) :
                    (stockChart.enablePeriodSelector && !stockChart.enableSelector) ?
                        stockChart.availableSize.height - stockChart.toolbarHeight : stockChart.availableSize.height));
        };
        CartesianChart.prototype.calculateUpdatedRange = function (zoomFactor, zoomPosition, axis) {
            var start;
            var end;
            var chartRange = axis.actualRange;
            var inversed = false;
            Eif (!inversed) {
                start = chartRange.min + zoomPosition * chartRange.delta;
                end = start + zoomFactor * chartRange.delta;
            }
            else {
                start = chartRange.max - (zoomPosition * chartRange.delta);
                end = start - (zoomFactor * chartRange.delta);
            }
            Iif (this.stockChart.isDateTimeCategory) {
                start = this.stockChart.sortedData.indexOf(parseInt(axis.labels[Math.floor(start)], 10));
                end = this.stockChart.sortedData.indexOf(parseInt(axis.labels[Math.floor(end)], 10));
            }
            var result = { start: start, end: end };
            return result;
        };
        CartesianChart.prototype.cartesianChartRefresh = function (stockChart, data) {
            stockChart.cartesianChart.initializeChart(data);
        };
        CartesianChart.prototype.copyObject = function (originalObject) {
            return (ej2_base_1.extend({}, originalObject, {}, true));
        };
        return CartesianChart;
    }());
    exports.CartesianChart = CartesianChart;
});