summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/charting/StoreSeries.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/charting/StoreSeries.js')
-rw-r--r--js/dojo/dojox/charting/StoreSeries.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/js/dojo/dojox/charting/StoreSeries.js b/js/dojo/dojox/charting/StoreSeries.js
new file mode 100644
index 0000000..d8fa9c9
--- /dev/null
+++ b/js/dojo/dojox/charting/StoreSeries.js
@@ -0,0 +1,101 @@
+//>>built
+define("dojox/charting/StoreSeries", ["dojo/_base/array", "dojo/_base/declare", "dojo/_base/Deferred"],
+ function(arr, declare, Deferred){
+
+ return declare("dojox.charting.StoreSeries", null, {
+ constructor: function(store, kwArgs, value){
+ // summary:
+ // Series adapter for dojo object stores (dojo.store).
+ // store: Object:
+ // A dojo object store.
+ // kwArgs: Object:
+ // A store-specific keyword parameters used for querying objects.
+ // See dojo.store docs
+ // value: Function|Object|String|Null:
+ // Function, which takes an object handle, and
+ // produces an output possibly inspecting the store's item. Or
+ // a dictionary object, which tells what names to extract from
+ // an object and how to map them to an output. Or a string, which
+ // is a numeric field name to use for plotting. If undefined, null
+ // or empty string (the default), "value" field is extracted.
+ this.store = store;
+ this.kwArgs = kwArgs;
+
+ if(value){
+ if(typeof value == "function"){
+ this.value = value;
+ }else if(typeof value == "object"){
+ this.value = function(object){
+ var o = {};
+ for(var key in value){
+ o[key] = object[value[key]];
+ }
+ return o;
+ };
+ }else{
+ this.value = function(object){
+ return object[value];
+ };
+ }
+ }else{
+ this.value = function(object){
+ return object.value;
+ };
+ }
+
+ this.data = [];
+
+ this.fetch();
+ },
+
+ destroy: function(){
+ // summary:
+ // Clean up before GC.
+ if(this.observeHandle){
+ this.observeHandle.dismiss();
+ }
+ },
+
+ setSeriesObject: function(series){
+ // summary:
+ // Sets a dojox.charting.Series object we will be working with.
+ // series: dojox.charting.Series:
+ // Our interface to the chart.
+ this.series = series;
+ },
+
+ // store fetch loop
+
+ fetch: function(){
+ // summary:
+ // Fetches data from the store and updates a chart.
+ var objects = this.objects = [];
+ var self = this;
+ if(this.observeHandle){
+ this.observeHandle.dismiss();
+ }
+ var results = this.store.query(this.kwArgs.query, this.kwArgs);
+ Deferred.when(results, function(objects){
+ self.objects = objects;
+ update();
+ });
+ if(results.observe){
+ this.observeHandle = results.observe(update, true);
+ }
+ function update(){
+ self.data = arr.map(self.objects, function(object){
+ return self.value(object, self.store);
+ });
+ self._pushDataChanges();
+ }
+ },
+
+ _pushDataChanges: function(){
+ if(this.series){
+ this.series.chart.updateSeries(this.series.name, this);
+ this.series.chart.delayedRender();
+ }
+ }
+
+ });
+});