omf_web 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/bin/omf_web_server +18 -0
  2. data/example/bridge/README.md +7 -0
  3. data/example/bridge/data_sources/sensor-sqlite.rb +15 -15
  4. data/example/bridge/htdocs/graph/js/bridge.js +35 -45
  5. data/example/bridge/htdocs/graph/js/event_line_chart.js +20 -18
  6. data/example/bridge/htdocs/graph/js/event_table.js +26 -28
  7. data/example/bridge/viz_server.rb +5 -9
  8. data/example/demo/demo_viz_server.rb +2 -2
  9. data/example/demo/widgets/linked_graphs_tab.yaml +9 -32
  10. data/example/openflow-gec15/code_tab.yaml +7 -12
  11. data/example/openflow-gec15/dashboard_tab.yaml +11 -12
  12. data/example/openflow-gec15/exp_source.rb +26 -26
  13. data/example/openflow-gec15/of_viz_server.rb +7 -7
  14. data/example/simple/simple.yaml +2 -1
  15. data/example/simple/simple_dynamic.yaml +1 -1
  16. data/example/web_rtc/web_rtc.yaml +54 -0
  17. data/example/web_rtc/webrtc-exp_1381786573.sq3 +0 -0
  18. data/lib/omf-web/config.ru +1 -1
  19. data/lib/omf-web/content/content_proxy.rb +2 -2
  20. data/lib/omf-web/content/file_repository.rb +11 -53
  21. data/lib/omf-web/content/git_repository.rb +1 -1
  22. data/lib/omf-web/content/irods_repository.rb +1 -1
  23. data/lib/omf-web/content/repository.rb +5 -3
  24. data/lib/omf-web/content/static_repository.rb +25 -11
  25. data/lib/omf-web/data_source_proxy.rb +3 -3
  26. data/lib/omf-web/rack/content_handler.rb +2 -2
  27. data/lib/omf-web/rack/session_authenticator.rb +3 -3
  28. data/lib/omf-web/rack/tab_mapper.rb +2 -2
  29. data/lib/omf-web/rack/update_handler.rb +2 -2
  30. data/lib/omf-web/rack/websocket_handler.rb +3 -3
  31. data/lib/omf-web/rack/widget_mapper.rb +2 -2
  32. data/lib/omf-web/session_store.rb +2 -2
  33. data/lib/omf-web/theme/abstract_page.rb +15 -24
  34. data/lib/omf-web/theme/bright/code_renderer.rb +24 -30
  35. data/lib/omf-web/theme/bright/data_renderer.rb +7 -5
  36. data/lib/omf-web/theme/bright/page.rb +2 -1
  37. data/lib/omf-web/theme/bright/widget_chrome.rb +16 -14
  38. data/lib/omf-web/theme.rb +1 -1
  39. data/lib/omf-web/thin/logging.rb +18 -13
  40. data/lib/omf-web/thin/runner.rb +2 -2
  41. data/lib/omf-web/thin/server.rb +105 -27
  42. data/lib/omf-web/version.rb +1 -1
  43. data/lib/omf-web/widget/abstract_widget.rb +3 -3
  44. data/lib/omf-web/widget/data_widget.rb +1 -0
  45. data/lib/omf-web/widget/text/maruku.rb +1 -1
  46. data/lib/omf-web/widget.rb +22 -22
  47. data/lib/omf_web.rb +1 -1
  48. data/omf_web.gemspec +18 -15
  49. data/share/htdocs/graph/js/abstract_chart.js +69 -68
  50. data/share/htdocs/graph/js/abstract_nv_chart.js +35 -33
  51. data/share/htdocs/graph/js/abstract_widget.js +61 -62
  52. data/share/htdocs/graph/js/axis.js +30 -25
  53. data/share/htdocs/graph/js/barchart_brush.js +23 -21
  54. data/share/htdocs/graph/js/code_mirror.js +35 -33
  55. data/share/htdocs/graph/js/discrete_bar_chart.js +27 -30
  56. data/share/htdocs/graph/js/histogram2.js +37 -47
  57. data/share/htdocs/graph/js/line_chart3.js +36 -30
  58. data/share/htdocs/graph/js/line_chart_with_focus.js +10 -9
  59. data/share/htdocs/graph/js/multi_barchart.js +33 -30
  60. data/share/htdocs/graph/js/network2.js +98 -97
  61. data/share/htdocs/graph/js/pie_chart2.js +25 -23
  62. data/share/htdocs/graph/js/scatter_plot.js +38 -36
  63. data/share/htdocs/graph/js/table2.js +60 -54
  64. data/share/htdocs/js/app.js +43 -0
  65. data/share/htdocs/js/{data_source2.js → data_source3.js} +44 -73
  66. data/share/htdocs/js/data_source_repo.js +42 -0
  67. data/share/htdocs/require/nv_d3.js +2 -0
  68. data/share/htdocs/theme/abstract/abstract.js +4 -4
  69. data/share/htdocs/vendor/VERSION_MAP.yaml +2 -0
  70. data/share/htdocs/vendor/require-2.1.8/require.js +2053 -0
  71. data/share/htdocs/vendor/require-2.1.8/require.min.js +36 -0
  72. data/share/htdocs/vendor/require-css-0.0.7/.gitignore +1 -0
  73. data/share/htdocs/vendor/require-css-0.0.7/LICENSE +10 -0
  74. data/share/htdocs/vendor/require-css-0.0.7/README.md +231 -0
  75. data/share/htdocs/vendor/require-css-0.0.7/bower.json +5 -0
  76. data/share/htdocs/vendor/require-css-0.0.7/css-builder.js +251 -0
  77. data/share/htdocs/vendor/require-css-0.0.7/css.js +436 -0
  78. data/share/htdocs/vendor/require-css-0.0.7/normalize.js +138 -0
  79. data/share/htdocs/vendor/require-css-0.0.7/package.json +5 -0
  80. data/share/htdocs/vendor/spin/jquery.spin.js +6 -4
  81. metadata +100 -74
  82. checksums.yaml +0 -7
  83. data/bin/omf_web_demo +0 -3
  84. data/bin/omf_web_demo.sh +0 -7
  85. data/bin/omf_web_server.rb +0 -157
  86. data/lib/omf_common/lobject.rb +0 -187
  87. data/lib/omf_common/log4r_outputter.rb +0 -69
  88. data/sample.sq3 +0 -0
  89. data/share/htdocs/js/data_source.js +0 -173
  90. data/share/htdocs/js/require3.js +0 -292
@@ -1,50 +1,14 @@
1
1
 
2
2
 
3
- OML.data_sources = function() {
4
- var sources = {};
5
-
6
- function context() {};
7
-
8
- context.register = function(opts) {
9
- var id = opts.id || opts.name;
10
- if (sources[id] == null) {
11
- sources[id] = new OML.data_source(opts);
12
- }
13
- return context;
14
- };
15
-
16
- context.lookup = function(ds_descr) {
17
- var name;
18
- var dynamic = false;
19
-
20
- if (typeof(ds_descr) == 'object') {
21
- name = ds_descr.id || ds_descr.name;
22
- dynamic = ds_descr.dynamic;
23
- } else {
24
- name = ds_descr;
25
- }
26
- var source = sources[name];
27
- if (! source) {
28
- throw("Unknown data source '" + name + "'.");
29
- }
30
- if (dynamic) {
31
- source.is_dynamic(dynamic);
32
- }
33
- return source;
34
- };
35
-
36
- return context;
37
- }();
3
+ function omf_web_data_source(opts) {
38
4
 
39
- OML.data_source = function(opts) {
40
-
41
5
  var name = opts.id || opts.name;
42
6
  var event_name = "data_source." + name + ".changed";
43
7
  var rows = opts.rows || [];
44
8
  //var offset = opts.offset || -1; // Number of (initial) rows skipped (count towards 'max_rows')
45
- var offset = opts.offset || 0; // Number of (initial) rows skipped (count towards 'max_rows')
9
+ var offset = opts.offset || 0; // Number of (initial) rows skipped (count towards 'max_rows')
46
10
  var schema = opts.schema;
47
-
11
+
48
12
  var data_source = {
49
13
  version: "0.1",
50
14
  name: name,
@@ -54,10 +18,10 @@ OML.data_source = function(opts) {
54
18
  is_dynamic: is_dynamic,
55
19
  event_name: event_name,
56
20
  }
57
-
21
+
58
22
  var indexes = {};
59
23
  var unique_index_check = null;
60
-
24
+
61
25
  var update_interval = -1;
62
26
  var ws = null; // points to web socket instance
63
27
 
@@ -72,7 +36,7 @@ OML.data_source = function(opts) {
72
36
  return indexes[i][key]; // need fresh lookup as we may redo index
73
37
  }
74
38
  }
75
-
39
+
76
40
  function update_indexes() {
77
41
  // This can most likley be done more efficiently if we consider what has changed
78
42
  _.each(indexes, function(ignore, i) {
@@ -80,12 +44,12 @@ OML.data_source = function(opts) {
80
44
  _.each(rows, function(r) { index[r[i]] = r; })
81
45
  });
82
46
  }
83
-
47
+
84
48
  function is_dynamic(_) {
85
49
  if (!arguments.length) {
86
50
  return update_interval > 0 || ws;
87
51
  }
88
-
52
+
89
53
  var opts = _;
90
54
  var interval = -1;
91
55
  if (typeof(opts) == 'number') {
@@ -102,11 +66,11 @@ OML.data_source = function(opts) {
102
66
  start_polling_backend();
103
67
  }
104
68
  }
105
-
69
+
106
70
  var ws = null; // Websocket identifier
107
71
  function start_web_socket() {
108
72
  if (ws) return; // already running
109
-
73
+
110
74
  var url = 'ws://' + window.location.host + '/_ws?sid=' + (opts.sid || OML.session_id);
111
75
  ws = new WebSocket(url);
112
76
  ws.onopen = on_open;
@@ -117,10 +81,10 @@ OML.data_source = function(opts) {
117
81
  ws.onerror = function(evt) {
118
82
  var status = "onerror";
119
83
  };
120
- }
121
-
84
+ }
85
+
122
86
  // Send a message to the server
123
- //
87
+ //
124
88
  // @params type - Type of message
125
89
  // @params args - Hash of additional args ('ds_name' of this data source will be added)
126
90
  //
@@ -132,13 +96,13 @@ OML.data_source = function(opts) {
132
96
  ws.send(JSON.stringify(msg));
133
97
  }
134
98
 
135
-
99
+
136
100
  function on_open() {
137
101
  if (!active_slice_col_name) {
138
102
  send_server_msg('register_data_source', {offset: offset + rows.length})
139
103
  }
140
104
  };
141
-
105
+
142
106
  function on_message(evt) {
143
107
  // evt.data contains received string.
144
108
  var msg = jQuery.parseJSON(evt.data);
@@ -153,7 +117,7 @@ OML.data_source = function(opts) {
153
117
  throw "Unknown message type '" + msg.type + "'.";
154
118
  }
155
119
  };
156
-
120
+
157
121
  function on_update(msg) {
158
122
  if (unique_index_check) {
159
123
  // Let's first see if we simply replace a row
@@ -161,7 +125,7 @@ OML.data_source = function(opts) {
161
125
  if (!unique_index_check(r)) {
162
126
  rows.push(r); // new index
163
127
  }
164
- });
128
+ });
165
129
  } else {
166
130
  // need to append to 'rows' as it's referenced in other closures
167
131
  // _.each(msg.rows, function(r) { rows.push(r) });
@@ -170,7 +134,7 @@ OML.data_source = function(opts) {
170
134
  // rows = _.rest(rows, chop);
171
135
  // }
172
136
  switch (msg.action) {
173
- case 'added':
137
+ case 'added':
174
138
  _.each(msg.rows, function(r) { rows.push(r) });
175
139
  break;
176
140
  case 'removed':
@@ -193,17 +157,17 @@ OML.data_source = function(opts) {
193
157
  throw "Unknown message action '" + msg.action + "'.";
194
158
  }
195
159
  }
196
-
160
+
197
161
  update_indexes();
198
162
  var evt = {data_source: data_source};
199
163
  OHUB.trigger(event_name, evt);
200
164
  OHUB.trigger("data_source.changed", evt);
201
165
  }
202
-
166
+
203
167
  // Request a new slice from the server. Clear existing state
204
168
  function set_slice_column(col_value) {
205
169
  if (active_slice_value == col_value) return;
206
-
170
+
207
171
  active_slice_column_id = col_value;
208
172
  // Reset state
209
173
  rows = [];
@@ -213,14 +177,14 @@ OML.data_source = function(opts) {
213
177
  }
214
178
  var active_slice_col_name = null;
215
179
  var active_slice_value = null;
216
-
217
- function start_polling_backend() {
180
+
181
+ function start_polling_backend() {
218
182
  var first_time = this.update_interval < 0;
219
-
183
+
220
184
  if (this.update_interval < 0 || this.update_interval > interval) {
221
185
  this.update_interval = interval;
222
186
  }
223
-
187
+
224
188
  if (first_time) {
225
189
  var self = this;
226
190
  L.require(['vendor/jquery/jquery.js', 'vendor/jquery/jquery.periodicalupdater.js'], function() {
@@ -246,7 +210,7 @@ OML.data_source = function(opts) {
246
210
  }
247
211
  return true;
248
212
  }
249
-
213
+
250
214
  // Let's check if this data_source maintains uniqueness along one axis (column)
251
215
  if (opts.unique_column) {
252
216
  var col_name = opts.unique_column;
@@ -270,18 +234,18 @@ OML.data_source = function(opts) {
270
234
  key2row[key] = row;
271
235
  return false;
272
236
  }
273
- // pre-seed
237
+ // pre-seed
274
238
  rows = _.uniq(rows, false, function(r) { return r[index]; });
275
239
  _.each(rows, function(r) { key2row[r[index]] = r; });
276
240
  } else {
277
241
  throw "Error in processing option 'unique_column'. Unknown column '" + col_name + "'."
278
242
  }
279
243
  }
280
-
244
+
281
245
  // In slice mode, only fetch a 'slice' of the underlying data source. A slice
282
246
  // is defined by specific value in the 'slice_column' of all rows.
283
247
  //
284
- // opts.slice:
248
+ // opts.slice:
285
249
  // slice_column: id
286
250
  // event:
287
251
  // name: graph.static_network.links.changed
@@ -289,36 +253,43 @@ OML.data_source = function(opts) {
289
253
  if (opts.slice) {
290
254
  var so = opts.slice;
291
255
  active_slice_col_name = so.slice_column;
292
-
256
+
293
257
  if (so.event) {
294
258
  var evt_name = so.event.name;
295
- if (! evt_name)
259
+ if (! evt_name)
296
260
  throw "Missing event name in slice definition for data source '" + name + "'.";
297
261
  OHUB.bind(evt_name, function(msg) {
298
262
  var schema = msg.schema || msg.data_source.schema;
299
-
263
+
300
264
  var key = so.event.key;
301
265
  var col = _.find(schema, function(cd) { return cd.name == key });
302
266
  if (col) {
303
267
  var event = msg.datum;
304
- var col_id = event[col.index];
268
+ var col_id = event[col.index];
305
269
  if (col_id) {
306
- set_slice_column(col_id);
270
+ set_slice_column(col_id);
307
271
  }
308
272
  }
309
273
  })
310
274
  }
311
275
  }
312
-
276
+
313
277
  if (window.WebSocket) {
314
278
  start_web_socket();
315
279
  }
316
-
280
+
317
281
  // Bind to event directly
318
282
  // this.on_changed = function(update_f) {
319
283
  // OHUB.bind(this.event_name, update_f);
320
284
  // }
321
-
285
+
322
286
  return data_source;
323
287
  }
324
288
 
289
+ define(function() {
290
+ return function(opts) {
291
+ return omf_web_data_source(opts);
292
+ }
293
+ })
294
+
295
+
@@ -0,0 +1,42 @@
1
+
2
+ define(['omf/data_source3'], function(data_source) {
3
+ function data_source_repo() {
4
+ console.log("Creating data source repo");
5
+ var sources = {};
6
+
7
+ function context() {};
8
+
9
+ context.register = function(opts) {
10
+ var id = opts.id || opts.name;
11
+ if (sources[id] == null) {
12
+ sources[id] = data_source(opts);
13
+ }
14
+ return context;
15
+ };
16
+
17
+ context.lookup = function(ds_descr) {
18
+ var name;
19
+ var dynamic = false;
20
+
21
+ if (typeof(ds_descr) == 'object') {
22
+ name = ds_descr.id || ds_descr.name;
23
+ dynamic = ds_descr.dynamic;
24
+ } else {
25
+ name = ds_descr;
26
+ }
27
+ var source = sources[name];
28
+ if (! source) {
29
+ throw("Unknown data source '" + name + "'.");
30
+ }
31
+ if (dynamic) {
32
+ source.is_dynamic(dynamic);
33
+ }
34
+ return source;
35
+ };
36
+
37
+ return context;
38
+ }
39
+ return data_source_repo(); // Create the singleton
40
+ });
41
+
42
+
@@ -0,0 +1,2 @@
1
+
2
+ define(['vendor/'])
@@ -1,10 +1,10 @@
1
- L.baseURL = "/resource";
1
+
2
2
  OML = {
3
3
  data_sources: {},
4
4
  widgets: {},
5
5
  window_size: {width: null, height: null}
6
6
  };
7
-
7
+
8
8
  var OHUB = {};
9
9
  _.extend(OHUB, Backbone.Events);
10
10
 
@@ -13,10 +13,10 @@ $(window).resize(function(x) {
13
13
  var width = w.width();
14
14
  var height = w.height();
15
15
  var current = OML.window_size;
16
-
16
+
17
17
  if (current.width != width || current.height != height) {
18
18
  current.width = width; current.height = height;
19
19
  OHUB.trigger('window.resize', current);
20
20
  OHUB.trigger('layout.resize', {});
21
21
  }
22
- });
22
+ });
@@ -10,3 +10,5 @@ silk_icons: silk_icons_v013
10
10
  slickgrid: slickgrid-200512
11
11
  stacktrace: stacktrace-0.3
12
12
  underscore: underscore-1.4.4
13
+ require: require-2.1.8
14
+ require-css: require-css-0.0.7