pulse_meter-dygraphs_visualizer 0.4.21 → 0.4.22

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59fa9a27bec80b059be63f171091f9eacfbe7560
4
- data.tar.gz: bf82152b3b4e715124dbbf36846d2a5c5eb57b5f
3
+ metadata.gz: c1d31aec95a53a78b4820805e035a9d1c1d10164
4
+ data.tar.gz: 2aeb9c3528fd6a103af9180379df8b4116270713
5
5
  SHA512:
6
- metadata.gz: cae261915e613d9cb684ef1bde9afa69c26071bc9add6946695fff632e0e5cad30d8068d9bf3d01c5b0ed2aae2ebdd515c7764ca850a1da66ac003385ca2a4f9
7
- data.tar.gz: 80798c35b1b368a2c885715d858cc44879c8f1ec42262c189be0edf2249b35edf12a1703e581f02d7cd91b4f4e8c397a3e0cdae421a6d2226e0d0e3ee23856fe
6
+ metadata.gz: d49cb50fe390c5862b9c7a8b6e4623a0266f2cef6afa54e382cb216912e8b0ff04f83eab660c0af0d24adc0bdcac3cc17108384e67d774c3c19d483e9815a787
7
+ data.tar.gz: 0a5816501bf62f0f0e87b7dc3ddae30ec9df45965a4e6b3647e0e515a1fde61b1dd48b20c0b9efbd2caf3f4eaa40b3a82bd09ad43345ab76d065a006afa510dd
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/version_tmp
17
17
  tmp
18
18
  *.sw?
19
19
  /.idea
20
+ /node_modules
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.3.1
data/Procfile CHANGED
@@ -1,3 +1,3 @@
1
- watch_coffee: bundle exec rake coffee:watch
1
+ watch_coffee: bundle exec rake coffee:watch --trace
2
2
  web_sample: bundle exec rackup examples/basic.ru
3
3
  sensor_sample: bundle exec ruby examples/basic_sensor_data.rb
data/Rakefile CHANGED
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require 'bundler/gem_tasks'
3
- require 'coffee-script'
4
3
  require 'listen'
5
4
  require 'rspec/core/rake_task'
6
- require 'sprockets'
7
- require 'tilt'
8
5
  require 'yard'
9
6
  require 'yard/rake/yardoc_task'
10
7
 
@@ -12,19 +9,44 @@ RSpec::Core::RakeTask.new(:spec)
12
9
 
13
10
  YARD::Rake::YardocTask.new(:yard)
14
11
 
15
- ROOT = File.dirname(__FILE__)
16
-
17
12
  task :default => :spec
18
13
 
14
+ STDOUT.sync = true
15
+
19
16
  namespace :coffee do
20
- COFFEE_PATH = "#{ROOT}/lib/pulse_meter/dygraphs_visualize/coffee"
17
+ COFFEE_PATH = "lib/pulse_meter/dygraphs_visualize/coffee"
18
+ COFFEE_FILES = %w{
19
+ extensions
20
+ models/page_info
21
+ models/widget
22
+ models/dinamic_widget
23
+ models/sensor_info
24
+ collections/page_info_list
25
+ collections/sensor_info_list
26
+ collections/widget_list
27
+ presenters/widget
28
+ presenters/timeline
29
+ presenters/series
30
+ presenters/line
31
+ presenters/stack
32
+ views/page_title
33
+ views/page_titles
34
+ views/sensor_info_list
35
+ views/dynamic_chart
36
+ views/dynamic_widget
37
+ views/widget_chart
38
+ views/widget
39
+ views/widget_list
40
+ router
41
+ application
42
+ }.map{|f| "#{COFFEE_PATH}/#{f}.coffee"}.join(" ")
43
+ APP_JS = "lib/pulse_meter/dygraphs_visualize/public/js/application.js"
44
+ COFFEE_SCRIPT = "node_modules/coffee-script/bin/coffee"
21
45
 
22
46
  def compile_js
23
- Tilt::CoffeeScriptTemplate.default_bare = true
24
- env = Sprockets::Environment.new
25
- env.append_path COFFEE_PATH
26
- data = env['application.coffee']
27
- open("#{ROOT}/lib/pulse_meter/dygraphs_visualize/public/js/application.js", "w").write(data)
47
+ command = "cat #{COFFEE_FILES} | #{COFFEE_SCRIPT} --compile --bare --stdio > #{APP_JS}"
48
+ puts "running #{command}"
49
+ system(command)
28
50
  puts "application.js compiled"
29
51
  end
30
52
 
@@ -35,13 +57,15 @@ namespace :coffee do
35
57
 
36
58
  desc "Watch coffee files and recomplile them immediately"
37
59
  task :watch do
38
- Listen.to(COFFEE_PATH) do |modified, added, removed|
60
+ listener = Listen.to(COFFEE_PATH) do |modified, added, removed|
39
61
  puts "Modified: #{modified}" unless modified.empty?
40
62
  puts "Added: #{added}" unless added.empty?
41
63
  puts "Removed: #{removed}" unless removed.empty?
42
64
  puts "Recompiling..."
43
65
  compile_js
44
66
  end
67
+ listener.start
68
+ sleep
45
69
  end
46
70
  end
47
71
 
@@ -51,4 +75,3 @@ namespace :yard do
51
75
  system 'open', "#{ROOT}/doc/index.html"
52
76
  end
53
77
  end
54
-
@@ -1,7 +1,7 @@
1
1
  $: << File.join(File.absolute_path(__FILE__), '..', 'lib')
2
2
 
3
3
  require "pulse_meter_core"
4
-
4
+
5
5
  PulseMeter.redis = Redis.new
6
6
 
7
7
  cfg = PulseMeter::Sensor::Configuration.new(
@@ -80,9 +80,9 @@ cfg = PulseMeter::Sensor::Configuration.new(
80
80
  while true
81
81
  sleep(Random.rand)
82
82
  STDERR.puts "tick"
83
- cfg.lama_count(1)
83
+ cfg.lama_count(Random.rand(10_000_000))
84
84
  cfg.lama_count_1min(10)
85
- cfg.rhino_count(2)
85
+ cfg.rhino_count(-Random.rand(10_000))
86
86
  cfg.lama_average_age(Random.rand(50))
87
87
  cfg.rhino_average_age(Random.rand(100))
88
88
 
@@ -1,26 +1,3 @@
1
- #= require extensions
2
- #= require models/page_info
3
- #= require models/widget
4
- #= require models/dinamic_widget
5
- #= require models/sensor_info
6
- #= require collections/page_info_list
7
- #= require collections/sensor_info_list
8
- #= require collections/widget_list
9
- #= require presenters/widget
10
- #= require presenters/timeline
11
- #= require presenters/series
12
- #= require presenters/line
13
- #= require presenters/stack
14
- #= require views/page_title
15
- #= require views/page_titles
16
- #= require views/sensor_info_list
17
- #= require views/dynamic_chart
18
- #= require views/dynamic_widget
19
- #= require views/widget_chart
20
- #= require views/widget
21
- #= require views/widget_list
22
- #= require router
23
-
24
1
  document.startApp = ->
25
2
  pageInfos = new PageInfoList
26
3
  pageTitlesApp = new PageTitlesView(pageInfos)
@@ -14,7 +14,7 @@ class WidgetPresenter
14
14
  (new Date).getTimezoneOffset() * 60000
15
15
  else
16
16
  0
17
-
17
+
18
18
  options: -> {
19
19
  labelsDiv: @legendEl
20
20
  labelsSeparateLines: false
@@ -25,6 +25,14 @@ class WidgetPresenter
25
25
  strokeWidth: 2
26
26
  strokeBorderWidth: 1
27
27
  highlightCircleSize: 5
28
+
29
+ axisLabelWidth: 80
30
+
31
+ axes:
32
+ y:
33
+ valueFormatter: (x) -> x
34
+ axisLabelFormatter: (x) => @formatValueLabel(x)
35
+
28
36
  }
29
37
 
30
38
  mergedOptions: ->
@@ -42,6 +50,22 @@ class WidgetPresenter
42
50
 
43
51
  data: -> new google.visualization.DataTable
44
52
 
53
+ formatValueLabel: (v) ->
54
+ sign = if v < 0 then "-" else ""
55
+ absv = Math.abs(v)
56
+ if absv >= 1000000000
57
+ v.toPrecision(4)
58
+ else
59
+ if absv >= 1000000
60
+ "#{sign}#{Math.floor(absv / 1000000)}kk"
61
+ else
62
+ if absv >= 1000
63
+ "#{sign}#{Math.floor(absv / 1000)}k"
64
+ else
65
+ v
66
+
67
+
68
+
45
69
  draw: ->
46
70
  @chart.draw @data(), @mergedOptions()
47
71
 
@@ -1,3 +1,7 @@
1
+ // Generated by CoffeeScript 1.11.0
2
+ var AppRouter, DynamicChartView, DynamicWidget, DynamicWidgetView, LinePresenter, PageInfo, PageInfoList, PageTitleView, PageTitlesView, SensorInfo, SensorInfoList, SensorInfoListView, SeriesPresenter, StackPresenter, TimelinePresenter, Widget, WidgetChartView, WidgetList, WidgetListView, WidgetPresenter, WidgetView,
3
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
4
+ hasProp = {}.hasOwnProperty;
1
5
 
2
6
  String.prototype.capitalize = function() {
3
7
  return this.charAt(0).toUpperCase() + this.slice(1);
@@ -17,7 +21,7 @@ Number.prototype.humanize = function() {
17
21
  res = "";
18
22
  s = interval % 60;
19
23
  if (s > 0) {
20
- res = "" + s + " s";
24
+ res = s + " s";
21
25
  }
22
26
  interval = (interval - s) / 60;
23
27
  if (!(interval > 0)) {
@@ -25,7 +29,7 @@ Number.prototype.humanize = function() {
25
29
  }
26
30
  m = interval % 60;
27
31
  if (m > 0) {
28
- res = ("" + m + " m " + res).strip();
32
+ res = (m + " m " + res).strip();
29
33
  }
30
34
  interval = (interval - m) / 60;
31
35
  if (!(interval > 0)) {
@@ -33,19 +37,17 @@ Number.prototype.humanize = function() {
33
37
  }
34
38
  h = interval % 24;
35
39
  if (h > 0) {
36
- res = ("" + h + " h " + res).strip();
40
+ res = (h + " h " + res).strip();
37
41
  }
38
42
  d = (interval - h) / 24;
39
43
  if (d > 0) {
40
- return ("" + d + " d " + res).strip();
44
+ return (d + " d " + res).strip();
41
45
  } else {
42
46
  return res;
43
47
  }
44
48
  };
45
- var PageInfo;
46
49
 
47
50
  PageInfo = Backbone.Model.extend({});
48
- var Widget;
49
51
 
50
52
  Widget = Backbone.Model.extend({
51
53
  initialize: function() {
@@ -76,7 +78,7 @@ Widget = Backbone.Model.extend({
76
78
  url: function() {
77
79
  var timespan, url;
78
80
  timespan = this.timespan();
79
- url = "" + (this.collection.url()) + "/" + (this.get('id')) + "?";
81
+ url = (this.collection.url()) + "/" + (this.get('id')) + "?";
80
82
  if (!_.isNaN(timespan)) {
81
83
  url += "&timespan=" + timespan;
82
84
  }
@@ -112,26 +114,30 @@ Widget = Backbone.Model.extend({
112
114
  return this.updating = false;
113
115
  },
114
116
  forceUpdate: function() {
115
- var xhr,
116
- _this = this;
117
+ var xhr;
117
118
  if (this.updating) {
118
119
  return;
119
120
  }
120
121
  this.updating = true;
121
122
  xhr = this.fetch({
122
- success: function(model, response) {
123
- return _this.trigger('redraw');
124
- }
125
- });
126
- xhr.always(function() {
127
- return _this.updating = false;
128
- });
129
- return xhr.fail(function(xhr, textStatus, errorThrown) {
130
- return console.log("xhr fail", _this.get('id'), textStatus, errorThrown);
123
+ success: (function(_this) {
124
+ return function(model, response) {
125
+ return _this.trigger('redraw');
126
+ };
127
+ })(this)
131
128
  });
129
+ xhr.always((function(_this) {
130
+ return function() {
131
+ return _this.updating = false;
132
+ };
133
+ })(this));
134
+ return xhr.fail((function(_this) {
135
+ return function(xhr, textStatus, errorThrown) {
136
+ return console.log("xhr fail", _this.get('id'), textStatus, errorThrown);
137
+ };
138
+ })(this));
132
139
  }
133
140
  });
134
- var DynamicWidget;
135
141
 
136
142
  DynamicWidget = Backbone.Model.extend({
137
143
  setStartTime: function(startTime) {
@@ -159,7 +165,7 @@ DynamicWidget = Backbone.Model.extend({
159
165
  url: function() {
160
166
  var timespan, url;
161
167
  timespan = this.timespan();
162
- url = "" + ROOT + "dynamic_widget?" + (this.sensorArgs()) + "&type=" + (this.get('type'));
168
+ url = ROOT + "dynamic_widget?" + (this.sensorArgs()) + "&type=" + (this.get('type'));
163
169
  if ((timespan != null) && !_.isNaN(timespan)) {
164
170
  url += "&timespan=" + timespan;
165
171
  }
@@ -179,10 +185,8 @@ DynamicWidget = Backbone.Model.extend({
179
185
  });
180
186
  }
181
187
  });
182
- var SensorInfo;
183
188
 
184
189
  SensorInfo = Backbone.Model.extend({});
185
- var PageInfoList;
186
190
 
187
191
  PageInfoList = Backbone.Collection.extend({
188
192
  model: PageInfo,
@@ -207,7 +211,6 @@ PageInfoList = Backbone.Collection.extend({
207
211
  });
208
212
  }
209
213
  });
210
- var SensorInfoList;
211
214
 
212
215
  SensorInfoList = Backbone.Collection.extend({
213
216
  model: SensorInfo,
@@ -215,35 +218,33 @@ SensorInfoList = Backbone.Collection.extend({
215
218
  return ROOT + 'sensors';
216
219
  }
217
220
  });
218
- var WidgetList;
219
221
 
220
222
  WidgetList = Backbone.Collection.extend({
221
223
  model: Widget,
222
- setContext: function(pageInfos) {
223
- this.pageInfos = pageInfos;
224
+ setContext: function(pageInfos1) {
225
+ this.pageInfos = pageInfos1;
224
226
  },
225
227
  url: function() {
226
228
  return ROOT + 'pages/' + this.pageInfos.selected().id + '/widgets';
227
229
  },
228
230
  startPolling: function() {
229
- var _this = this;
230
- return setInterval(function() {
231
- if (_this.pageInfos.selected()) {
232
- return _this.each(function(w) {
233
- return w.refetch();
234
- });
235
- }
236
- }, 200);
231
+ return setInterval((function(_this) {
232
+ return function() {
233
+ if (_this.pageInfos.selected()) {
234
+ return _this.each(function(w) {
235
+ return w.refetch();
236
+ });
237
+ }
238
+ };
239
+ })(this), 200);
237
240
  }
238
241
  });
239
- var WidgetPresenter;
240
242
 
241
243
  WidgetPresenter = (function() {
242
-
243
- function WidgetPresenter(pageInfos, model, el) {
244
- this.pageInfos = pageInfos;
245
- this.model = model;
246
- this.el = el;
244
+ function WidgetPresenter(pageInfos1, model1, el1) {
245
+ this.pageInfos = pageInfos1;
246
+ this.model = model1;
247
+ this.el = el1;
247
248
  this.chartEl = this.el.find('#chart')[0];
248
249
  this.legendEl = this.el.find('#legend')[0];
249
250
  this.chart = new Dygraph.GVizChart(this.chartEl);
@@ -276,6 +277,19 @@ WidgetPresenter = (function() {
276
277
  strokeWidth: 2,
277
278
  strokeBorderWidth: 1,
278
279
  highlightCircleSize: 5
280
+ },
281
+ axisLabelWidth: 80,
282
+ axes: {
283
+ y: {
284
+ valueFormatter: function(x) {
285
+ return x;
286
+ },
287
+ axisLabelFormatter: (function(_this) {
288
+ return function(x) {
289
+ return _this.formatValueLabel(x);
290
+ };
291
+ })(this)
292
+ }
279
293
  }
280
294
  };
281
295
  };
@@ -290,6 +304,25 @@ WidgetPresenter = (function() {
290
304
  return new google.visualization.DataTable;
291
305
  };
292
306
 
307
+ WidgetPresenter.prototype.formatValueLabel = function(v) {
308
+ var absv, sign;
309
+ sign = v < 0 ? "-" : "";
310
+ absv = Math.abs(v);
311
+ if (absv >= 1000000000) {
312
+ return v.toPrecision(4);
313
+ } else {
314
+ if (absv >= 1000000) {
315
+ return "" + sign + (Math.floor(absv / 1000000)) + "kk";
316
+ } else {
317
+ if (absv >= 1000) {
318
+ return "" + sign + (Math.floor(absv / 1000)) + "k";
319
+ } else {
320
+ return v;
321
+ }
322
+ }
323
+ }
324
+ };
325
+
293
326
  WidgetPresenter.prototype.draw = function() {
294
327
  return this.chart.draw(this.data(), this.mergedOptions());
295
328
  };
@@ -302,19 +335,15 @@ WidgetPresenter.create = function(pageInfos, model, el) {
302
335
  var presenterClass, type;
303
336
  type = model.get('type');
304
337
  if ((type != null) && type.match(/^\w+$/)) {
305
- presenterClass = eval("" + (type.capitalize()) + "Presenter");
338
+ presenterClass = eval((type.capitalize()) + "Presenter");
306
339
  return new presenterClass(pageInfos, model, el);
307
340
  } else {
308
341
  return null;
309
342
  }
310
343
  };
311
- var TimelinePresenter,
312
- __hasProp = {}.hasOwnProperty,
313
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
314
-
315
- TimelinePresenter = (function(_super) {
316
344
 
317
- __extends(TimelinePresenter, _super);
345
+ TimelinePresenter = (function(superClass) {
346
+ extend(TimelinePresenter, superClass);
318
347
 
319
348
  function TimelinePresenter() {
320
349
  return TimelinePresenter.__super__.constructor.apply(this, arguments);
@@ -339,13 +368,9 @@ TimelinePresenter = (function(_super) {
339
368
  return TimelinePresenter;
340
369
 
341
370
  })(WidgetPresenter);
342
- var SeriesPresenter,
343
- __hasProp = {}.hasOwnProperty,
344
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
345
371
 
346
- SeriesPresenter = (function(_super) {
347
-
348
- __extends(SeriesPresenter, _super);
372
+ SeriesPresenter = (function(superClass) {
373
+ extend(SeriesPresenter, superClass);
349
374
 
350
375
  function SeriesPresenter() {
351
376
  return SeriesPresenter.__super__.constructor.apply(this, arguments);
@@ -363,7 +388,7 @@ SeriesPresenter = (function(_super) {
363
388
 
364
389
  SeriesPresenter.prototype.valuesTitle = function() {
365
390
  if (this.get('valuesTitle')) {
366
- return "" + (this.get('valuesTitle')) + " / " + (this.humanizedInterval());
391
+ return (this.get('valuesTitle')) + " / " + (this.humanizedInterval());
367
392
  } else {
368
393
  return this.humanizedInterval();
369
394
  }
@@ -382,13 +407,9 @@ SeriesPresenter = (function(_super) {
382
407
  return SeriesPresenter;
383
408
 
384
409
  })(TimelinePresenter);
385
- var LinePresenter,
386
- __hasProp = {}.hasOwnProperty,
387
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
388
-
389
- LinePresenter = (function(_super) {
390
410
 
391
- __extends(LinePresenter, _super);
411
+ LinePresenter = (function(superClass) {
412
+ extend(LinePresenter, superClass);
392
413
 
393
414
  function LinePresenter() {
394
415
  return LinePresenter.__super__.constructor.apply(this, arguments);
@@ -397,13 +418,9 @@ LinePresenter = (function(_super) {
397
418
  return LinePresenter;
398
419
 
399
420
  })(SeriesPresenter);
400
- var StackPresenter,
401
- __hasProp = {}.hasOwnProperty,
402
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
403
421
 
404
- StackPresenter = (function(_super) {
405
-
406
- __extends(StackPresenter, _super);
422
+ StackPresenter = (function(superClass) {
423
+ extend(StackPresenter, superClass);
407
424
 
408
425
  function StackPresenter() {
409
426
  return StackPresenter.__super__.constructor.apply(this, arguments);
@@ -412,7 +429,6 @@ StackPresenter = (function(_super) {
412
429
  return StackPresenter;
413
430
 
414
431
  })(SeriesPresenter);
415
- var PageTitleView;
416
432
 
417
433
  PageTitleView = Backbone.View.extend({
418
434
  tagName: 'li',
@@ -430,11 +446,10 @@ PageTitleView = Backbone.View.extend({
430
446
  }
431
447
  }
432
448
  });
433
- var PageTitlesView;
434
449
 
435
450
  PageTitlesView = Backbone.View.extend({
436
- initialize: function(pageInfos) {
437
- this.pageInfos = pageInfos;
451
+ initialize: function(pageInfos1) {
452
+ this.pageInfos = pageInfos1;
438
453
  return this.pageInfos.bind('reset', this.render, this);
439
454
  },
440
455
  addOne: function(pageInfo) {
@@ -450,7 +465,6 @@ PageTitlesView = Backbone.View.extend({
450
465
  return this.pageInfos.each(this.addOne);
451
466
  }
452
467
  });
453
- var SensorInfoListView;
454
468
 
455
469
  SensorInfoListView = Backbone.View.extend({
456
470
  tagName: 'div',
@@ -480,7 +494,6 @@ SensorInfoListView = Backbone.View.extend({
480
494
  });
481
495
  }
482
496
  });
483
- var DynamicChartView;
484
497
 
485
498
  DynamicChartView = Backbone.View.extend({
486
499
  initialize: function(options) {
@@ -583,7 +596,6 @@ DynamicChartView = Backbone.View.extend({
583
596
  return this.widget.forceUpdate();
584
597
  }
585
598
  });
586
- var DynamicWidgetView;
587
599
 
588
600
  DynamicWidgetView = Backbone.View.extend({
589
601
  tagName: 'div',
@@ -645,7 +657,6 @@ DynamicWidgetView = Backbone.View.extend({
645
657
  return this.chartView.update();
646
658
  }
647
659
  });
648
- var WidgetChartView;
649
660
 
650
661
  WidgetChartView = Backbone.View.extend({
651
662
  tagName: 'div',
@@ -662,7 +673,6 @@ WidgetChartView = Backbone.View.extend({
662
673
  return this.presenter = WidgetPresenter.create(this.pageInfos, this.model, this.$el);
663
674
  }
664
675
  });
665
- var WidgetView;
666
676
 
667
677
  WidgetView = Backbone.View.extend({
668
678
  tagName: 'div',
@@ -762,7 +772,6 @@ WidgetView = Backbone.View.extend({
762
772
  }
763
773
  }
764
774
  });
765
- var WidgetListView;
766
775
 
767
776
  WidgetListView = Backbone.View.extend({
768
777
  initialize: function(options) {
@@ -771,28 +780,28 @@ WidgetListView = Backbone.View.extend({
771
780
  return this.widgetList.bind('reset', this.render, this);
772
781
  },
773
782
  render: function() {
774
- var container,
775
- _this = this;
783
+ var container;
776
784
  container = $('#widgets');
777
785
  container.empty();
778
- return this.widgetList.each(function(w) {
779
- var view;
780
- view = new WidgetView({
781
- pageInfos: _this.pageInfos,
782
- model: w
783
- });
784
- view.render();
785
- container.append(view.el);
786
- return view.renderChart();
787
- });
786
+ return this.widgetList.each((function(_this) {
787
+ return function(w) {
788
+ var view;
789
+ view = new WidgetView({
790
+ pageInfos: _this.pageInfos,
791
+ model: w
792
+ });
793
+ view.render();
794
+ container.append(view.el);
795
+ return view.renderChart();
796
+ };
797
+ })(this));
788
798
  }
789
799
  });
790
- var AppRouter;
791
800
 
792
801
  AppRouter = Backbone.Router.extend({
793
- initialize: function(pageInfos, widgetList) {
794
- this.pageInfos = pageInfos;
795
- this.widgetList = widgetList;
802
+ initialize: function(pageInfos1, widgetList1) {
803
+ this.pageInfos = pageInfos1;
804
+ this.widgetList = widgetList1;
796
805
  },
797
806
  routes: {
798
807
  'pages/:id': 'getPage',