coyote 1.0.0.beta1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. data/Manifest +22 -1
  2. data/coyote.gemspec +4 -4
  3. data/lib/coyote.rb +2 -2
  4. data/lib/coyote.rb.orig +79 -0
  5. data/test/src/public/assets/javascripts/app/application/interface.coffee +10 -0
  6. data/test/src/public/assets/javascripts/app/application/main.coffee +14 -0
  7. data/test/src/public/assets/javascripts/app/application/pages/home.coffee +9 -0
  8. data/test/src/public/assets/javascripts/app/boot.coffee +1 -0
  9. data/test/src/public/assets/javascripts/lib/imulus.coffee +7 -0
  10. data/test/src/public/assets/javascripts/lib/imulus/forms.coffee +46 -0
  11. data/test/src/public/assets/javascripts/lib/imulus/maps/infowindow.coffee +37 -0
  12. data/test/src/public/assets/javascripts/lib/imulus/maps/map.coffee +51 -0
  13. data/test/src/public/assets/javascripts/lib/imulus/maps/marker.coffee +66 -0
  14. data/test/src/public/assets/javascripts/lib/imulus/maps/point.coffee +5 -0
  15. data/test/src/public/assets/javascripts/lib/imulus/maps/results.coffee +117 -0
  16. data/test/src/public/assets/javascripts/lib/imulus/tables.coffee +11 -0
  17. data/test/src/public/assets/javascripts/lib/imulus/triggers.coffee +26 -0
  18. data/test/src/public/assets/javascripts/scripts.coffee +14 -0
  19. data/test/src/public/assets/javascripts/vendor/jquery.js +18 -0
  20. data/test/src/public/assets/javascripts/vendor/jquery/jquery.cookie.js +89 -0
  21. data/test/src/public/assets/javascripts/vendor/jquery/jquery.cycle.js +21 -0
  22. data/test/src/public/assets/javascripts/vendor/jquery/jquery.query.js +224 -0
  23. data/test/src/public/assets/javascripts/vendor/swfobject.js +4 -0
  24. data/test/src/public/scripts/scripts.combine +18 -0
  25. data/test/src/public/scripts/scripts.js +944 -0
  26. metadata +35 -12
data/Manifest CHANGED
@@ -1,8 +1,8 @@
1
1
  README.md
2
2
  Rakefile
3
3
  bin/coyote
4
- coyote.gemspec
5
4
  lib/coyote.rb
5
+ lib/coyote.rb.orig
6
6
  lib/coyote/asset.rb
7
7
  lib/coyote/assets/coffeescript.rb
8
8
  lib/coyote/assets/javascript.rb
@@ -23,4 +23,25 @@ test/scripts/lib/input5.coffee
23
23
  test/scripts/lib/input6.js
24
24
  test/scripts/lib/keystone/input7.js
25
25
  test/scripts/vendor/input8.coffee
26
+ test/src/public/assets/javascripts/app/application/interface.coffee
27
+ test/src/public/assets/javascripts/app/application/main.coffee
28
+ test/src/public/assets/javascripts/app/application/pages/home.coffee
29
+ test/src/public/assets/javascripts/app/boot.coffee
30
+ test/src/public/assets/javascripts/lib/imulus.coffee
31
+ test/src/public/assets/javascripts/lib/imulus/forms.coffee
32
+ test/src/public/assets/javascripts/lib/imulus/maps/infowindow.coffee
33
+ test/src/public/assets/javascripts/lib/imulus/maps/map.coffee
34
+ test/src/public/assets/javascripts/lib/imulus/maps/marker.coffee
35
+ test/src/public/assets/javascripts/lib/imulus/maps/point.coffee
36
+ test/src/public/assets/javascripts/lib/imulus/maps/results.coffee
37
+ test/src/public/assets/javascripts/lib/imulus/tables.coffee
38
+ test/src/public/assets/javascripts/lib/imulus/triggers.coffee
39
+ test/src/public/assets/javascripts/scripts.coffee
40
+ test/src/public/assets/javascripts/vendor/jquery.js
41
+ test/src/public/assets/javascripts/vendor/jquery/jquery.cookie.js
42
+ test/src/public/assets/javascripts/vendor/jquery/jquery.cycle.js
43
+ test/src/public/assets/javascripts/vendor/jquery/jquery.query.js
44
+ test/src/public/assets/javascripts/vendor/swfobject.js
45
+ test/src/public/scripts/scripts.combine
46
+ test/src/public/scripts/scripts.js
26
47
  Manifest
data/coyote.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{coyote}
5
- s.version = "1.0.0.beta1"
5
+ s.version = "1.0.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Imulus"]
9
- s.date = %q{2012-02-13}
9
+ s.date = %q{2012-02-14}
10
10
  s.default_executable = %q{coyote}
11
11
  s.description = %q{An intelligent command-line tool for combining, compressing and compiling your JavaScript and CoffeeScript files.}
12
12
  s.email = %q{developer@imulus.com}
13
13
  s.executables = ["coyote"]
14
- s.extra_rdoc_files = ["README.md", "bin/coyote", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/bundle.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/configuration.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb"]
15
- s.files = ["README.md", "Rakefile", "bin/coyote", "coyote.gemspec", "lib/coyote.rb", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/bundle.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/configuration.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "test/scripts/input1.js", "test/scripts/input2.js", "test/scripts/input3.js", "test/scripts/input4.js", "test/scripts/lib/input5.coffee", "test/scripts/lib/input6.js", "test/scripts/lib/keystone/input7.js", "test/scripts/vendor/input8.coffee", "Manifest"]
14
+ s.extra_rdoc_files = ["README.md", "bin/coyote", "lib/coyote.rb", "lib/coyote.rb.orig", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/bundle.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/configuration.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb"]
15
+ s.files = ["README.md", "Rakefile", "bin/coyote", "lib/coyote.rb", "lib/coyote.rb.orig", "lib/coyote/asset.rb", "lib/coyote/assets/coffeescript.rb", "lib/coyote/assets/javascript.rb", "lib/coyote/bundle.rb", "lib/coyote/closure_compiler.rb", "lib/coyote/configuration.rb", "lib/coyote/fs_listener.rb", "lib/coyote/fs_listeners/darwin.rb", "lib/coyote/fs_listeners/linux.rb", "lib/coyote/fs_listeners/polling.rb", "lib/coyote/fs_listeners/windows.rb", "lib/coyote/notifications.rb", "test/scripts/input1.js", "test/scripts/input2.js", "test/scripts/input3.js", "test/scripts/input4.js", "test/scripts/lib/input5.coffee", "test/scripts/lib/input6.js", "test/scripts/lib/keystone/input7.js", "test/scripts/vendor/input8.coffee", "test/src/public/assets/javascripts/app/application/interface.coffee", "test/src/public/assets/javascripts/app/application/main.coffee", "test/src/public/assets/javascripts/app/application/pages/home.coffee", "test/src/public/assets/javascripts/app/boot.coffee", "test/src/public/assets/javascripts/lib/imulus.coffee", "test/src/public/assets/javascripts/lib/imulus/forms.coffee", "test/src/public/assets/javascripts/lib/imulus/maps/infowindow.coffee", "test/src/public/assets/javascripts/lib/imulus/maps/map.coffee", "test/src/public/assets/javascripts/lib/imulus/maps/marker.coffee", "test/src/public/assets/javascripts/lib/imulus/maps/point.coffee", "test/src/public/assets/javascripts/lib/imulus/maps/results.coffee", "test/src/public/assets/javascripts/lib/imulus/tables.coffee", "test/src/public/assets/javascripts/lib/imulus/triggers.coffee", "test/src/public/assets/javascripts/scripts.coffee", "test/src/public/assets/javascripts/vendor/jquery.js", "test/src/public/assets/javascripts/vendor/jquery/jquery.cookie.js", "test/src/public/assets/javascripts/vendor/jquery/jquery.cycle.js", "test/src/public/assets/javascripts/vendor/jquery/jquery.query.js", "test/src/public/assets/javascripts/vendor/swfobject.js", "test/src/public/scripts/scripts.combine", "test/src/public/scripts/scripts.js", "Manifest", "coyote.gemspec"]
16
16
  s.homepage = %q{http://github.com/imulus/coyote}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Coyote", "--main", "README.md"]
18
18
  s.require_paths = ["lib"]
data/lib/coyote.rb CHANGED
@@ -7,7 +7,7 @@ include Coyote::Notifications
7
7
 
8
8
  module Coyote
9
9
 
10
- VERSION = '1.0.0.beta1'
10
+ VERSION = '1.0.0'
11
11
 
12
12
  def self.run(input_path, output_path, options = {})
13
13
  @@input_path = input_path
@@ -43,7 +43,7 @@ module Coyote
43
43
  end
44
44
  end
45
45
 
46
- notify "Watching for changes to your bundle. CTRL+C to stop."
46
+ notify "#{Time.new.strftime("%I:%M:%S")} Watching for changes to your bundle. CTRL+C to stop."
47
47
  listener.start
48
48
  end
49
49
  end
@@ -0,0 +1,79 @@
1
+ require 'coyote/configuration'
2
+ require 'coyote/bundle'
3
+ require 'coyote/fs_listener'
4
+ require 'coyote/notifications'
5
+ include Coyote::Notifications
6
+
7
+
8
+ module Coyote
9
+ <<<<<<< HEAD
10
+ APP_NAME = "Coyote"
11
+ VERSION = "0.7.0"
12
+ ROOT_PATH = Dir.pwd
13
+ CONFIG_PATH = File.expand_path(File.dirname(__FILE__) + "/../config")
14
+ CONFIG_FILENAME = "coyote.yaml"
15
+ CONFIG_ICON = "coyote-icon.png"
16
+ USAGE_FILENAME = "coyote-usage.txt"
17
+
18
+ module Defaults
19
+ OUTPUT = "coyote.js"
20
+ =======
21
+
22
+ VERSION = '1.0.0'
23
+
24
+ def self.run(input_path, output_path, options = {})
25
+ @@input_path = input_path
26
+ @@output_path = output_path
27
+ @@options = options
28
+ bundle = Coyote::Bundle.new(input_path, output_path)
29
+ build bundle
30
+ watch bundle if @@options[:watch]
31
+ >>>>>>> develop
32
+ end
33
+
34
+ def self.options
35
+ ['compress', 'watch', 'quiet']
36
+ end
37
+
38
+ def self.build(bundle)
39
+ notify bundle.manifest unless @@options[:quiet]
40
+ bundle.compress! if @@options[:compress]
41
+ bundle.save
42
+ notify "#{Time.new.strftime("%I:%M:%S")} Saved bundle to #{@@output_path} [#{bundle.files.length} files]", :success
43
+ end
44
+
45
+
46
+ def self.watch(bundle)
47
+ listener = Coyote::FSListener.select_and_init
48
+
49
+ <<<<<<< HEAD
50
+ inputs = config.inputs.values.collect do |script|
51
+ script.relative_path
52
+ end
53
+
54
+ listener.on_change do |files|
55
+ if files.include? config.source
56
+ Coyote::Notification.new "Config file (#{config.source}) changed. Reading it in.\n", "warning"
57
+ config.load_from_yaml! config.source
58
+ self.build config
59
+ else
60
+ changed_watched_files = inputs & files
61
+ if changed_watched_files.length > 0
62
+ self.build config
63
+ end
64
+ =======
65
+ listener.on_change do |changed_files|
66
+ changed_files = bundle.files & changed_files
67
+
68
+ if changed_files.length > 0
69
+ notify "#{Time.new.strftime("%I:%M:%S")} Detected change, recompiling...", :warning
70
+ bundle.update! changed_files
71
+ build bundle
72
+ >>>>>>> develop
73
+ end
74
+ end
75
+
76
+ notify "#{Time.new.strftime("%I:%M:%S")} Watching for changes to your bundle. CTRL+C to stop."
77
+ listener.start
78
+ end
79
+ end
@@ -0,0 +1,10 @@
1
+ @module "Application", ->
2
+
3
+ class @Interface
4
+ constructor: ->
5
+ do @build
6
+
7
+ build: ->
8
+ new Imulus.Forms
9
+ new Imulus.Tables
10
+ new Imulus.Triggers
@@ -0,0 +1,14 @@
1
+ @module "Application", ->
2
+
3
+ @main = ->
4
+ new Application.Interface
5
+
6
+ initializers = $('body').attr('data-js-init')
7
+
8
+ Application.initializers = if initializers? then initializers.replace(" ","").split(",") else []
9
+
10
+ for initializer in Application.initializers
11
+ segments = initializer.split(".")
12
+ method = window
13
+ method = method[segment] for segment in segments
14
+ do method if method?
@@ -0,0 +1,9 @@
1
+ @module "Application.Pages", ->
2
+
3
+ @home = ->
4
+ $('#slides').cycle({
5
+ fx : 'fade',
6
+ speed : 1000,
7
+ timeout : 5000,
8
+ pager : "#slides-nav"
9
+ });
@@ -0,0 +1 @@
1
+ $ -> Application.main()
@@ -0,0 +1,7 @@
1
+ @module "Imulus", ->
2
+
3
+ @VERSION = '0.1.0'
4
+
5
+ @elementSupportsAttribute = (element, attribute)->
6
+ attribute of document.createElement element
7
+
@@ -0,0 +1,46 @@
1
+ @module "Imulus", ->
2
+ class @Forms
3
+ constructor: ($form)->
4
+ do @build
5
+
6
+ build: ->
7
+ if not Imulus.elementSupportsAttribute 'input', 'placeholder'
8
+ $('input[placeholder]').each ->
9
+ $input = $(this)
10
+ placeholder = $input.attr 'placeholder'
11
+ $input.val(placeholder).addClass 'inactive'
12
+ $input.bind
13
+ focus : ->
14
+ if $input.val() is placeholder
15
+ $input.val('').removeClass 'inactive'
16
+ blur : ->
17
+ if $input.val() is ''
18
+ $input.val(placeholder).addClass 'inactive'
19
+
20
+
21
+
22
+ $('fieldset.overlay .row').each ->
23
+
24
+ $label = $(this).find 'label'
25
+ $input = $(this).find 'input'
26
+
27
+ if $input.val() isnt ""
28
+ $label.hide()
29
+
30
+ $label.click -> $input.focus()
31
+
32
+ $input.bind
33
+ focus: ->
34
+ if $input.val() is ""
35
+ $label.addClass 'faded'
36
+
37
+ blur: ->
38
+ if $input.val() is ""
39
+ $label.fadeIn().removeClass 'faded'
40
+
41
+ change: ->
42
+ if $input.val() isnt ""
43
+ $label.fadeOut().removeClass 'faded'
44
+
45
+ keypress: ->
46
+ $label.hide().removeClass 'faded'
@@ -0,0 +1,37 @@
1
+ @module "Imulus", ->
2
+ @module "Maps", ->
3
+ class @InfoWindow
4
+
5
+ # Class variable
6
+ @windows: []
7
+
8
+ constructor : (@map, @marker, params)->
9
+ Imulus.Maps.InfoWindow.windows.push this
10
+ {@title, @body} = params
11
+ do @build
12
+
13
+ settings : {}
14
+
15
+ build : ->
16
+ content = "<div class='infowindow-content'>"
17
+ if @title then content += "<div class='title'>#{@title}</div>"
18
+ if @body then content += "<div class='body'>#{@body}</div>"
19
+ content += "</div>";
20
+
21
+ @settings.content = content
22
+
23
+ @window = new google.maps.InfoWindow @settings
24
+
25
+
26
+ open : ->
27
+ do @closeAll
28
+ @window.open @map.canvas, @marker
29
+
30
+
31
+ close : ->
32
+ @window.close()
33
+
34
+
35
+ closeAll : ->
36
+ _window.close() for _window in Imulus.Maps.InfoWindow.windows
37
+
@@ -0,0 +1,51 @@
1
+ @module "Imulus", ->
2
+ @module "Maps", ->
3
+ class @Map
4
+
5
+ settings:
6
+ panControl : true
7
+ zoomControl : true
8
+ mapTypeControl : false
9
+ scaleControl : false
10
+ streetViewControl : false
11
+ overviewMapControl : false
12
+ mapTypeControl : false
13
+
14
+ constructor: (params, @element)->
15
+ @canvas = null
16
+ @center = new Imulus.Maps.Point params.lat, params.lng
17
+ @markers = {}
18
+ @settings.center = @center.latLng
19
+ @settings.mapTypeId = google.maps.MapTypeId[params.type] or google.maps.MapTypeId['TERRAIN']
20
+ @settings.zoom = parseInt params.zoom or 10
21
+ @setCanvas @element if @element
22
+ @addMarkers params.markers if params.markers
23
+
24
+ setCanvas: (element)-> @canvas = new google.maps.Map document.getElementById(element), @settings
25
+
26
+ setCenter: (lat, lng) ->
27
+ @center = new Imulus.Maps.Point params.lat, params.lng
28
+ do @recenter
29
+
30
+ recenter: -> @canvas.setCenter @center
31
+
32
+ reset: ->
33
+ do @recenter
34
+ @canvas.setZoom parseInt @settings.zoom
35
+
36
+ addMarkers: (markers)->
37
+ @addMarker marker for marker in markers
38
+
39
+ addMarker: (params)->
40
+ marker = new Imulus.Maps.Marker this, params
41
+ @markers[marker.id] = marker
42
+ return marker
43
+
44
+ hideMarkers : (deleteMarkers)->
45
+ marker.hide() for index, marker of @markers
46
+ if deleteMarkers
47
+ do @deleteMarkers
48
+
49
+ deleteMarkers : ->
50
+ for marker, index of @markers
51
+ delete marker
@@ -0,0 +1,66 @@
1
+ @module "Imulus", ->
2
+ @module "Maps", ->
3
+ class @Marker
4
+
5
+ constructor: (@map, params)->
6
+ @hidden = false
7
+ {@id} = params
8
+ @center = new Imulus.Maps.Point params.lat, params.lng
9
+ @infoWindow = null
10
+ @fill_color = params.fill_color or Marker::fill_color or '#F0F'
11
+ @text_color = params.text_color or Marker::text_color or '#000'
12
+ @index = params.index
13
+ @letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'][@index] or ""
14
+
15
+ shadow = new google.maps.MarkerImage 'http://chart.apis.google.com/chart?chst=d_map_pin_shadow',
16
+ new google.maps.Size(40, 37), new google.maps.Point(0,0), new google.maps.Point(0, 37)
17
+
18
+ @marker = new google.maps.Marker
19
+ position : @center.latLng
20
+ map : @map.canvas
21
+ shadow : shadow
22
+
23
+ @setColor @fill_color
24
+ @setInfoWindow params.infoWindow if params.infoWindow
25
+ do @show
26
+ do @observe
27
+
28
+
29
+ observe : ->
30
+ if @infoWindow isnt null
31
+ google.maps.event.addListener @marker, 'click', =>
32
+ @infoWindow.open @marker
33
+
34
+ show : ->
35
+ @marker.setMap @map.canvas
36
+ @hidden = false
37
+
38
+
39
+ hide : ->
40
+ @marker.setMap null
41
+ @infoWindow.closeAll() if @infoWindow?
42
+ @hidden = true
43
+
44
+
45
+
46
+
47
+
48
+ setColor : (color)->
49
+ @fill_color = color
50
+ @image_url = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{@letter}|#{@fill_color.substring(1)}|#{@text_color.substring(1)}"
51
+ width = 21
52
+ height = 34
53
+
54
+ icon = new google.maps.MarkerImage(@image_url,
55
+ new google.maps.Size(width, height),
56
+ new google.maps.Point(0,0),
57
+ new google.maps.Point(0, height))
58
+
59
+ @marker.setOptions icon: icon
60
+
61
+
62
+ setInfoWindow : (params)->
63
+ @infoWindow = new Imulus.Maps.InfoWindow @map, @marker, params
64
+ do @observe
65
+
66
+
@@ -0,0 +1,5 @@
1
+ @module "Imulus", ->
2
+ @module "Maps", ->
3
+ class @Point
4
+ constructor: (@lat, @lng) ->
5
+ @latLng = new google.maps.LatLng parseFloat(@lat), parseFloat(@lng)
@@ -0,0 +1,117 @@
1
+ @module "Imulus", ->
2
+ @module "Maps", ->
3
+ class @Results
4
+
5
+ constructor: (@$table, @data)->
6
+ @$head = @$table.find('thead')
7
+ @$body = @$table.find('tbody')
8
+ @$foot = @$table.find('tfoot')
9
+ @$prev = null
10
+ @$next = null
11
+ @proto = []
12
+ @limit = 25
13
+ @total = 0
14
+ @sets = []
15
+ @active_set = 0
16
+ @paginated = false
17
+ do @build
18
+
19
+ build: ->
20
+ # Build the <thead>
21
+ col = 0
22
+ $row = $('<tr />')
23
+ for column in @data.table
24
+ @proto.push column.Key
25
+ col++
26
+ $cell = $('<th />').attr('class', "col-#{col}").html(column.Value)
27
+ $row.append($cell)
28
+ @$head.append $row
29
+
30
+ # Build the <tfoot>
31
+ $row = $('<tr />')
32
+ for num in [1..@proto.length]
33
+ value = ""
34
+ if num is 1
35
+ @$prev = $("<a />").attr({"href": "#", "class": "prev"}).html("&laquo; Previous").hide()
36
+ value = @$prev
37
+ if num is @proto.length
38
+ @$next = $("<a />").attr({"href": "#", "class": "next"}).html("Next &raquo;").hide()
39
+ value = @$next
40
+ $cell = $('<td />').html value
41
+ $row.append($cell)
42
+ @$foot.append $row
43
+
44
+
45
+ reset: ->
46
+ @$body.empty()
47
+ @total = 0
48
+ @sets = []
49
+ @active_set = 0
50
+ @$foot.hide()
51
+
52
+ add: (node)->
53
+ @total++
54
+ index = @sets.length - 1
55
+
56
+ if @total % @limit is 1
57
+ index = index + 1
58
+ if @total <= @limit
59
+ index = 0
60
+
61
+ @sets[index] = [] if not @sets[index]?
62
+ @sets[index].push node
63
+
64
+ if @total is @limit then @loadSet(0)
65
+ if @total > @limit and not @paginated then @paginate()
66
+
67
+
68
+ paginate: ->
69
+ @paginated = true
70
+
71
+ @$foot.show()
72
+
73
+ @$prev.show().click (event) =>
74
+ event.preventDefault()
75
+ if @active_set > 0
76
+ new_set_index = @active_set - 1
77
+ else
78
+ new_set_index = @sets.length - 1
79
+ @loadSet new_set_index
80
+
81
+ @$next.show().click (event) =>
82
+ event.preventDefault()
83
+ if @active_set < @sets.length - 1
84
+ new_set_index = @active_set + 1
85
+ else
86
+ new_set_index = 0
87
+ @loadSet new_set_index
88
+
89
+ observe : (action, callback) ->
90
+ @$body.find('tr').live action, ->
91
+ id = $(this).attr 'data-marker-id'
92
+ callback id
93
+
94
+
95
+ loadSet: (index) ->
96
+ @$body.empty()
97
+ @active_set = index
98
+ @addRow node for node in @sets[@active_set]
99
+
100
+
101
+ addRow: (node)->
102
+ $row = $('<tr />').attr 'data-marker-id', node.id
103
+
104
+ for column in @proto
105
+ for property in node.customProperties
106
+ if property.Key is column
107
+ $row.append $('<td />').html property.Value
108
+
109
+ @$body.append $row
110
+
111
+
112
+ none: (text)->
113
+ if text
114
+ $row = $('<tr />')
115
+ $row.append $('<td />').html text
116
+ @$body.append $row
117
+