Implements toKVPairs and scaffold accepts options.
authordsc <dsc@less.ly>
Tue, 28 Feb 2012 00:11:11 +0000 (16:11 -0800)
committerdsc <dsc@less.ly>
Tue, 28 Feb 2012 00:11:11 +0000 (16:11 -0800)
lib/graph/model.co
lib/graph/view.co
lib/main.co
lib/scaffold/view.co
www/modules.yaml

index c635414..e092f58 100644 (file)
@@ -136,7 +136,7 @@ GraphModel = exports.GraphModel = BaseModel.extend do # {{{
         {
             name    : 'Kraken Graph'
             dataset : '/data/page_views_by_language.csv'
-            options : {}
+            options : { stackedGraph:1 }
         }
     
     
@@ -144,19 +144,21 @@ GraphModel = exports.GraphModel = BaseModel.extend do # {{{
         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: ->
index 5dffbfe..f8c335c 100644 (file)
@@ -1,11 +1,11 @@
 _ = 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
 
 
 /**
@@ -49,9 +49,9 @@ GraphOptionView = exports.GraphOptionView = FieldView.extend do # {{{
     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
     
 # }}}
@@ -71,7 +71,7 @@ GraphOptionsScaffold = exports.GraphOptionsScaffold = Scaffold.extend do # {{{
         @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'
@@ -80,8 +80,15 @@ GraphOptionsScaffold = exports.GraphOptionsScaffold = Scaffold.extend do # {{{
             # 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
@@ -95,6 +102,7 @@ GraphOptionsScaffold = exports.GraphOptionsScaffold = Scaffold.extend do # {{{
 
 
 GraphView = exports.GraphView = BaseView.extend do # {{{
+    __bind__  : <[ render renderAll ]>
     ctorName  : 'GraphView'
     tagName   : 'section'
     className : 'graph'
@@ -106,11 +114,17 @@ GraphView = exports.GraphView = BaseView.extend do # {{{
     
     
     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
         
@@ -121,23 +135,31 @@ GraphView = exports.GraphView = BaseView.extend do # {{{
         @$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
@@ -153,7 +175,7 @@ GraphView = exports.GraphView = BaseView.extend do # {{{
             @viewport.css('width')
             @viewport.css('height')
             @viewport.attr 'style'
-            @viewport
+            # @viewport
         console.log '  .options:', JSON.stringify options
         
         # @chart?.destroy()
@@ -168,6 +190,12 @@ GraphView = exports.GraphView = BaseView.extend do # {{{
         
         this
     
+    renderAll: ->
+        _.invoke @scaffold.subviews, 'render'
+        @scaffold.render()
+        @render()
+        this
+    
     onKeypress: (evt) ->
         $(evt.target).submit() if evt.keyCode is 13
     
@@ -178,7 +206,7 @@ GraphView = exports.GraphView = BaseView.extend do # {{{
     
     
     toKVPairs: (keepDefaults=false) ->
-        @scaffold.toKVPairs()
+        @scaffold.toKVPairs keepDefaults
     
     toString: -> "#{@ctorName}(#{@model})"
 # }}}
index 30dda30..5ba6cc9 100644 (file)
@@ -1,5 +1,5 @@
 {_, op}    = require 'kraken/util'
-{BaseView} = require 'kraken/baseview'
+{BaseView} = require 'kraken/base'
 {   Field, FieldList, FieldView, Scaffold
 }          = require 'kraken/scaffold'
 {   GraphView, GraphModel, TagSet,
index 0e7a605..e9c9c89 100644 (file)
@@ -1,6 +1,6 @@
 _          = require 'kraken/underscore'
 op         = require 'kraken/util/op'
-{BaseView} = require 'kraken/baseview'
+{BaseView} = require 'kraken/base'
 { Field, FieldList,
 }          = require 'kraken/scaffold/model'
 
@@ -14,9 +14,9 @@ FieldView = exports.FieldView = BaseView.extend do # {{{
         'submit .value' : 'onUIChange'
     
     
-    initialize: ->
-        # console.log "#this.initialize!"
-        BaseView::initialize ...
+    # initialize: ->
+    #     # console.log "#this.initialize!"
+    #     BaseView::initialize ...
     
     onUIChange: ->
         val     = @$el.find('.value').val()
index 4a075f7..58f267f 100644 (file)
@@ -35,7 +35,7 @@ all:
                 - op
                 - backbone
                 - index
-            - baseview
+            - base
             - template:
                 - graph.jade
                 - graph-option.jade