--- /dev/null
+models = require 'kraken/graph/model'
+views = require 'kraken/graph/view'
+exports import models import views
--- /dev/null
+_ = require 'kraken/underscore'
+{ Field, FieldList, BaseView, FieldView, Scaffold
+} = require 'kraken/scaffold'
+
+
+
+class exports.TagSet extends Array
+ tags : {}
+
+ (values=[]) ->
+ @tags = {}
+ @add values if values?.length
+
+ has: (tag) ->
+ @tags[tag]?
+
+ get: (tag) ->
+ return -1 unless tag
+ unless @tags[tag]?
+ @tags[tag] = @length
+ @push tag
+ @tags[tag]
+
+ update: (tags) ->
+ is_single = typeof tags is 'string'
+ tags = [tags] if is_single
+ indices = ( for tag of tags then @get tag )
+ if is_single then indices[0] else indices
+
+ toString: -> "Tags(length=#{@length}, values=[\"#{@join '", "'}\"])"
+
+
+KNOWN_TAGS = exports.KNOWN_TAGS = new TagSet()
+
+
+/**
+ * Field with graph-option-specific handling for validation, parsing, tags, etc.
+ */
+GraphOption = exports.GraphOption = Field.extend do # {{{
+ ctorName : 'GraphOption'
+
+ initialize : ->
+ # console.log "#this.initialize!"
+ Field::initialize ...
+
+ # Notify Tag indexer of category when created, to ensure all category-tags
+ # get indices with colors :P
+ KNOWN_TAGS.update @getCategory()
+
+
+ # Wrapper to ensure @set('tags') is called, as tags.push()
+ # will not trigger the 'changed:tags' event.
+ addTag: (tag) ->
+ return this unless tag
+ tags = @get('tags', [])
+ tags.push tag
+ @set 'tags', tags
+ this
+
+ # Wrapper to ensure @set('tags') is called, as tags.push()
+ # will not trigger the 'changed:tags' event.
+ removeTag: (tag) ->
+ return this unless tag
+ tags = @get('tags', [])
+ _.remove tags, tag
+ @set 'tags', tags
+ this
+
+ # Keep tag list up to date
+ onTagUpdate: ->
+ KNOWN_TAGS.update @get 'tags'
+ this
+
+ getTagIndex: (tag) ->
+ KNOWN_TAGS.get tag
+
+ # A field's category is its first tag.
+ getCategory: ->
+ @get('tags', [])[0]
+
+ getCategoryIndex: ->
+ @getTagIndex @getCategory()
+
+
+ toJSON: ->
+ o = Field::toJSON ...
+ for k, v in o
+ o[k] = '' if v!?
+ o
+
+# }}}
+
+
+GraphOptionList = exports.GraphOptionList = FieldList.extend do # {{{
+ ctorName : 'GraphOptionList'
+ model : GraphOption
+ categories : {}
+
+
+ initialize : ->
+ FieldList::initialize ...
+ @categories = {}
+
+
+# }}}
+
+
_ = require 'kraken/underscore'
{ Field, FieldList, BaseView, FieldView, Scaffold
} = require 'kraken/scaffold'
+{ GraphOption, GraphOptionList, TagSet,
+} = require 'kraken/graph/model'
-class exports.TagSet extends Array
- tags : {}
-
- (values=[]) ->
- @tags = {}
- @add values if values?.length
-
- has: (tag) ->
- @tags[tag]?
-
- get: (tag) ->
- return -1 unless tag
- unless @tags[tag]?
- @tags[tag] = @length
- @push tag
- @tags[tag]
-
- update: (tags) ->
- is_single = typeof tags is 'string'
- tags = [tags] if is_single
- indices = ( for tag of tags then @get tag )
- if is_single then indices[0] else indices
-
- toString: -> "Tags(length=#{@length}, values=[\"#{@join '", "'}\"])"
-
-
-KNOWN_TAGS = exports.KNOWN_TAGS = new TagSet()
-
-
-/**
- * Field with graph-option-specific handling for validation, parsing, tags, etc.
- */
-GraphOption = exports.GraphOption = Field.extend do # {{{
- ctorName : 'GraphOption'
-
- initialize : ->
- # console.log "#this.initialize!"
- Field::initialize ...
-
- # Notify Tag indexer of category when created, to ensure all category-tags
- # get indices with colors :P
- KNOWN_TAGS.update @getCategory()
-
-
- # Wrapper to ensure @set('tags') is called, as tags.push()
- # will not trigger the 'changed:tags' event.
- addTag: (tag) ->
- return this unless tag
- tags = @get('tags', [])
- tags.push tag
- @set 'tags', tags
- this
-
- # Wrapper to ensure @set('tags') is called, as tags.push()
- # will not trigger the 'changed:tags' event.
- removeTag: (tag) ->
- return this unless tag
- tags = @get('tags', [])
- _.remove tags, tag
- @set 'tags', tags
- this
-
- # Keep tag list up to date
- onTagUpdate: ->
- KNOWN_TAGS.update @get 'tags'
- this
-
- getTagIndex: (tag) ->
- KNOWN_TAGS.get tag
-
- # A field's category is its first tag.
- getCategory: ->
- @get('tags', [])[0]
-
- getCategoryIndex: ->
- @getTagIndex @getCategory()
-
-
- toJSON: ->
- o = Field::toJSON ...
- for k, v in o
- o[k] = '' if v!?
- o
-
-# }}}
-
-
-GraphOptionList = exports.GraphOptionList = FieldList.extend do # {{{
- ctorName : 'GraphOptionList'
- model : GraphOption
- categories : {}
-
-
- initialize : ->
- FieldList::initialize ...
- @categories = {}
-
-
-# }}}
-
-
/**
* The view for a single configurable option.
*/
{_, op} = require 'kraken/util'
{ Field, FieldList, BaseView, FieldView, Scaffold
} = require 'kraken/scaffold'
-{ GraphView, GraphModel,
+{ GraphView, GraphModel, TagSet,
GraphOption, GraphOptionList, GraphOptionView,
GraphOptionsScaffold,
} = require 'kraken/graph'
- model
- view
- index
- - graph
+ - graph:
+ - model
+ - view
+ - index
+
# - suffix: .js
# paths: