Add graphs. Currently eats 100% of my cpu...
[matches/MCTX3420.git] / testing / MCTXWeb / public_html / static / mctx.gui.js
1 /**
2  * MCTX3420 2013 GUI stuff.
3  */
4
5 mctx = {};
6 mctx.api = location.protocol + "//" +  location.host + "/api/";
7 mctx.expected_api_version = 0;
8 mctx.sensors = {
9   0 : {name : "Strain gauge 1"},
10   1 : {name : "Strain gauge 2"},
11   2 : {name : "Strain gauge 3"},
12   3 : {name : "Strain gauge 4"},
13   4 : {name : "Pressure sensor 1"},
14   5 : {name : "Pressure sensor 2"}
15 };
16
17 mctx.actuators = {
18   0 : {name : "Solenoid 1"},
19   1 : {name : "Solenoid 2"},
20   2 : {name : "Solenoid 3"},
21   3 : {name : "Pressure regulator"}
22 };
23
24 mctx.strain_gauges = {};
25 mctx.strain_gauges.ids = [0, 1, 2, 3];
26 mctx.strain_gauges.time_limit = 20;
27
28 function getDate(){
29         document.write((new Date()).toDateString());
30 }
31
32 /** 
33  * Populates the navigation bar
34  */
35 $.fn.populateNavbar = function () {
36   var menu = $("<ul/>", {class : "menu"});
37   var sensorEntry = $("<li/>").append($("<a/>", {text : "Sensor data", href : "#"}));
38   var submenu = $("<ul/>", {class : "submenu"});
39   
40   for (sensor in mctx.sensors) {
41     var href = mctx.api + "sensors?start_time=0&format=tsv&id=" + sensor;
42     submenu.append($("<li/>").append(
43           $("<a/>", {text : mctx.sensors[sensor].name, 
44                      href : href, target : "_blank"})
45     ));
46   }
47   menu.append(sensorEntry.append(submenu));
48   
49   var actuatorEntry = $("<li/>").append($("<a/>", {text : "Actuator data", href : "#"}));
50   submenu = $("<ul/>", {class : "submenu"});
51   
52   for (actuator in mctx.actuators) {
53     var href = mctx.api + "actuators?start_time=0&format=tsv&id=" + actuator;
54     submenu.append($("<li/>").append(
55           $("<a/>", {text : mctx.actuators[actuator].name, 
56                      href : href, target : "_blank"})
57     ));
58   }
59   menu.append(actuatorEntry.append(submenu));  
60   menu.appendTo(this);
61 }
62
63 /**
64  * Sets the camera autoupdater
65  * @returns {$.fn}
66  */
67 $.fn.setCamera = function () {
68   var url = mctx.api + "image";
69   var update = true;
70
71   //Stop updating if we can't retrieve an image!
72   this.error(function() {
73     update = false;
74   });
75   
76   var parent = this;
77   
78   var updater = function() {
79     if (!update) {
80       alert("Cam fail");
81       parent.attr("src", "");
82       return;
83     }
84     
85     parent.attr("src", url + "#" + (new Date()).getTime());
86     
87     setTimeout(updater, 500);
88   };
89   
90   updater();
91   return this;
92 };
93
94 $.fn.setStrainGraphs = function () {
95   var sensor_url = mctx.api + "sensors";
96   var graphdiv = this;
97   
98   var updater = function () {
99     var time_limit = mctx.strain_gauges.time_limit;
100     var responses = new Array(mctx.strain_gauges.ids.length);
101     
102     for (var i = 0; i < mctx.strain_gauges.ids.length; i++) {
103       var parameters = {id : i, start_time: -time_limit};
104       responses[i] = $.ajax({url : sensor_url, data : parameters});
105     }
106     
107     $.when.apply(this, responses).then(function () {
108       var data = new Array(arguments.length);
109       for (var i = 0; i < arguments.length; i++) {
110         var raw_data = arguments[i][0].data;
111         data[i] = raw_data;
112       }
113       $.plot(graphdiv, data);
114       setTimeout(updater, 500);
115     }, function () {alert("boo");});
116   };
117   
118   updater();
119   return this;
120 };

UCC git Repository :: git.ucc.asn.au