omf_web 0.9.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (243) hide show
  1. data/.gitignore +0 -1
  2. data/README.md +8 -2
  3. data/doc/screenshot.png +0 -0
  4. data/example/{basic → NOT_WORKING/basic}/hello-world-wired.rb +0 -0
  5. data/example/{basic → NOT_WORKING/basic}/visualisation.yml +0 -0
  6. data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklynDemo.sq3 +0 -0
  7. data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_gps.dat +0 -0
  8. data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_server.rb +0 -0
  9. data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_wimax.dat +0 -0
  10. data/example/{brooklyn → NOT_WORKING/brooklyn}/sql_source.rb +0 -0
  11. data/example/{code → NOT_WORKING/code}/code_server.rb +0 -0
  12. data/example/{frisbee → NOT_WORKING/frisbee}/data_sources/parse_log.rb +0 -0
  13. data/example/{frisbee → NOT_WORKING/frisbee}/data_sources/pxe_slice-2012-06-02t02.25.00-04.00.log +0 -0
  14. data/example/{frisbee → NOT_WORKING/frisbee}/progress_chart.yaml +0 -0
  15. data/example/{frisbee → NOT_WORKING/frisbee}/progress_tab.yaml +0 -0
  16. data/example/{frisbee → NOT_WORKING/frisbee}/progress_table.yaml +0 -0
  17. data/example/{frisbee → NOT_WORKING/frisbee}/viz_server.rb +0 -0
  18. data/example/{gec12 → NOT_WORKING/gec12}/gec12-53.rb +0 -0
  19. data/example/{gec12 → NOT_WORKING/gec12}/gec12_demo.sq3 +0 -0
  20. data/example/{gec12 → NOT_WORKING/gec12}/gec12_demo_server.rb +0 -0
  21. data/example/{gec12 → NOT_WORKING/gec12}/visualization.rb +0 -0
  22. data/example/{incoming → NOT_WORKING/incoming}/ofpu_barchart_widget.yaml +0 -0
  23. data/example/{log → NOT_WORKING/log}/log_config.xml +0 -0
  24. data/example/{log → NOT_WORKING/log}/log_server.rb +0 -0
  25. data/example/{network → NOT_WORKING/network}/flow_tab.yaml +0 -0
  26. data/example/{network → NOT_WORKING/network}/network_server.rb +0 -0
  27. data/example/{text → NOT_WORKING/text}/test.md +0 -0
  28. data/example/{text → NOT_WORKING/text}/test.rb +0 -0
  29. data/example/{wimax → NOT_WORKING/wimax}/downlink.yaml +0 -0
  30. data/example/{wimax → NOT_WORKING/wimax}/power.yaml +0 -0
  31. data/example/{wimax → NOT_WORKING/wimax}/snapshot.db +0 -0
  32. data/example/{wimax → NOT_WORKING/wimax}/snapshot.sql +0 -0
  33. data/example/{wimax → NOT_WORKING/wimax}/test.rb +0 -0
  34. data/example/{wimax → NOT_WORKING/wimax}/uplink.yaml +0 -0
  35. data/example/{wimax → NOT_WORKING/wimax}/viz_server.rb +0 -0
  36. data/example/demo/data_sources/mobile_network.rb +3 -0
  37. data/example/demo/data_sources/static_network.rb +54 -0
  38. data/example/demo/widgets/charts_tab.yaml +21 -16
  39. data/example/demo/widgets/linked_graphs_tab.yaml +95 -0
  40. data/example/demo/widgets/mobile_network_widget.yaml +1 -1
  41. data/example/demo/widgets/pie_chart_widget.yaml +1 -1
  42. data/lib/omf-web/config.ru +2 -2
  43. data/lib/omf-web/data_source_proxy.rb +81 -19
  44. data/lib/omf-web/rack/websocket_handler.rb +77 -23
  45. data/lib/omf-web/theme/abstract_page.rb +43 -26
  46. data/lib/omf-web/theme/bright/code_renderer.rb +1 -1
  47. data/lib/omf-web/theme/bright/page.rb +1 -0
  48. data/lib/omf-web/theme/bright/tabbed_renderer.rb +7 -0
  49. data/lib/omf-web/version.rb +7 -0
  50. data/lib/omf-web/widget/data_widget.rb +38 -46
  51. data/lib/omf-web/widget/layout/stacked_layout.rb +2 -1
  52. data/lib/omf-web/widget/layout/tabbed_layout.rb +1 -2
  53. data/{MARUKU-LICENSE → lib/omf-web/widget/text/maruku/MARUKU-LICENSE} +0 -0
  54. data/lib/{maruku → omf-web/widget/text/maruku}/helpers.rb +0 -0
  55. data/lib/{maruku → omf-web/widget/text/maruku}/input/parse_block.rb +0 -0
  56. data/lib/{maruku → omf-web/widget/text/maruku}/output/to_html.rb +26 -21
  57. data/lib/omf-web/widget/text/maruku.rb +5 -0
  58. data/omf_web.gemspec +2 -1
  59. data/share/htdocs/{js → UNUSED}/log/table.js +0 -0
  60. data/share/htdocs/{css → graph/css}/graph.css +0 -0
  61. data/share/htdocs/{image/graph → graph/img}/bar_chart.png +0 -0
  62. data/share/htdocs/{image/graph → graph/img}/donut_chart.png +0 -0
  63. data/share/htdocs/{image/graph → graph/img}/funnel.png +0 -0
  64. data/share/htdocs/{image/graph → graph/img}/info.png +0 -0
  65. data/share/htdocs/{image/graph → graph/img}/line_chart.png +0 -0
  66. data/share/htdocs/{image/graph → graph/img}/line_chart_fill.png +0 -0
  67. data/share/htdocs/{image/graph → graph/img}/misc.png +0 -0
  68. data/share/htdocs/{image/graph → graph/img}/overview.png +0 -0
  69. data/share/htdocs/{image/graph → graph/img}/pie_chart.png +0 -0
  70. data/share/htdocs/{image/graph → graph/img}/scatter_plot.png +0 -0
  71. data/share/htdocs/{image/graph → graph/img}/stacked_bar_chart.png +0 -0
  72. data/share/htdocs/{image/graph → graph/img}/stacked_line_chart.png +0 -0
  73. data/share/htdocs/{image/graph → graph/img}/table.png +0 -0
  74. data/share/htdocs/{js/graph → graph/js}/abstract_chart.js +1 -1
  75. data/share/htdocs/{js/graph → graph/js}/abstract_nv_chart.js +8 -13
  76. data/share/htdocs/{js/graph → graph/js}/abstract_widget.js +9 -16
  77. data/share/htdocs/{js/graph → graph/js}/axis.js +1 -1
  78. data/share/htdocs/{js/graph → graph/js}/barchart.js +2 -2
  79. data/share/htdocs/{js/graph → graph/js}/code_mirror.js +1 -5
  80. data/share/htdocs/{js/graph → graph/js}/discrete_bar_chart.js +1 -1
  81. data/share/htdocs/{js/graph → graph/js}/histogram2.js +1 -1
  82. data/share/htdocs/{js/graph → graph/js}/holt_winters_chart.js +1 -1
  83. data/share/htdocs/{js/graph → graph/js}/line_chart3.js +1 -1
  84. data/share/htdocs/{js/graph → graph/js}/line_chart_with_focus.js +1 -1
  85. data/share/htdocs/{js/graph → graph/js}/map2.js +1 -1
  86. data/share/htdocs/{js/graph → graph/js}/multi_barchart.js +1 -1
  87. data/share/htdocs/graph/js/network2.js +412 -0
  88. data/share/htdocs/{js/graph → graph/js}/pie_chart2.js +1 -1
  89. data/share/htdocs/{js/graph → graph/js}/scatter_plot.js +1 -1
  90. data/share/htdocs/{js/graph → graph/js}/table2.js +17 -20
  91. data/share/htdocs/js/data_source2.js +187 -60
  92. data/share/htdocs/js/require3.js +38 -57
  93. data/share/htdocs/theme/bright/css/bright.css +4 -4
  94. data/share/htdocs/vendor/jquery/jquery.js +9404 -0
  95. data/share/htdocs/vendor/osa/LICENSE.txt +11 -0
  96. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_arrow_green_left.svg +0 -0
  97. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_arrow_yellow_right.svg +0 -0
  98. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_awareness.svg +0 -0
  99. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_camera-web.svg +0 -0
  100. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_cloud.svg +0 -0
  101. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_contract.svg +0 -0
  102. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_database.svg +0 -0
  103. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_desktop.svg +0 -0
  104. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_desktop_imac.svg +0 -0
  105. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-music.svg +0 -0
  106. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-scanner.svg +0 -0
  107. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-usb-wifi.svg +0 -0
  108. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-usb.svg +0 -0
  109. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-wireless-router.svg +0 -0
  110. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_disposal.svg +0 -0
  111. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_drive-harddisk.svg +0 -0
  112. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_drive-optical.svg +0 -0
  113. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_firewall.svg +0 -0
  114. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_home.svg +0 -0
  115. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_hub.svg +0 -0
  116. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_iPhone.svg +0 -0
  117. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_drive.svg +0 -0
  118. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_plc.svg +0 -0
  119. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_thermometer.svg +0 -0
  120. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_id_card.svg +0 -0
  121. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_image-generic.svg +0 -0
  122. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_laptop.svg +0 -0
  123. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_lifecycle.svg +0 -0
  124. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_lightning.svg +0 -0
  125. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-flash.svg +0 -0
  126. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-optical.svg +0 -0
  127. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-tape.svg +0 -0
  128. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_mobile_pda.svg +0 -0
  129. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_padlock.svg +0 -0
  130. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_printer.svg +0 -0
  131. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server.svg +0 -0
  132. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_application.svg +0 -0
  133. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_database.svg +0 -0
  134. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_directory.svg +0 -0
  135. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_distribution.svg +0 -0
  136. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_file.svg +0 -0
  137. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_gateway.svg +0 -0
  138. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_identity.svg +0 -0
  139. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_mail.svg +0 -0
  140. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_media.svg +0 -0
  141. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_monitor.svg +0 -0
  142. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_proxy.svg +0 -0
  143. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_terminal.svg +0 -0
  144. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_web.svg +0 -0
  145. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-branch.svg +0 -0
  146. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-factory.svg +0 -0
  147. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-head-office.svg +0 -0
  148. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-neighbourhood.svg +0 -0
  149. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_audit.svg +0 -0
  150. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_black_hat.svg +0 -0
  151. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue.svg +0 -0
  152. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_security_specialist.svg +0 -0
  153. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_sysadmin.svg +0 -0
  154. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_tester.svg +0 -0
  155. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_tie.svg +0 -0
  156. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green.svg +0 -0
  157. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_architect.svg +0 -0
  158. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_business_manager.svg +0 -0
  159. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_developer.svg +0 -0
  160. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_operations.svg +0 -0
  161. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_project_manager.svg +0 -0
  162. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_service_manager.svg +0 -0
  163. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_warning.svg +0 -0
  164. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_large_group.svg +0 -0
  165. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_users_blue_green.svg +0 -0
  166. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_vpn.svg +0 -0
  167. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_warning.svg +0 -0
  168. data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_wireless_network.svg +0 -0
  169. data/share/htdocs/{image → vendor/unknown/image}/.DS_Store +0 -0
  170. data/share/htdocs/{image → vendor/unknown/image}/add_icon.gif +0 -0
  171. data/share/htdocs/{image → vendor/unknown/image}/alertbad_icon.gif +0 -0
  172. data/share/htdocs/{image → vendor/unknown/image}/alertgood_icon.gif +0 -0
  173. data/share/htdocs/{image → vendor/unknown/image}/back_disabled.jpg +0 -0
  174. data/share/htdocs/{image → vendor/unknown/image}/back_disabled.png +0 -0
  175. data/share/htdocs/{image → vendor/unknown/image}/back_enabled.jpg +0 -0
  176. data/share/htdocs/{image → vendor/unknown/image}/back_enabled.png +0 -0
  177. data/share/htdocs/{image → vendor/unknown/image}/back_enabled_hover.jpg +0 -0
  178. data/share/htdocs/{image → vendor/unknown/image}/back_enabled_hover.png +0 -0
  179. data/share/htdocs/{image → vendor/unknown/image}/bottom-bg.gif +0 -0
  180. data/share/htdocs/{image → vendor/unknown/image}/forward_disabled.jpg +0 -0
  181. data/share/htdocs/{image → vendor/unknown/image}/forward_disabled.png +0 -0
  182. data/share/htdocs/{image → vendor/unknown/image}/forward_enabled.jpg +0 -0
  183. data/share/htdocs/{image → vendor/unknown/image}/forward_enabled.png +0 -0
  184. data/share/htdocs/{image → vendor/unknown/image}/forward_enabled_hover.jpg +0 -0
  185. data/share/htdocs/{image → vendor/unknown/image}/forward_enabled_hover.png +0 -0
  186. data/share/htdocs/{image → vendor/unknown/image}/icon-remove.gif +0 -0
  187. data/share/htdocs/{image → vendor/unknown/image}/indicator.gif +0 -0
  188. data/share/htdocs/{image → vendor/unknown/image}/laptop.png +0 -0
  189. data/share/htdocs/{image → vendor/unknown/image}/logo-bottom.gif +0 -0
  190. data/share/htdocs/{image → vendor/unknown/image}/nav-tab-arrow.gif +0 -0
  191. data/share/htdocs/{image → vendor/unknown/image}/norbit_big.gif +0 -0
  192. data/share/htdocs/{image → vendor/unknown/image}/norbit_clipart.png +0 -0
  193. data/share/htdocs/{image → vendor/unknown/image}/progress_bar.gif +0 -0
  194. data/share/htdocs/{image → vendor/unknown/image}/right-bg.gif +0 -0
  195. data/share/htdocs/{image → vendor/unknown/image}/sort_asc.png +0 -0
  196. data/share/htdocs/{image → vendor/unknown/image}/sort_asc_disabled.png +0 -0
  197. data/share/htdocs/{image → vendor/unknown/image}/sort_both.png +0 -0
  198. data/share/htdocs/{image → vendor/unknown/image}/sort_desc.png +0 -0
  199. data/share/htdocs/{image → vendor/unknown/image}/sort_desc_disabled.png +0 -0
  200. data/share/htdocs/{image → vendor/unknown/image}/spinner.gif +0 -0
  201. data/share/htdocs/{svg → vendor/unknown/svg}/ap.svg +0 -0
  202. data/share/htdocs/{svg → vendor/unknown/svg}/router.svg +0 -0
  203. metadata +198 -216
  204. data/example/demo/widgets/dashboard_tab.yaml +0 -28
  205. data/example/demo/widgets/download_tab.yaml +0 -42
  206. data/example/demo/widgets/edit_tab.yaml +0 -20
  207. data/example/demo/widgets/generator_tab.yaml +0 -12
  208. data/lib/omf-oml/endpoint.rb +0 -175
  209. data/lib/omf-oml/indexed_table.rb +0 -57
  210. data/lib/omf-oml/network.rb +0 -413
  211. data/lib/omf-oml/oml_tuple.rb +0 -62
  212. data/lib/omf-oml/schema.rb +0 -191
  213. data/lib/omf-oml/sequel/sequel_server.rb +0 -412
  214. data/lib/omf-oml/sql_row.rb +0 -302
  215. data/lib/omf-oml/sql_source.rb +0 -131
  216. data/lib/omf-oml/table.rb +0 -131
  217. data/lib/omf-oml/tuple.rb +0 -97
  218. data/lib/omf_oml.rb +0 -4
  219. data/share/htdocs/css/coderay.css +0 -127
  220. data/share/htdocs/css/ie.css +0 -40
  221. data/share/htdocs/css/lightbox.css +0 -62
  222. data/share/htdocs/css/scaffold.css +0 -74
  223. data/share/htdocs/css/screen.css +0 -1313
  224. data/share/htdocs/css/search.css +0 -102
  225. data/share/htdocs/css/table.css +0 -538
  226. data/share/htdocs/css/table2.css +0 -191
  227. data/share/htdocs/css/welcome.css +0 -103
  228. data/share/htdocs/css/wfob.css +0 -171
  229. data/share/htdocs/css/wshow.css +0 -69
  230. data/share/htdocs/gec9_demo.html +0 -39
  231. data/share/htdocs/images +0 -1
  232. data/share/htdocs/js/graph/histogram.js +0 -229
  233. data/share/htdocs/js/graph/line_chart.js +0 -342
  234. data/share/htdocs/js/graph/line_chart2.js +0 -232
  235. data/share/htdocs/js/graph/line_chart_fc.js +0 -94
  236. data/share/htdocs/js/graph/map.js +0 -85
  237. data/share/htdocs/js/graph/network.js +0 -591
  238. data/share/htdocs/js/graph/network2.js +0 -318
  239. data/share/htdocs/js/graph/pie_chart.js +0 -130
  240. data/share/htdocs/js/graph/table.js +0 -94
  241. data/share/htdocs/js/require2.js +0 -1998
  242. data/share/htdocs/js/timelines.js +0 -101
  243. data/share/htdocs/stylesheet/grid.css +0 -31
@@ -1,232 +0,0 @@
1
- L.provide('OML.line_chart2', ["graph/abstract_chart", "#OML.abstract_chart", "graph/axis", "#OML.axis", "graph.css", "/resource/vendor/d3/d3.js"], function () {
2
-
3
- OML.line_chart2 = OML.abstract_chart.extend({
4
- decl_properties: [
5
- ['x_axis', 'key', {property: 'x'}],
6
- ['y_axis', 'key', {property: 'y'}],
7
- ['group_by', 'key', {property: 'id', optional: true}],
8
- ['stroke_width', 'int', 2],
9
- ['stroke_color', 'color', 'category10()'],
10
- ['stroke_fill', 'color', 'blue']
11
- ],
12
-
13
- base_css_class: 'oml-line-chart',
14
-
15
- configure_base_layer: function(vis) {
16
- //OML.abstract_chart.prototype.initialize.call(this, opts);
17
- var base_layer = this.base_layer = vis.append("svg:g")
18
- ;
19
-
20
- var ca = this.widget_area;
21
- this.legend_layer = base_layer.append("svg:g");
22
- this.chart_layer = base_layer.append("svg:g");
23
- //.attr("transform", "translate(" + ca.x + ", " + (this.h - ca.y) + ")");
24
- this.axis_layer = base_layer.append('svg:g').attr("class", "axis_layer");
25
- },
26
-
27
-
28
- redraw: function(data) {
29
- var self = this;
30
- var o = this.opts;
31
- var ca = this.widget_area;
32
- var m = this.mapping;
33
-
34
- /* 'data' should be an an array (each line) of arrays (each tuple)
35
- * The following code assumes that the tuples are sorted in ascending
36
- * value associated with the x-axis.
37
- */
38
- var x_index = m.x_axis;
39
- var y_index = m.y_axis;
40
- var group_by = m.group_by;
41
- if (group_by != null) {
42
- data = this.group_by(data, group_by);
43
- } else {
44
- data = [data];
45
- };
46
-
47
-
48
- // The following assumes that the data is sorted in ascending value for x_axis
49
- var o_xaxis = o.mapping.x_axis || {}
50
- var x_max = this.x_max = o_xaxis.max != undefined ? o_xaxis.max : d3.max(data, function(d) {
51
- var last = d[d.length - 1];
52
- var x = x_index(last);
53
- return x;
54
- });
55
-
56
- var x_min = this.x_min = o_xaxis.min != undefined ? o_xaxis.min : d3.min(data, function(d) {return x_index(d[0]);});
57
- var x = this.x = d3.scale.linear().domain([x_min, x_max]).range([0, ca.w]).nice();
58
- var x_max_cnt = d3.max(data, function(d) {return d.length});
59
- if (x_max_cnt > ca.w) {
60
- data = this.reduce_data(data, x, x_index);
61
- }
62
-
63
-
64
- var y_domain = this.extent_2d(data, y_index, o.mapping.y_axis);
65
- d3.min(data, function(s) {
66
- var f = y_index;
67
- var t = f([1,2,3,4,5,6,7,8,9,10,11,12]);
68
- var m = d3.min(s, f);
69
- return m;
70
- });
71
- var y = this.y = d3.scale.linear()
72
- .domain(y_domain)
73
- .nice();
74
-
75
- this.redraw_axis(x, y);
76
-
77
- // *** LINES ****
78
- y.range([0, ca.h]);
79
- var line = d3.svg.line()
80
- .x(function(t) { return x(x_index(t)) })
81
- .y(function(t) { return -1 * y(y_index(t)); })
82
- ;
83
-
84
- // In case the widget got resized
85
- this.chart_layer.attr("transform", "translate(" + ca.x + ", " + (this.h - ca.y) + ")");
86
-
87
-
88
- var self = this;
89
- var lines = this.chart_layer.selectAll(".chart")
90
- .data(data, function(d, i) { return i; })
91
- ;
92
-
93
- lines.transition().duration(0).attr("d", function(d) { return line(d); });
94
- lines.enter()
95
- .append("svg:path")
96
- .attr("stroke-width", m.stroke_width)
97
- .attr("d", function(d) {
98
- var l = line(d);
99
- return l;
100
- })
101
- .attr("class", "chart")
102
- .attr("stroke", m.stroke_color)
103
- .attr("fill", "none")
104
- .on("mouseover", function(data) {
105
- var group_by = self.mapping.group_by;
106
- if (group_by) {
107
- var name = group_by(data[0]);
108
- self.on_highlighted({'elements': [{'id': name}]});
109
- }
110
- })
111
- .on("mouseout", function() {
112
- self.on_dehighlighted({});
113
- })
114
- ;
115
- lines.exit().remove();
116
-
117
- this.update_selection({});
118
- },
119
-
120
- redraw_axis: function(x, y) {
121
- var ca = this.widget_area;
122
- var oAxis = this.opts.axis || {};
123
-
124
- if (!this.xAxis) {
125
- this.xAxis = OML.line_chart2_axis(oAxis.x).scale(x).orient("bottom").range([0, ca.w]);
126
- this.axis_layer
127
- .append('g')
128
- .attr('class', 'x axis')
129
- ;
130
- }
131
- var xAxis = this.xAxis.scale(x).range([0, ca.w]);
132
- this.axis_layer.select('g.x.axis')
133
- .attr("transform", "translate(" + ca.x + "," + (ca.ty + ca.h) + ")")
134
- .call(xAxis);
135
-
136
- if (!this.yAxis) {
137
- this.yAxis = OML.line_chart2_axis(oAxis.y).orient("left");
138
- this.axis_layer
139
- .append('g')
140
- .attr('class', 'y axis')
141
- ;
142
- }
143
- y.range([ca.h, 0]);
144
- var yAxis = this.yAxis.scale(y).range([0, ca.h]);
145
- this.axis_layer.select('g.y.axis')
146
- .attr("transform", "translate(" + ca.x + "," + ca.ty + ")")
147
- .call(yAxis);
148
- },
149
-
150
- reduce_data: function(data, x_f, x_index_f) {
151
- // To much data, downsample
152
- var data2 = [];
153
- var self = this;
154
- data.map(function(l) {
155
- var xcurr = -999999;
156
- var l2 = [];
157
- l.map(function(t) {
158
- var x = Math.round(x_f(x_index_f(t)));
159
- if (x > xcurr) {
160
- l2.push(t);
161
- //xcurr = x + 1; // add a 'spare' pixel between consecutive points
162
- xcurr = x;
163
- }
164
- });
165
- data2.push(l2);
166
- });
167
- return(data2);
168
- },
169
-
170
- on_highlighted: function(evt) {
171
- var els = evt.elements;
172
- var names = _.map(els, function(el) { return el.id});
173
- var vis = this.chart_layer;
174
- var group_by = this.mapping.group_by;
175
- if (group_by) {
176
- vis.selectAll(".chart")
177
- .filter(function(d) {
178
- var dname = group_by(d[0]);
179
- return ! _.include(names, dname);
180
- })
181
- .transition()
182
- .style("opacity", 0.1)
183
- .delay(0)
184
- .duration(300);
185
- }
186
- if (evt.source == null) {
187
- evt.source = this;
188
- OHUB.trigger("graph.highlighted", evt);
189
- }
190
- },
191
-
192
- on_dehighlighted: function(evt) {
193
- var vis = this.chart_layer;
194
- vis.selectAll(".chart")
195
- .transition()
196
- .style("opacity", 1.0)
197
- .delay(0)
198
- .duration(300)
199
- if (evt.source == null) {
200
- evt.source = this;
201
- OHUB.trigger("graph.dehighlighted", evt);
202
- }
203
- },
204
-
205
-
206
- clear: function(data) {
207
- this.data = null;
208
- var lines = this.chart_layer.selectAll(".chart")
209
- .data([])
210
- .exit().remove();
211
- },
212
-
213
- // Return a subset of the associated data set where the value mapped
214
- // to the x-axis is within the <+min+, +max> range.
215
- //
216
- filter_x: function(min, max) {
217
- var xi = this.mapping.x_axis;
218
- return this.data.filter(function(t) {
219
- var x = t[xi];
220
- return (x > min && x <= max);
221
- })
222
- },
223
- })
224
- })
225
-
226
- /*
227
- Local Variables:
228
- mode: Javascript
229
- tab-width: 2
230
- indent-tabs-mode: nil
231
- End:
232
- */
@@ -1,94 +0,0 @@
1
- L.provide('OML.line_chart_fc', ["/resource/vendor/d3/d3.js", "graph/line_chart", '#OML.line_chart'], function () {
2
-
3
- OML['line_chart_fc'] = function(opts) {
4
- this.version = "0.5";
5
-
6
-
7
- this.init = function(opts) {
8
- var opts = this.opts = opts || {};
9
- var h = opts.height || 300;
10
- var w = opts.width || 400;
11
- var gap = opts.gap || 20;
12
- var vis = this.init_svg(w, h);
13
-
14
- var fopts = opts.focus || {};
15
- var copts = opts.context || {};
16
-
17
- // calculate height of two graphs.
18
- var fh = fopts.height;
19
- var ch = copts.height;
20
- if (fh && !ch) ch = 1.0 - fh;
21
- if (!fh && ch) fh = 1.0 - ch;
22
- if (!fh && !ch) { ch = 0.3; fh = 1.0 - ch};
23
- fopts.height = (h - gap) * fh;
24
- copts.height = (h - gap) * ch;
25
-
26
- fopts.width = copts.width = w;
27
- fopts.schema = opts.schema;
28
- fopts.mapping = fopts.mapping || opts.mapping;
29
- fopts.svg = fopts.base_el = vis;
30
- this.focus = new OML.line_chart(fopts);
31
-
32
- copts.svg = copts.base_el = vis;
33
- copts.schema = opts.schema;
34
- copts.mapping = copts.mapping || opts.mapping;
35
- copts.y = h - copts.height;
36
- this.context = new OML.line_chart(copts);
37
- var self = this;
38
- this.context.init_selection(function(ctxt, x_min, x_max) {
39
- var min = Math.round(x_min);
40
- var max = Math.round(x_max);
41
-
42
- // d3.select("#x_min span").text(min);
43
- // d3.select("#x_max span").text(max);
44
-
45
- if ((max - min) == 0) {
46
- // clear selection
47
- self.focus.clear(null);
48
- return;
49
- }
50
- if ((max - min) < 3) return;
51
-
52
- var d = ctxt.filter_x(min, max)
53
- self.focus.update([{name: 'default', events: d}]);
54
- });
55
-
56
- var data = opts.data;
57
- if (data) this.update(data);
58
- };
59
-
60
- this.append = function(data) {
61
- this.context.append(data);
62
- };
63
-
64
- this.update = function(data) {
65
- this.context.update(data);
66
- };
67
-
68
- this.init_svg = function(w, h) {
69
- var opts = this.opts;
70
-
71
- if (opts.svg) return opts.svg;
72
-
73
- var base_el = opts.base_el || "body";
74
- if (typeof(base_el) == "string") base_el = d3.select(base_el);
75
- var vis = opts.svg = base_el.append("svg:svg")
76
- .attr("width", w)
77
- .attr("height", h);
78
- if (opts.x) {
79
- // the next two lines do the same, but only one works
80
- // in the specific context
81
- vis.attr("x", opts.x);
82
- vis.style("margin-left", opts.x + "px");
83
- }
84
- if (opts.y) {
85
- vis.attr("y", opts.y);
86
- vis.style("margin-top", opts.y + "px");
87
- }
88
- return vis;
89
- }
90
-
91
- this.init(opts);
92
- }
93
- })
94
-
@@ -1,85 +0,0 @@
1
-
2
-
3
- //L.provide('OML.map', ["d3", "http://maps.googleapis.com/maps/api/js?sensor=true"], function () {
4
- L.provide('OML.googleLoader', ["http://www.google.com/jsapi"], function () {
5
- google.load("maps", "3", {"callback" : onMapLoaded, "other_params":"sensor=true"});
6
- });
7
-
8
- function onMapLoaded() {
9
-
10
- L.provide('OML.map', ["d3/d3"], function () {
11
-
12
- OML['map'] = function(opts){
13
- this.opts = opts;
14
-
15
- this.init = function(opts) {
16
- var base_el = opts.base_el || '#map'
17
- var node = d3.select(base_el).node();
18
- node.style = "width:100%; height:100%";
19
- var map = this.map = new google.maps.Map(node, {
20
- zoom: 8,
21
- center: new google.maps.LatLng(37.76487, -122.41948),
22
- mapTypeId: google.maps.MapTypeId.TERRAIN
23
- });
24
-
25
- // Load the station data. When the data comes back, create an overlay.
26
- //d3.json("stations.json", function(data) {
27
-
28
- var data = opts.data;
29
- if (data) this.update(data);
30
- };
31
-
32
- this.update = function(data) {
33
- var overlay = new google.maps.OverlayView();
34
-
35
- // Add the container when the overlay is added to the map.
36
- overlay.onAdd = function() {
37
- var layer = d3.select(this.getPanes().overlayLayer).append("div")
38
- .attr("class", "stations");
39
-
40
- // Draw each marker as a separate SVG element.
41
- // We could use a single SVG, but what size would it have?
42
- overlay.draw = function() {
43
- var projection = this.getProjection();
44
-
45
- var marker = layer.selectAll("svg")
46
- .data(d3.entries(data))
47
- .each(transform) // update existing markers
48
- .enter().append("svg:svg")
49
- .each(transform)
50
- .attr("class", "marker");
51
-
52
- // Add a circle.
53
- marker.append("svg:circle")
54
- .attr("r", 4.5);
55
-
56
- // Add a label.
57
- marker.append("svg:text")
58
- .attr("x", 7)
59
- .attr("dy", ".31em")
60
- .text(function(d) { return d.key; });
61
-
62
- function transform(d) {
63
- d = new google.maps.LatLng(d.value[1], d.value[0]);
64
- d = projection.fromLatLngToDivPixel(d);
65
- return d3.select(this)
66
- .style("left", d.x + "px")
67
- .style("top", d.y + "px");
68
- }
69
- };
70
- };
71
- };
72
-
73
- this.init(opts);
74
- }
75
- });
76
-
77
- }
78
-
79
- /*
80
- Local Variables:
81
- mode: Javascript
82
- tab-width: 2
83
- indent-tabs-mode: nil
84
- End:
85
- */