omf_web 0.9.9 → 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 (64) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +31 -0
  3. data/bin/omf_web_server.rb +157 -0
  4. data/doc/screenshot2.png +0 -0
  5. data/doc/widget_detail.png +0 -0
  6. data/example/demo/data_sources/downloads.rb +2 -1
  7. data/example/simple/README.md +12 -13
  8. data/example/simple/create_waveform.rb +29 -0
  9. data/example/simple/introduction.md +17 -0
  10. data/example/simple/sample.sq3 +0 -0
  11. data/example/simple/sample.sql +1008 -0
  12. data/example/simple/simple.yaml +62 -0
  13. data/example/simple/simple_dynamic.yaml +66 -0
  14. data/lib/irods4r/file.rb +15 -14
  15. data/lib/irods4r/icommands.rb +18 -18
  16. data/lib/irods4r.rb +9 -9
  17. data/lib/omf-web/config.ru +41 -16
  18. data/lib/omf-web/content/git_repository.rb +32 -31
  19. data/lib/omf-web/content/irods_repository.rb +34 -33
  20. data/lib/omf-web/content/repository.rb +48 -44
  21. data/lib/omf-web/data_source_proxy.rb +33 -22
  22. data/lib/omf-web/rack/session_authenticator.rb +48 -12
  23. data/lib/omf-web/rack/tab_mapper.rb +30 -36
  24. data/lib/omf-web/rack/websocket_handler.rb +26 -25
  25. data/lib/omf-web/session_store.rb +16 -13
  26. data/lib/omf-web/theme/abstract_page.rb +26 -22
  27. data/lib/omf-web/theme/bright/page.rb +84 -34
  28. data/lib/omf-web/theme/bright/stacked_renderer.rb +20 -19
  29. data/lib/omf-web/theme.rb +14 -9
  30. data/lib/omf-web/thin/runner.rb +38 -36
  31. data/lib/omf-web/thin/server.rb +255 -0
  32. data/lib/omf-web/version.rb +1 -1
  33. data/lib/omf-web/widget/data_widget.rb +6 -6
  34. data/lib/omf-web/widget/text/maruku/helpers.rb +33 -30
  35. data/lib/omf-web/widget/text/maruku/input/parse_block.rb +117 -117
  36. data/lib/omf-web/widget/text/maruku/output/to_html.rb +155 -154
  37. data/lib/omf-web/widget/text/maruku.rb +17 -16
  38. data/omf_web.gemspec +6 -2
  39. data/sample.sq3 +0 -0
  40. data/share/htdocs/graph/js/gauge.js +524 -0
  41. data/share/htdocs/vendor/VERSION_MAP.yaml +3 -3
  42. data/share/htdocs/vendor/backbone-1.0.0/backbone.js +1571 -0
  43. data/share/htdocs/vendor/d3-3.0/LICENSE.brewer.txt +38 -0
  44. data/share/htdocs/vendor/d3-3.0/colorbrewer.js +1 -0
  45. data/share/htdocs/vendor/d3-3.0/d3.js +8810 -0
  46. data/share/htdocs/vendor/d3-3.0/d3.min.js +5 -0
  47. data/share/htdocs/vendor/geo_json/Readme.txt +71 -0
  48. data/share/htdocs/vendor/geo_json/regions.json +41 -0
  49. data/share/htdocs/vendor/geo_json/switzerland.json +24 -0
  50. data/share/htdocs/vendor/geo_json/world.json +497 -0
  51. data/share/htdocs/vendor/nv_d3/js/nv.d3.js +8801 -4447
  52. data/share/htdocs/vendor/spin/jquery.spin.js +46 -0
  53. data/share/htdocs/vendor/spin/spin.js +349 -0
  54. data/share/htdocs/vendor/spin/spin.min.js +1 -0
  55. data/share/htdocs/vendor/underscore-1.4.4/underscore.js +1227 -0
  56. metadata +63 -48
  57. data/example/simple/data_sources/gimi31.sq3 +0 -0
  58. data/example/simple/data_sources/ping_source.rb +0 -56
  59. data/example/simple/simple_viz_server.rb +0 -39
  60. data/example/simple/widgets/charts_tab.yaml +0 -38
  61. data/share/.DS_Store +0 -0
  62. data/share/htdocs/.DS_Store +0 -0
  63. data/share/htdocs/vendor/backbone-0.5.3/backbone.js +0 -1158
  64. data/share/htdocs/vendor/underscore-1.2.1/underscore.js +0 -958
@@ -14,11 +14,11 @@ require 'yaml'
14
14
  MaRuKu::Globals[:html_math_engine] = 'ritex'
15
15
 
16
16
  module OMF::Web::Widget::Text
17
-
17
+
18
18
  module Maruku
19
-
19
+
20
20
  # # Fetch text and parse it
21
- # #
21
+ # #
22
22
  # def self.load_content(source)
23
23
  # unless File.readable?(source)
24
24
  # raise "Cannot read text file '#{source}'"
@@ -26,26 +26,27 @@ module OMF::Web::Widget::Text
26
26
  # content = File.open(source).read
27
27
  # ::Maruku.new(content)
28
28
  # end
29
-
29
+
30
30
  # Fetch text and parse it
31
- #
31
+ #
32
32
  def self.format_content(content_proxy)
33
33
  unless content_proxy.is_a? OMF::Web::ContentProxy
34
34
  raise "Expected content proxy, but got '#{content_proxy.class}'"
35
35
  end
36
36
  content = content_proxy.content
37
+ puts ">>>> CREATING NEW MARUKU"
37
38
  ::Maruku.new(content)
38
39
  end
39
-
40
-
40
+
41
+
41
42
  class WidgetElement
42
43
  attr_reader :widget
43
-
44
+
44
45
  def initialize(wdescr)
45
46
  @wdescr = wdescr
46
47
  @widget = OMF::Web::Widget.create_widget(wdescr)
47
48
  end
48
-
49
+
49
50
  def to_html
50
51
  content = @widget.content
51
52
  h = content.to_html
@@ -54,20 +55,20 @@ module OMF::Web::Widget::Text
54
55
  end
55
56
  ::REXML::Document.new("<div class='embedded'>#{h}</div>").root
56
57
  end
57
-
58
+
58
59
  def node_type
59
60
  :widget
60
61
  end
61
62
  end
62
-
63
+
63
64
  OpenMatch = /^\s*\{\{\{\s*(.*)$/
64
65
  CloseMatch = /(.*)\}\}\}/
65
-
66
+
66
67
  MaRuKu::In::Markdown::register_block_extension(
67
68
  :regexp => OpenMatch,
68
69
  :handler => lambda { |doc, src, context|
69
70
  lines = []
70
-
71
+
71
72
  line = src.shift_line
72
73
  line =~ OpenMatch
73
74
  line = $1
@@ -88,18 +89,18 @@ module OMF::Web::Widget::Text
88
89
  true
89
90
  }
90
91
  )
91
-
92
+
92
93
  end # module Maruku
93
94
 
94
95
  end # OMF::Web::Widget::Text
95
96
 
96
97
  # module MaRuKu::Out::HTML
97
- #
98
+ #
98
99
  # def to_html_viz
99
100
  # span = Element.new 'javascript'
100
101
  # span.attributes['class'] = 'maruku_section_number'
101
102
  # span << Text.new('Foooo')
102
103
  # add_ws span
103
104
  # end
104
- #
105
+ #
105
106
  # end
data/omf_web.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # specify any dependencies here; for example:
22
22
  # s.add_development_dependency "minitest", "~> 2.11.3"
23
- s.add_runtime_dependency "omf_oml", "~> 0.9"
23
+ s.add_runtime_dependency "omf_oml", "~> 1.0"
24
24
  s.add_runtime_dependency "erector", "~> 0.8.3"
25
25
  s.add_runtime_dependency "activesupport", "~> 3.0.0" # required by erector:table
26
26
  s.add_runtime_dependency "rack", "~> 1.3.5"
@@ -32,6 +32,10 @@ Gem::Specification.new do |s|
32
32
  s.add_runtime_dependency "json", "~> 1.7.3"
33
33
  s.add_runtime_dependency "grit", "~> 2.5.0"
34
34
  s.add_runtime_dependency "sqlite3", "~> 1.3.6"
35
- s.add_runtime_dependency "postgres-pr", "~> 0.6.3"
35
+ s.add_runtime_dependency "postgres-pr", "~> 0.6.3"
36
36
  s.add_runtime_dependency "websocket-rack", "~> 0.4.0"
37
+ s.add_runtime_dependency "rack-accept", "~> 0.4.5"
38
+
39
+ s.add_runtime_dependency "ruby-openid", "~> 2.2.3"
40
+
37
41
  end
data/sample.sq3 ADDED
File without changes
@@ -0,0 +1,524 @@
1
+ /**
2
+ * Code borrowed from http://tomerdoron.blogspot.com/2011/12/google-style-gauges-using-d3js.html
3
+ * Gist: https://gist.github.com/1499279
4
+ */
5
+
6
+ L.provide('OML.gauge', ["graph/js/abstract_chart", "#OML.abstract_chart"], function () {
7
+
8
+ OML.gauge = OML.abstract_chart.extend({
9
+ //this.opts = opts;
10
+
11
+ decl_properties: [
12
+ ['value', 'key', {property: 'value'}],
13
+ ['id', 'key'],
14
+ // ['y_axis', 'key', {property: 'y'}],
15
+ ['radius', 'int', 10],
16
+ ['stroke_width', 'int', 2],
17
+ ['stroke_color', 'color', 'black'],
18
+ ['fill_color', 'color', 'orange']
19
+ ],
20
+
21
+ defaults: function() {
22
+ return this.deep_defaults({
23
+ diameter: 0.9,
24
+ margin: {
25
+ left: 20,
26
+ top: 20,
27
+ right: 20,
28
+ bottom: 20
29
+ },
30
+ }, OML.gauge.__super__.defaults.call(this));
31
+ },
32
+
33
+ configure_base_layer: function(vis) {
34
+ this.gauges_ctxt = {}; // keep context for each gauge
35
+
36
+ var base = this.base_layer = vis.append("svg:g")
37
+ .attr("class", "gauges")
38
+ ;
39
+
40
+ this.legend_layer = base.append("svg:g");
41
+ this.gauges = []; // where we keep the gauge instances
42
+
43
+ },
44
+
45
+ redraw: function(data) {
46
+ var self = this;
47
+ var o = this.opts;
48
+ var ca = this.widget_area;
49
+
50
+ var m = this.mapping;
51
+ var value_f = m.value;
52
+ var id_f = m.id;
53
+
54
+ var fd = _.filter(data, function(d) {return value_f(d) >= 0});
55
+ var sd = _.groupBy(fd, id_f);
56
+ var d = _.map(sd, function(v, k) {return _.last(v)});
57
+ data = d;
58
+ var data_len = self.gauges.length;
59
+
60
+ var remove = function(array, from, to) {
61
+ var rest = array.slice((to || from) + 1 || array.length);
62
+ array.length = from < 0 ? array.length + from : from;
63
+ return array.push.apply(array, rest);
64
+ };
65
+
66
+ var gauges = this.base_layer
67
+ .selectAll(".gauge")
68
+ .data(data, function(d) {
69
+ return id_f(d);
70
+ })
71
+ ;
72
+ gauges.enter()
73
+ .append("svg:g")
74
+ .attr("class", "gauge")
75
+ .each(function(d, i) {
76
+ var opts = {
77
+ min: 0, max: 15000,
78
+ majorTicks: 5, minorTicks: 5
79
+ };
80
+ var g = self.create_gauge(this, ca, opts)();
81
+ var i = self.gauges.length;
82
+ self.gauges.push({el: this, gauge: g});
83
+ g.update(value_f(d), i, i + 1);
84
+ })
85
+ ;
86
+ // update
87
+ gauges.each(function(d, i) {
88
+ var i; var n = self.gauges.length;
89
+ for (i = 0; i < n; i++) {
90
+ var g = self.gauges[i];
91
+ if (g.el == this) {
92
+ g.gauge.update(value_f(d), i, n);
93
+ break;
94
+ }
95
+ }
96
+ });
97
+ gauges.exit()
98
+ .transition().duration(300).style("opacity", 0)
99
+ .each("end", function(d) {
100
+ console.log(d);
101
+ var i; var n = self.gauges.length;
102
+ for (i = 0; i < n; i++) {
103
+ var g = self.gauges[i];
104
+ if (g.el == this) {
105
+ remove(self.gauges, i);
106
+ break;
107
+ }
108
+ }
109
+ })
110
+ .remove();
111
+ },
112
+
113
+ create_gauge: function(base_el, widget_area, opts) {
114
+ var selection = d3.select(base_el);
115
+ var range;
116
+ var raduis, cx, cy, size;
117
+ var body_layer, pointer_layer;
118
+
119
+ function g() {
120
+ return g;
121
+ }
122
+
123
+ g.update = function(value, gauge_idx, gauge_cnt) {
124
+ range = opts.max - opts.min;
125
+ var ca = widget_area;
126
+ var h = ca.h / gauge_cnt;
127
+ var y_off = ca.oh - ca.h - ca.y;
128
+ y_off += h * gauge_idx;
129
+ var w = ca.w;
130
+ var x_off = ca.x;
131
+
132
+ cx = ca.w / 2
133
+ cy = h / 2;
134
+ size = (h > w ? w : h);
135
+ scale = 1.0 / 2;
136
+ raduis = scale * size;
137
+
138
+ var t = "translate(" + x_off + ", " + y_off + ")";
139
+ selection.attr("transform", t);
140
+
141
+ var gb = selection.selectAll(".gauge_body")
142
+ .data([[opts.max, opts.min, size]], function(d) { return d });
143
+ gb.enter()
144
+ .append("svg:g")
145
+ .attr("class", "gauge_body")
146
+ .each(function(d) {draw_body(this)})
147
+ ;
148
+ gb.exit().remove();
149
+
150
+ var gp = selection.selectAll(".gauge_pointer")
151
+ .data([[value, opts.max, opts.min, size]], function(d) { return d });
152
+ gp.enter()
153
+ .append("svg:g")
154
+ .attr("class", "gauge_pointer")
155
+ .each(function(d) {draw_pointer(value, this)})
156
+ ;
157
+ gp.each(function(d) {draw_pointer(value, this)})
158
+ gp.exit().remove();
159
+
160
+ return g;
161
+
162
+ }
163
+
164
+ function draw_body(body_el) {
165
+ body_layer = d3.select(body_el);
166
+
167
+ body_layer.append("svg:circle")
168
+ .attr("cx", cx)
169
+ .attr("cy", cy)
170
+ .attr("r", raduis)
171
+ .style("fill", "#ccc")
172
+ .style("stroke", "#000")
173
+ .style("stroke-width", "0.5px");
174
+
175
+ body_layer.append("svg:circle")
176
+ .attr("cx", cx)
177
+ .attr("cy", cy)
178
+ .attr("r", 0.9 * raduis)
179
+ .style("fill", "#fff")
180
+ .style("stroke", "#e0e0e0")
181
+ .style("stroke-width", "2px");
182
+
183
+
184
+ draw_scale();
185
+
186
+ }
187
+
188
+ function draw_scale() {
189
+ var fontSize = Math.round(size / 16);
190
+ var majorDelta = range / (opts.majorTicks - 1);
191
+ for (var major = opts.min; major <= opts.max; major += majorDelta) {
192
+ var minorDelta = majorDelta / opts.minorTicks;
193
+ for (var minor = major + minorDelta; minor < Math.min(major + majorDelta, opts.max); minor += minorDelta) {
194
+ var point1 = valueToPoint(minor, 0.75);
195
+ var point2 = valueToPoint(minor, 0.85);
196
+ body_layer.append("svg:line")
197
+ .attr("x1", point1.x)
198
+ .attr("y1", point1.y)
199
+ .attr("x2", point2.x)
200
+ .attr("y2", point2.y)
201
+ .style("stroke", "#666")
202
+ .style("stroke-width", "1px");
203
+ }
204
+
205
+ var point1 = valueToPoint(major, 0.7);
206
+ var point2 = valueToPoint(major, 0.85);
207
+ body_layer.append("svg:line")
208
+ .attr("x1", point1.x)
209
+ .attr("y1", point1.y)
210
+ .attr("x2", point2.x)
211
+ .attr("y2", point2.y)
212
+ .style("stroke", "#333")
213
+ .style("stroke-width", "2px");
214
+
215
+ if (major == opts.min || major == opts.max) {
216
+ var point = valueToPoint(major, 0.63);
217
+ body_layer.append("svg:text")
218
+ .attr("x", point.x)
219
+ .attr("y", point.y)
220
+ .attr("dy", fontSize / 3)
221
+ .attr("text-anchor", major == opts.min ? "start" : "end")
222
+ .text(d3.format('.3s')(major))
223
+ .style("font-size", fontSize + "px")
224
+ .style("fill", "#333")
225
+ .style("stroke-width", "0px");
226
+ }
227
+ }
228
+ }
229
+
230
+ function draw_pointer(value, pointer_el) {
231
+ pointer_layer = d3.select(pointer_el);
232
+
233
+ var delta = range / 13;
234
+
235
+ var head = valueToPoint(value, 0.85);
236
+ var head1 = valueToPoint(value - delta, 0.12);
237
+ var head2 = valueToPoint(value + delta, 0.12);
238
+
239
+ var tailValue = value - (range * (1/(270/360)) / 2);
240
+ var tail = valueToPoint(tailValue, 0.28);
241
+ var tail1 = valueToPoint(tailValue - delta, 0.12);
242
+ var tail2 = valueToPoint(tailValue + delta, 0.12);
243
+
244
+ var data = [head, head1, tail2, tail, tail1, head2, head];
245
+
246
+ var line = d3.svg.line()
247
+ .x(function(d) { return d.x })
248
+ .y(function(d) { return d.y })
249
+ .interpolate("basis");
250
+
251
+ //var pointerContainer = body.select(".pointerContainer");
252
+ var pointer = pointer_layer.selectAll("path").data([data])
253
+
254
+ pointer.enter()
255
+ .append("svg:path")
256
+ .attr("d", line)
257
+ .style("fill", "#dc3912")
258
+ .style("stroke", "#c63310")
259
+ .style("fill-opacity", 0.7)
260
+
261
+ pointer.transition()
262
+ .attr("d", line)
263
+ //.ease("linear")
264
+ //.duration(5000);
265
+
266
+ // pointer_layer = selection.append("svg:g").attr("class", "pointerContainer");
267
+ // draw_pointer(0);
268
+ // middle knob
269
+ pointer_layer.append("svg:circle")
270
+ .attr("cx", cx)
271
+ .attr("cy", cy)
272
+ .attr("r", 0.12 * raduis)
273
+ .style("fill", "#4684EE")
274
+ .style("stroke", "#666")
275
+ .style("opacity", 1);
276
+
277
+
278
+ // Value as text
279
+ var fontSize = Math.round(size / 10);
280
+ var text = d3.format('.2e')(Math.round(value));
281
+ pointer_layer.selectAll("text")
282
+ .data([value])
283
+ .text(text)
284
+ .enter()
285
+ .append("svg:text")
286
+ .attr("x", cx)
287
+ .attr("y", size - cy / 5 - fontSize)
288
+ .attr("dy", fontSize / 2)
289
+ .attr("text-anchor", "middle")
290
+ .text(text)
291
+ .style("font-size", fontSize + "px")
292
+ .style("fill", "#000")
293
+ .style("stroke-width", "0px");
294
+ }
295
+
296
+ function valueToDegrees(value) {
297
+ return value / range * 270 - 45;
298
+ }
299
+
300
+ function valueToRadians(value) {
301
+ return valueToDegrees(value) * Math.PI / 180;
302
+ }
303
+
304
+ function valueToPoint(value, factor) {
305
+ var point = {
306
+ x: cx - raduis * factor * Math.cos(valueToRadians(value)),
307
+ y: cy - raduis * factor * Math.sin(valueToRadians(value))
308
+ }
309
+ return point;
310
+ }
311
+
312
+
313
+ return g;
314
+ },
315
+
316
+
317
+
318
+ })
319
+ })
320
+
321
+ // for (var index in ctxt.greenZones)
322
+ // {
323
+ // this.drawBand(ctxt.greenZones[index].from, ctxt.greenZones[index].to, self.config.greenColor);
324
+ // }
325
+ //
326
+ // for (var index in ctxt.yellowZones)
327
+ // {
328
+ // this.drawBand(ctxt.yellowZones[index].from, ctxt.yellowZones[index].to, self.config.yellowColor);
329
+ // }
330
+ //
331
+ // for (var index in ctxt.redZones)
332
+ // {
333
+ // this.drawBand(ctxt.redZones[index].from, ctxt.redZones[index].to, self.config.redColor);
334
+ // }
335
+ //
336
+ // if (undefined != ctxt.label)
337
+ // {
338
+ // var fontSize = Math.round(ctxt.size / 9);
339
+ // this.body.append("svg:text")
340
+ // .attr("x", ctxt.cx)
341
+ // .attr("y", ctxt.cy / 2 + fontSize / 2)
342
+ // .attr("dy", fontSize / 2)
343
+ // .attr("text-anchor", "middle")
344
+ // .text(ctxt.label)
345
+ // .style("font-size", fontSize + "px")
346
+ // .style("fill", "#333")
347
+ // .style("stroke-width", "0px");
348
+ // }
349
+ //
350
+ //
351
+ // var pointerContainer = this.body.append("svg:g").attr("class", "pointerContainer");
352
+ // this.drawPointer(0);
353
+ // pointerContainer.append("svg:circle")
354
+ // .attr("cx", ctxt.cx)
355
+ // .attr("cy", ctxt.cy)
356
+ // .attr("r", 0.12 * ctxt.raduis)
357
+ // .style("fill", "#4684EE")
358
+ // .style("stroke", "#666")
359
+ // .style("opacity", 1);
360
+ //
361
+ // *********
362
+ //
363
+ // function Gauge(placeholderName, configuration)
364
+ // {
365
+ // this.placeholderName = placeholderName;
366
+ //
367
+ // var self = this; // some internal d3 functions do not "like" the "this" keyword, hence setting a local variable
368
+ //
369
+ // ctxture = function(configuration)
370
+ // {
371
+ // ctxt = configuration;
372
+ //
373
+ // ctxt.size = ctxt.size * 0.9;
374
+ //
375
+ // ctxt.raduis = ctxt.size * 0.97 / 2;
376
+ // ctxt.cx = ctxt.size / 2;
377
+ // ctxt.cy = ctxt.size / 2;
378
+ //
379
+ // ctxt.min = configuration.min || 0;
380
+ // ctxt.max = configuration.max || 100;
381
+ // ctxt.range = ctxt.max - ctxt.min;
382
+ //
383
+ // ctxt.majorTicks = configuration.majorTicks || 5;
384
+ // ctxt.minorTicks = configuration.minorTicks || 2;
385
+ //
386
+ // ctxt.greenColor = configuration.greenColor || "#109618";
387
+ // ctxt.yellowColor = configuration.yellowColor || "#FF9900";
388
+ // ctxt.redColor = configuration.redColor || "#DC3912";
389
+ // }
390
+ //
391
+ // this.render = function()
392
+ // {
393
+ // this.body = d3.select("#" + this.placeholderName)
394
+ // .append("svg:svg")
395
+ // .attr("class", "gauge")
396
+ // .attr("width", ctxt.size)
397
+ // .attr("height", ctxt.size);
398
+ //
399
+ // this.body.append("svg:circle")
400
+ // .attr("cx", ctxt.cx)
401
+ // .attr("cy", ctxt.cy)
402
+ // .attr("r", ctxt.raduis)
403
+ // .style("fill", "#ccc")
404
+ // .style("stroke", "#000")
405
+ // .style("stroke-width", "0.5px");
406
+ //
407
+ // this.body.append("svg:circle")
408
+ // .attr("cx", ctxt.cx)
409
+ // .attr("cy", ctxt.cy)
410
+ // .attr("r", 0.9 * ctxt.raduis)
411
+ // .style("fill", "#fff")
412
+ // .style("stroke", "#e0e0e0")
413
+ // .style("stroke-width", "2px");
414
+ //
415
+ // for (var index in ctxt.greenZones)
416
+ // {
417
+ // this.drawBand(ctxt.greenZones[index].from, ctxt.greenZones[index].to, self.config.greenColor);
418
+ // }
419
+ //
420
+ // for (var index in ctxt.yellowZones)
421
+ // {
422
+ // this.drawBand(ctxt.yellowZones[index].from, ctxt.yellowZones[index].to, self.config.yellowColor);
423
+ // }
424
+ //
425
+ // for (var index in ctxt.redZones)
426
+ // {
427
+ // this.drawBand(ctxt.redZones[index].from, ctxt.redZones[index].to, self.config.redColor);
428
+ // }
429
+ //
430
+ // if (undefined != ctxt.label)
431
+ // {
432
+ // var fontSize = Math.round(ctxt.size / 9);
433
+ // this.body.append("svg:text")
434
+ // .attr("x", ctxt.cx)
435
+ // .attr("y", ctxt.cy / 2 + fontSize / 2)
436
+ // .attr("dy", fontSize / 2)
437
+ // .attr("text-anchor", "middle")
438
+ // .text(ctxt.label)
439
+ // .style("font-size", fontSize + "px")
440
+ // .style("fill", "#333")
441
+ // .style("stroke-width", "0px");
442
+ // }
443
+ //
444
+ // var fontSize = Math.round(ctxt.size / 16);
445
+ // var majorDelta = ctxt.range / (ctxt.majorTicks - 1);
446
+ // for (var major = ctxt.min; major <= ctxt.max; major += majorDelta)
447
+ // {
448
+ // var minorDelta = majorDelta / ctxt.minorTicks;
449
+ // for (var minor = major + minorDelta; minor < Math.min(major + majorDelta, ctxt.max); minor += minorDelta)
450
+ // {
451
+ // var point1 = this.valueToPoint(minor, 0.75);
452
+ // var point2 = this.valueToPoint(minor, 0.85);
453
+ //
454
+ // this.body.append("svg:line")
455
+ // .attr("x1", point1.x)
456
+ // .attr("y1", point1.y)
457
+ // .attr("x2", point2.x)
458
+ // .attr("y2", point2.y)
459
+ // .style("stroke", "#666")
460
+ // .style("stroke-width", "1px");
461
+ // }
462
+ //
463
+ // var point1 = this.valueToPoint(major, 0.7);
464
+ // var point2 = this.valueToPoint(major, 0.85);
465
+ //
466
+ // this.body.append("svg:line")
467
+ // .attr("x1", point1.x)
468
+ // .attr("y1", point1.y)
469
+ // .attr("x2", point2.x)
470
+ // .attr("y2", point2.y)
471
+ // .style("stroke", "#333")
472
+ // .style("stroke-width", "2px");
473
+ //
474
+ // if (major == ctxt.min || major == ctxt.max)
475
+ // {
476
+ // var point = this.valueToPoint(major, 0.63);
477
+ //
478
+ // this.body.append("svg:text")
479
+ // .attr("x", point.x)
480
+ // .attr("y", point.y)
481
+ // .attr("dy", fontSize / 3)
482
+ // .attr("text-anchor", major == ctxt.min ? "start" : "end")
483
+ // .text(major)
484
+ // .style("font-size", fontSize + "px")
485
+ // .style("fill", "#333")
486
+ // .style("stroke-width", "0px");
487
+ // }
488
+ // }
489
+ //
490
+ // var pointerContainer = this.body.append("svg:g").attr("class", "pointerContainer");
491
+ // this.drawPointer(0);
492
+ // pointerContainer.append("svg:circle")
493
+ // .attr("cx", ctxt.cx)
494
+ // .attr("cy", ctxt.cy)
495
+ // .attr("r", 0.12 * ctxt.raduis)
496
+ // .style("fill", "#4684EE")
497
+ // .style("stroke", "#666")
498
+ // .style("opacity", 1);
499
+ // }
500
+ //
501
+ // this.redraw = function(value)
502
+ // {
503
+ // this.drawPointer(value);
504
+ // }
505
+ //
506
+ // this.drawBand = function(start, end, color)
507
+ // {
508
+ // if (0 >= end - start) return;
509
+ //
510
+ // this.body.append("svg:path")
511
+ // .style("fill", color)
512
+ // .attr("d", d3.svg.arc()
513
+ // .startAngle(this.valueToRadians(start))
514
+ // .endAngle(this.valueToRadians(end))
515
+ // .innerRadius(0.65 * ctxt.raduis)
516
+ // .outerRadius(0.85 * ctxt.raduis))
517
+ // .attr("transform", function() { return "translate(" + self.config.cx + ", " + self.config.cy + ") rotate(270)" });
518
+ // }
519
+ //
520
+ //
521
+ //
522
+ // // initialization
523
+ // ctxture(configuration);
524
+ // }
@@ -1,7 +1,7 @@
1
- backbone: backbone-0.5.3
1
+ backbone: backbone-1.0.0
2
2
  bootstrap: bootstrap-2.3.1
3
3
  codemirror: CodeMirror-2.32
4
- d3: d3-2.9.2
4
+ d3: d3-3.0
5
5
  jquery: jquery-1.7.2
6
6
  jquery-ui: jquery-ui-1.8.23
7
7
  mustache: mustache-0.7.0
@@ -9,4 +9,4 @@ raphael: raphael-2.1.0
9
9
  silk_icons: silk_icons_v013
10
10
  slickgrid: slickgrid-200512
11
11
  stacktrace: stacktrace-0.3
12
- underscore: underscore-1.2.1
12
+ underscore: underscore-1.4.4