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.
- data/.gitignore +0 -1
- data/README.md +8 -2
- data/doc/screenshot.png +0 -0
- data/example/{basic → NOT_WORKING/basic}/hello-world-wired.rb +0 -0
- data/example/{basic → NOT_WORKING/basic}/visualisation.yml +0 -0
- data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklynDemo.sq3 +0 -0
- data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_gps.dat +0 -0
- data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_server.rb +0 -0
- data/example/{brooklyn → NOT_WORKING/brooklyn}/brooklyn_wimax.dat +0 -0
- data/example/{brooklyn → NOT_WORKING/brooklyn}/sql_source.rb +0 -0
- data/example/{code → NOT_WORKING/code}/code_server.rb +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/data_sources/parse_log.rb +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/data_sources/pxe_slice-2012-06-02t02.25.00-04.00.log +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/progress_chart.yaml +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/progress_tab.yaml +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/progress_table.yaml +0 -0
- data/example/{frisbee → NOT_WORKING/frisbee}/viz_server.rb +0 -0
- data/example/{gec12 → NOT_WORKING/gec12}/gec12-53.rb +0 -0
- data/example/{gec12 → NOT_WORKING/gec12}/gec12_demo.sq3 +0 -0
- data/example/{gec12 → NOT_WORKING/gec12}/gec12_demo_server.rb +0 -0
- data/example/{gec12 → NOT_WORKING/gec12}/visualization.rb +0 -0
- data/example/{incoming → NOT_WORKING/incoming}/ofpu_barchart_widget.yaml +0 -0
- data/example/{log → NOT_WORKING/log}/log_config.xml +0 -0
- data/example/{log → NOT_WORKING/log}/log_server.rb +0 -0
- data/example/{network → NOT_WORKING/network}/flow_tab.yaml +0 -0
- data/example/{network → NOT_WORKING/network}/network_server.rb +0 -0
- data/example/{text → NOT_WORKING/text}/test.md +0 -0
- data/example/{text → NOT_WORKING/text}/test.rb +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/downlink.yaml +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/power.yaml +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/snapshot.db +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/snapshot.sql +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/test.rb +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/uplink.yaml +0 -0
- data/example/{wimax → NOT_WORKING/wimax}/viz_server.rb +0 -0
- data/example/demo/data_sources/mobile_network.rb +3 -0
- data/example/demo/data_sources/static_network.rb +54 -0
- data/example/demo/widgets/charts_tab.yaml +21 -16
- data/example/demo/widgets/linked_graphs_tab.yaml +95 -0
- data/example/demo/widgets/mobile_network_widget.yaml +1 -1
- data/example/demo/widgets/pie_chart_widget.yaml +1 -1
- data/lib/omf-web/config.ru +2 -2
- data/lib/omf-web/data_source_proxy.rb +81 -19
- data/lib/omf-web/rack/websocket_handler.rb +77 -23
- data/lib/omf-web/theme/abstract_page.rb +43 -26
- data/lib/omf-web/theme/bright/code_renderer.rb +1 -1
- data/lib/omf-web/theme/bright/page.rb +1 -0
- data/lib/omf-web/theme/bright/tabbed_renderer.rb +7 -0
- data/lib/omf-web/version.rb +7 -0
- data/lib/omf-web/widget/data_widget.rb +38 -46
- data/lib/omf-web/widget/layout/stacked_layout.rb +2 -1
- data/lib/omf-web/widget/layout/tabbed_layout.rb +1 -2
- data/{MARUKU-LICENSE → lib/omf-web/widget/text/maruku/MARUKU-LICENSE} +0 -0
- data/lib/{maruku → omf-web/widget/text/maruku}/helpers.rb +0 -0
- data/lib/{maruku → omf-web/widget/text/maruku}/input/parse_block.rb +0 -0
- data/lib/{maruku → omf-web/widget/text/maruku}/output/to_html.rb +26 -21
- data/lib/omf-web/widget/text/maruku.rb +5 -0
- data/omf_web.gemspec +2 -1
- data/share/htdocs/{js → UNUSED}/log/table.js +0 -0
- data/share/htdocs/{css → graph/css}/graph.css +0 -0
- data/share/htdocs/{image/graph → graph/img}/bar_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/donut_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/funnel.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/info.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/line_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/line_chart_fill.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/misc.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/overview.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/pie_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/scatter_plot.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/stacked_bar_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/stacked_line_chart.png +0 -0
- data/share/htdocs/{image/graph → graph/img}/table.png +0 -0
- data/share/htdocs/{js/graph → graph/js}/abstract_chart.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/abstract_nv_chart.js +8 -13
- data/share/htdocs/{js/graph → graph/js}/abstract_widget.js +9 -16
- data/share/htdocs/{js/graph → graph/js}/axis.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/barchart.js +2 -2
- data/share/htdocs/{js/graph → graph/js}/code_mirror.js +1 -5
- data/share/htdocs/{js/graph → graph/js}/discrete_bar_chart.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/histogram2.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/holt_winters_chart.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/line_chart3.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/line_chart_with_focus.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/map2.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/multi_barchart.js +1 -1
- data/share/htdocs/graph/js/network2.js +412 -0
- data/share/htdocs/{js/graph → graph/js}/pie_chart2.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/scatter_plot.js +1 -1
- data/share/htdocs/{js/graph → graph/js}/table2.js +17 -20
- data/share/htdocs/js/data_source2.js +187 -60
- data/share/htdocs/js/require3.js +38 -57
- data/share/htdocs/theme/bright/css/bright.css +4 -4
- data/share/htdocs/vendor/jquery/jquery.js +9404 -0
- data/share/htdocs/vendor/osa/LICENSE.txt +11 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_arrow_green_left.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_arrow_yellow_right.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_awareness.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_camera-web.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_cloud.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_contract.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_database.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_desktop.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_desktop_imac.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-music.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-scanner.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-usb-wifi.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-usb.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_device-wireless-router.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_disposal.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_drive-harddisk.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_drive-optical.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_firewall.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_home.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_hub.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_iPhone.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_drive.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_plc.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_ics_thermometer.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_id_card.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_image-generic.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_laptop.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_lifecycle.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_lightning.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-flash.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-optical.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_media-tape.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_mobile_pda.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_padlock.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_printer.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_application.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_database.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_directory.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_distribution.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_file.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_gateway.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_identity.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_mail.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_media.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_monitor.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_proxy.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_terminal.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_server_web.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-branch.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-factory.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-head-office.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_site-neighbourhood.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_audit.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_black_hat.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_security_specialist.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_sysadmin.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_tester.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_blue_tie.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_architect.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_business_manager.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_developer.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_operations.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_project_manager.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_service_manager.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_green_warning.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_user_large_group.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_users_blue_green.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_vpn.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_warning.svg +0 -0
- data/share/htdocs/{svg/osa → vendor/osa/svg}/osa_wireless_network.svg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/.DS_Store +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/add_icon.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/alertbad_icon.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/alertgood_icon.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_disabled.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_disabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_enabled.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_enabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_enabled_hover.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/back_enabled_hover.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/bottom-bg.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_disabled.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_disabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_enabled.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_enabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_enabled_hover.jpg +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/forward_enabled_hover.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/icon-remove.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/indicator.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/laptop.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/logo-bottom.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/nav-tab-arrow.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/norbit_big.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/norbit_clipart.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/progress_bar.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/right-bg.gif +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/sort_asc.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/sort_asc_disabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/sort_both.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/sort_desc.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/sort_desc_disabled.png +0 -0
- data/share/htdocs/{image → vendor/unknown/image}/spinner.gif +0 -0
- data/share/htdocs/{svg → vendor/unknown/svg}/ap.svg +0 -0
- data/share/htdocs/{svg → vendor/unknown/svg}/router.svg +0 -0
- metadata +198 -216
- data/example/demo/widgets/dashboard_tab.yaml +0 -28
- data/example/demo/widgets/download_tab.yaml +0 -42
- data/example/demo/widgets/edit_tab.yaml +0 -20
- data/example/demo/widgets/generator_tab.yaml +0 -12
- data/lib/omf-oml/endpoint.rb +0 -175
- data/lib/omf-oml/indexed_table.rb +0 -57
- data/lib/omf-oml/network.rb +0 -413
- data/lib/omf-oml/oml_tuple.rb +0 -62
- data/lib/omf-oml/schema.rb +0 -191
- data/lib/omf-oml/sequel/sequel_server.rb +0 -412
- data/lib/omf-oml/sql_row.rb +0 -302
- data/lib/omf-oml/sql_source.rb +0 -131
- data/lib/omf-oml/table.rb +0 -131
- data/lib/omf-oml/tuple.rb +0 -97
- data/lib/omf_oml.rb +0 -4
- data/share/htdocs/css/coderay.css +0 -127
- data/share/htdocs/css/ie.css +0 -40
- data/share/htdocs/css/lightbox.css +0 -62
- data/share/htdocs/css/scaffold.css +0 -74
- data/share/htdocs/css/screen.css +0 -1313
- data/share/htdocs/css/search.css +0 -102
- data/share/htdocs/css/table.css +0 -538
- data/share/htdocs/css/table2.css +0 -191
- data/share/htdocs/css/welcome.css +0 -103
- data/share/htdocs/css/wfob.css +0 -171
- data/share/htdocs/css/wshow.css +0 -69
- data/share/htdocs/gec9_demo.html +0 -39
- data/share/htdocs/images +0 -1
- data/share/htdocs/js/graph/histogram.js +0 -229
- data/share/htdocs/js/graph/line_chart.js +0 -342
- data/share/htdocs/js/graph/line_chart2.js +0 -232
- data/share/htdocs/js/graph/line_chart_fc.js +0 -94
- data/share/htdocs/js/graph/map.js +0 -85
- data/share/htdocs/js/graph/network.js +0 -591
- data/share/htdocs/js/graph/network2.js +0 -318
- data/share/htdocs/js/graph/pie_chart.js +0 -130
- data/share/htdocs/js/graph/table.js +0 -94
- data/share/htdocs/js/require2.js +0 -1998
- data/share/htdocs/js/timelines.js +0 -101
- 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
|
-
*/
|