lib/visage-app/public/javascripts/graph.js in visage-app-0.9.4 vs lib/visage-app/public/javascripts/graph.js in visage-app-0.9.5

- old
+ new

@@ -183,14 +183,14 @@ } return url.join('/') }, getData: function() { this.request = new Request.JSONP({ - url: this.dataURL(), - data: this.requestData, - secure: this.options.secureJSON, - method: this.options.httpMethod, + url: this.dataURL(), + data: this.requestData, + secure: this.options.secureJSON, + method: this.options.httpMethod, onComplete: function(json) { this.graphData(json); }.bind(this), onFailure: function(header, value) { $(this.parentElement).set('html', header) @@ -226,17 +226,37 @@ Implements: Chain, // assemble data to graph, then draw it graphData: function(data) { this.response = data this.buildDataStructures() + this.lastStart = this.series[0].data[0][0] + this.lastFinish = this.series[0].data.getLast()[0] - if ( $defined(this.chart) ) { - this.series.each(function(series, index) { - this.chart.series[index].setData(series.data, true) - }, this); - } else { - this.drawChart() + switch(true) { + case $defined(this.chart) && this.requestData['live']: + this.series.each(function(series, index) { + var point = series.data[1]; + this.chart.series[index].addPoint(point, false); + }, this); + this.chart.redraw(); + break; + case $defined(this.chart): + this.series.each(function(series, index) { + this.chart.series[index].setData(series.data, false); + }, this); + + /* Reset the zoom */ + this.chart.toolbar.remove('zoom'); + this.chart.xAxis.concat(this.chart.yAxis).each(function(axis) { + axis.setExtremes(null,null,false); + }); + + this.chart.redraw(); + break; + default: + this.drawChart() + break; } }, buildDataStructures: function (data) { var series = this.series = [] var host = this.options.host @@ -292,10 +312,14 @@ height: 300, events: { load: function(e) { setInterval(function() { if (this.options.live) { + var data = { 'start': this.lastFinish, + 'finish': this.lastFinish + 10, + 'live': true }; + this.requestData = data; this.getData() } }.bind(this), 10000); }.bind(this) } @@ -409,15 +433,14 @@ 'method': 'get', 'events': { 'submit': function(e, foo) { e.stop(); e.target.getElement('select').getSelected().each(function(option) { - data = new Hash() - split = option.value.split('=') - data.set(split[0], split[1]) + value = parseInt(option.value.split('=')[1]) + data = { 'start': value } }); - this.requestData = data + this.requestData = data; /* Draw everything again. */ this.getData(); }.bind(this) } @@ -444,10 +467,11 @@ var liveToggler = new Element('input', { 'type': 'checkbox', 'id': this.parentElement + '-live', 'name': 'live', + 'checked': this.options.live, 'events': { 'click': function() { this.options.live = !this.options.live }.bind(this) }, @@ -476,15 +500,18 @@ 'font-size': '11px', 'margin-left': '8px', }, 'events': { 'mouseover': function(e) { - var url = e.target.get('href') - var options = this.requestData.toQueryString() + e.stop(); + var url = e.target.get('href'), + extremes = this.chart.xAxis[0].getExtremes(), + options = { 'start': extremes.dataMin, + 'finish': parseInt(extremes.dataMax) }; - if ( options != '' && ! url.contains('?') ) { - url += '?' + options - } + var options = new Hash(options).toQueryString(), + baseurl = this.dataURL(), + url = baseurl += '?' + options; e.target.set('href', url) }.bind(this) } });