* Register a new chart type.
*/
@register = (Subclass) ->
- console.log "ChartType.register(#Subclass)"
+ # console.log "ChartType.register(#Subclass)"
KNOWN_CHART_TYPES[ Subclass::typeName ] = Subclass
/**
* @returns {ChartType}
*/
@create = (model, view) ->
- console.log "ChartType.create(#model) ->", model
+ # console.log "ChartType.create(#model) ->", model
return null unless Type = @lookup model
new Type model, view
.attr "width", width - margin.left - margin.right
.attr "height", height - margin.top - margin.bottom
-
+
+
# x-axis.
# TODO move axis to separate chart-type
enterFrame.append "g"
.attr "transform", "translate(0,#{yScale.range()[0]})"
.call xAxis
- # this is wrong. should work using d3 datajoins.
- # i.e. use the enter/exit function to add/remove
- # metrics from the graph
- for i,metric in @model.dataset.metrics.models
- # metric defined charttype
- chartElement = metric.get "chartElement"
- # otherwise the graph defined charttype
- # FOR NOW take line as default
- chartElement ?= 'd3-line' # @model.get "chartType"
-
- # create d3 chart element and render it
- chEl = D3ChartElement.create chartElement
- console.log chEl
- chEl.renderChartElement metric, frame ,xScale, yScale
+ metrics = frame.selectAll "metric"
+ .data @model.dataset.metrics.models
+
+ metrics.enter()
+ .append("g")
+ .attr "class", (d) ->
+ "g metric line "+d.get 'label'
+ .each (d) ->
+ # console.log d
+ # metric defined charttype
+ chartElement = d.get "chartElement"
+ # otherwise the graph defined charttype
+ # FOR NOW take line as default
+ chartElement ?= 'd3-line' # @model.get "chartElement"
+ # create d3 chart element and render it
+ chEl = D3ChartElement.create chartElement
+
+ chEl.renderChartElement d, frame ,xScale, yScale
+
+ metrics.exit().remove()
svg
-
* Register a new d3 element
*/
@register = (Subclass) ->
- console.log "D3ChartElement.register(#Subclass)"
+ # console.log "D3ChartElement.register(#Subclass)"
KNOWN_CHART_ELEMENTS[ Subclass::chartElement ] = Subclass
/**
* @returns {D3ChartElement}
*/
@create = (name) ->
- console.log "D3ChartElement.create(#name)"
+ # console.log "D3ChartElement.create(#name)"
return null unless Type = @lookup name
new Type
- () ->
+ ->
_.bindAll this, ...@__bind__ # TODO: roll up MRO
@loadSpec() unless @ready
super ...
@triggerReady()
error: ~> console.error "Error loading #{@typeName} spec! #it"
this
+
+ renderChartElement: (metric, svgEl ,xScale, yScale) -> svgEl
+
+