From 53d6d699624af0ee586880423a657836144d24c5 Mon Sep 17 00:00:00 2001 From: dsc Date: Mon, 27 Feb 2012 16:11:11 -0800 Subject: [PATCH] Implements toKVPairs and scaffold accepts options. --- lib/graph/model.co | 16 +++++++------ lib/graph/view.co | 58 +++++++++++++++++++++++++++++++++++++------------- lib/main.co | 2 +- lib/scaffold/view.co | 8 +++--- www/modules.yaml | 2 +- 5 files changed, 58 insertions(+), 28 deletions(-) diff --git a/lib/graph/model.co b/lib/graph/model.co index c635414..e092f58 100644 --- a/lib/graph/model.co +++ b/lib/graph/model.co @@ -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: -> diff --git a/lib/graph/view.co b/lib/graph/view.co index 5dffbfe..f8c335c 100644 --- a/lib/graph/view.co +++ b/lib/graph/view.co @@ -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})" # }}} diff --git a/lib/main.co b/lib/main.co index 30dda30..5ba6cc9 100644 --- a/lib/main.co +++ b/lib/main.co @@ -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, diff --git a/lib/scaffold/view.co b/lib/scaffold/view.co index 0e7a605..e9c9c89 100644 --- a/lib/scaffold/view.co +++ b/lib/scaffold/view.co @@ -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() diff --git a/www/modules.yaml b/www/modules.yaml index 4a075f7..58f267f 100644 --- a/www/modules.yaml +++ b/www/modules.yaml @@ -35,7 +35,7 @@ all: - op - backbone - index - - baseview + - base - template: - graph.jade - graph-option.jade -- 1.7.0.4