From 931ad9e9b911c5a506771950191ea1bbcda6a708 Mon Sep 17 00:00:00 2001 From: Rashid Khan Date: Mon, 9 Dec 2013 15:41:27 -0700 Subject: [PATCH] moved data off scope --- src/app/panels/histogram/module.js | 49 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/app/panels/histogram/module.js b/src/app/panels/histogram/module.js index 720ca36fb6f..74fa7c906c3 100644 --- a/src/app/panels/histogram/module.js +++ b/src/app/panels/histogram/module.js @@ -242,9 +242,6 @@ function (angular, app, $, _, kbn, moment, timeSeries) { $scope.init = function() { // Hide view options by default $scope.options = false; - $scope.$on('refresh',function(){ - $scope.get_data(); - }); // Always show the query if an alias isn't set. Users can set an alias if the query is too // long @@ -303,7 +300,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) { * @param {number} query_id The id of the query, generated on the first run and passed back when * this call is made recursively for more segments */ - $scope.get_data = function(segment, query_id) { + $scope.get_data = function(data, segment, query_id) { var _range, _interval, @@ -380,12 +377,11 @@ function (angular, app, $, _, kbn, moment, timeSeries) { results = request.doSearch(); // Populate scope when we have results - results.then(function(results) { - + return results.then(function(results) { $scope.panelMeta.loading = false; if(segment === 0) { $scope.hits = 0; - $scope.data = []; + data = []; $scope.annotations = []; query_id = $scope.query_id = new Date().getTime(); } @@ -407,7 +403,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) { var query_results = results.facets[q.id]; // we need to initialize the data variable on the first run, // and when we are working on the first segment of the data. - if(_.isUndefined($scope.data[i]) || segment === 0) { + if(_.isUndefined(data[i]) || segment === 0) { var tsOpts = { interval: _interval, start_date: _range && _range.from, @@ -417,8 +413,8 @@ function (angular, app, $, _, kbn, moment, timeSeries) { time_series = new timeSeries.ZeroFilled(tsOpts); hits = 0; } else { - time_series = $scope.data[i].time_series; - hits = $scope.data[i].hits; + time_series = data[i].time_series; + hits = data[i].hits; } // push each entry into the time series, while incrementing counters @@ -427,7 +423,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) { hits += entry.count; // The series level hits counter $scope.hits += entry.count; // Entire dataset level hits counter }); - $scope.data[i] = { + data[i] = { info: q, time_series: time_series, hits: hits @@ -461,11 +457,11 @@ function (angular, app, $, _, kbn, moment, timeSeries) { } // Tell the histogram directive to render. - $scope.$emit('render'); + $scope.$emit('render', data); // If we still have segments left, get them if(segment < dashboard.indices.length-1) { - $scope.get_data(segment+1,query_id); + $scope.get_data(data,segment+1,query_id); } } }); @@ -527,15 +523,20 @@ function (angular, app, $, _, kbn, moment, timeSeries) { restrict: 'A', template: '
', link: function(scope, elem) { + var data; + + scope.$on('refresh',function(){ + scope.get_data(); + }); // Receive render events - scope.$on('render',function(){ - render_panel(); + scope.$on('render',function(event,data){ + render_panel(data); }); // Re-render if the window is resized angular.element(window).bind('resize', function(){ - render_panel(); + render_panel(data); }); var scale = function(series,factor) { @@ -563,13 +564,13 @@ function (angular, app, $, _, kbn, moment, timeSeries) { }; // Function for rendering panel - function render_panel() { + function render_panel(data) { // IE doesn't work without this elem.css({height:scope.panel.height || scope.row.height}); // Populate from the query service try { - _.each(scope.data, function(series) { + _.each(data, function(series) { series.label = series.info.alias; series.color = series.info.color; }); @@ -668,8 +669,8 @@ function (angular, app, $, _, kbn, moment, timeSeries) { // when rendering stacked bars, we need to ensure each point that has data is zero-filled // so that the stacking happens in the proper order var required_times = []; - if (scope.data.length > 1) { - required_times = Array.prototype.concat.apply([], _.map(scope.data, function (query) { + if (data.length > 1) { + required_times = Array.prototype.concat.apply([], _.map(data, function (query) { return query.time_series.getOrderedTimes(); })); required_times = _.uniq(required_times.sort(function (a, b) { @@ -679,8 +680,8 @@ function (angular, app, $, _, kbn, moment, timeSeries) { } - for (var i = 0; i < scope.data.length; i++) { - var _d = scope.data[i].time_series.getFlotPairs(required_times); + for (var i = 0; i < data.length; i++) { + var _d = data[i].time_series.getFlotPairs(required_times); if(scope.panel.derivative) { _d = derivative(_d); } @@ -690,10 +691,10 @@ function (angular, app, $, _, kbn, moment, timeSeries) { if(scope.panel.scaleSeconds) { _d = scaleSeconds(_d,scope.panel.interval); } - scope.data[i].data = _d; + data[i].data = _d; } - scope.plot = $.plot(elem, scope.data, options); + scope.plot = $.plot(elem, data, options); } catch(e) { // Nothing to do here