Checkpoint: Graphs now render from their Dataset model
authordsc <dsc@wikimedia.org>
Wed, 18 Apr 2012 18:47:15 +0000 (11:47 -0700)
committerdsc <dsc@wikimedia.org>
Wed, 18 Apr 2012 18:47:15 +0000 (11:47 -0700)
lib/dataset/dataset-model.co
lib/dataset/datasource-model.co
lib/dataset/metric-model.co
lib/graph/graph-edit-view.co

index 47ae0e8..c6767a3 100644 (file)
@@ -58,20 +58,27 @@ DataSet = exports.DataSet = BaseModel.extend do # {{{
                 next.ok source
             .seq ~>
                 @ready = true
-                @trigger 'ready', this
                 @unwait() # terminates the `load` wait
+                @trigger 'ready', this
         this
     
     
     # TODO: toJSON() must ensure columns in MetricList are ordered by index
     #   ...in theory, MetricList.comparator now does this
     
+    getDates: ->
+        dates = @metrics.invoke 'getDates'
+        maxLen = _.max _.pluck dates, 'length'
+        _.find dates, -> it.length is maxLen
     
     /**
      * @returns {Array} The reified dataset, materialized to an array of data-series arrays.
      */
     getData: ->
-        '/data/datasources/rc/rc_comscore_region_uv.csv'
+        _.zip ...[ @getDates() ].concat @metrics.invoke 'getData'
+    
+    getLabels: ->
+        ['Date'].concat @metrics.pluck 'label'
     
     newMetric: ->
         index = @metrics.length
index 57fed50..4b13667 100644 (file)
@@ -123,9 +123,14 @@ DataSource = exports.DataSource = BaseModel.extend do # {{{
         @trigger 'load-error', this, txtStatus, err
     
     
+    getDates: ->
+        @data.dateColumn
+    
     getData: ->
         @data.toJSON?() or @data
     
+    getColumn: (idx) ->
+        @data.columns[idx]
     
     getColumnName: (idx) ->
         @get('metrics')?[idx]?.label
index 72e95de..d339283 100644 (file)
@@ -49,6 +49,12 @@ Metric = exports.Metric = BaseModel.extend do # {{{
         @lookupSource()
     
     
+    getDates: ->
+        @source.getDates()
+    
+    getData: ->
+        @source.getColumn @get 'source_col'
+    
     lookupSource: ->
         if source_id = @get 'source_id'
             @wait()
index 6f50b41..30edab8 100644 (file)
@@ -237,13 +237,16 @@ GraphEditView = exports.GraphEditView = BaseView.extend do # {{{
     
     # Redraw chart inside viewport.
     renderChart: ->
-        data = @model.get 'dataset'
-        data = data.getData() if typeof data is not 'string'
+        # data = @model.get 'dataset'
+        # data = data.getData() if typeof data is not 'string'
+        dataset = @model.dataset
+        data = dataset.getData()
         size = @resizeViewport()
         
         # XXX: use @model.changedAttributes() to calculate what to update
         options = @chartOptions() #import size
         options import do
+            labels             : dataset.getLabels()
             labelsDiv          : @$el.find '.graph-label' .0
             valueFormatter     : @numberFormatterHTML
             axes: