{
name : 'Kraken Graph'
dataset : '/data/page_views_by_language.csv'
- options : {}
+ options : { stackedGraph:1 }
}
options = @get 'options', {}
key in options
- setOption: (key, value, opts) ->
- options = @get 'options', {}
- options[key] = value
- @set 'options', options, opts
-
getOption: (key, def) ->
options = @get 'options', {}
if key in options then options[key] else def
- unsetOption: (key, opts) ->
+ setOption: (key, value, opts={}) ->
+ options = @get 'options', {}
+ options[key] = value
+ @set 'options', options, opts
+ @trigger "change:options:#key", this, value, key, opts unless opts.silent
+
+ unsetOption: (key, opts={}) ->
options = @get 'options', {}
delete options[key]
@set 'options', options, opts
+ @trigger "change:options:#key", this, value, key, opts unless opts.silent
toKVPairs: ->
_ = require 'kraken/underscore'
-{BaseView} = require 'kraken/baseview'
+{BaseView} = require 'kraken/base'
{ Field, FieldList, FieldView, Scaffold
} = require 'kraken/scaffold'
{ GraphModel, GraphOption, GraphOptionList, TagSet,
} = require 'kraken/graph/model'
-DEBOUNCE_RENDER = exports.DEBOUNCE_RENDER = 20ms
+DEBOUNCE_RENDER = exports.DEBOUNCE_RENDER = 100ms
/**
toggleCollapsed: ->
starting = @$el.hasClass 'collapsed' #@isCollapsed
@$el.toggleClass 'collapsed'
- @isCollapsed = @$el.hasClass 'collapsed'
+ @isCollapsed = not starting
# console.log "#this.toggleCollapsed!", starting, '->', @isCollapsed
- @trigger 'change:collapse', this
+ @trigger 'change:collapse', this, @isCollapsed
this
# }}}
@render = _.debounce @render.bind(this), DEBOUNCE_RENDER
render: ->
- # console.log "#this.render() -> .isotope()"
+ console.log "#this.render() -> .isotope()"
@__super__.render ...
@$el.isotope do
itemSelector : '.field.option'
# itemPositionDataEnabled : true
# animationEngine : 'jquery'
- addOne: ->
- # console.log "#this.addOne!"
+ addOne: (field) ->
+ # console.log "#this.addOne!", field
+
+ field.on 'change:value', ~>
+ key = field.get 'name'
+ value = field.getValue()
+ @trigger "change:#key", this, value, key, field
+ @trigger "change", this, value, key, field
+
view = @__super__.addOne ...
view.on 'change:collapse render', @render
view
GraphView = exports.GraphView = BaseView.extend do # {{{
+ __bind__ : <[ render renderAll ]>
ctorName : 'GraphView'
tagName : 'section'
className : 'graph'
initialize : (o={}) ->
- @render = _.debounce @render.bind(this), DEBOUNCE_RENDER
+ @render = _.debounce @render, DEBOUNCE_RENDER
+ @renderAll = _.debounce @renderAll, DEBOUNCE_RENDER
+
@model or= new GraphModel
BaseView::initialize ...
# console.log "#this.initialize!"
+ @model.on 'change:options', ~>
+ changes = @model.changedAttributes()
+ console.log 'Model.changed(options) ->', changes
+ @chartOptions changes, {+silent}
@model.on 'change', @render, this
@model.on 'destroy', @remove, this
@$el.find 'fieldset' .append @scaffold.el
@scaffold.collection.reset that if o.graph_spec
+ @scaffold.on 'change', (scaffold, value, key, field) ~>
+ console.log "scaffold.change", value, key, field
+ @model.setOption key, value, {+silent}
+
+ options = @model.get 'options', {}
+ @chartOptions options, {+silent}
+
_.delay @render, DEBOUNCE_RENDER
- chartOptions: (values) ->
- # Handle @chartOptions k, v
- if arguments.length > 1
- [k, v] = arguments
+ chartOptions: (values, opts) ->
+ # Handle @chartOptions(k, v, opts)
+ if arguments.length > 1 and typeof values is 'string'
+ [k, v, opts] = arguments
values = { "#k": v }
options = @scaffold.collection
if values
for k, v in values
- options.get(k)?.setValue v
+ options.get(k)?.setValue v, opts
this
else
options.values()
+
render: ->
options = @chartOptions()
w = options.width or= @scaffold.get 'width' .getValue() or 480
@viewport.css('width')
@viewport.css('height')
@viewport.attr 'style'
- @viewport
+ # @viewport
console.log ' .options:', JSON.stringify options
# @chart?.destroy()
this
+ renderAll: ->
+ _.invoke @scaffold.subviews, 'render'
+ @scaffold.render()
+ @render()
+ this
+
onKeypress: (evt) ->
$(evt.target).submit() if evt.keyCode is 13
toKVPairs: (keepDefaults=false) ->
- @scaffold.toKVPairs()
+ @scaffold.toKVPairs keepDefaults
toString: -> "#{@ctorName}(#{@model})"
# }}}