Fix id bounds check for actuator + update graph code
[matches/MCTX3420.git] / testing / MCTXWeb / public_html / static / mctx.graph.js
index f71b52a..c20ec1d 100644 (file)
@@ -22,12 +22,11 @@ mctx.graph.timer = null;
  * @returns result
  */
 function dataMerge(dependent, independent, result) {
-       
        var j = 0;
        for (var i = 0; i < dependent.length-1; ++i) {
                var start = dependent[i][0];
                var end = dependent[i+1][0];
-               var average = 0; var n = 0;
+               var average = 0, n = 0;
                for (; j < independent.length; ++j) {
                        if (independent[j][0] < start)
                                continue;
@@ -39,31 +38,36 @@ function dataMerge(dependent, independent, result) {
                if (n > 0) {
                        average /= n;
                        result.push([dependent[i][1], average]);
-               }       
+               }
        }
        return result;
 }
 
 /**
  * Helper function adds the sensors and actuators to a form
+ * @param input_type is it a radio? or is it a checkbox?
+ * @param check_first determines whether the first item is checked or not
+ * @param group which group this input belongs to (name field)
  */
-$.fn.deployDevices = function(input_type, check_first) {
-  var formhtml = $(this).html();
-  var formname = $(this).attr("id");
- // formhtml += "<i> Sensors </i>"
-  var checked = "checked";
-  if (!check_first)
-    checked = "";
-  $.each(mctx.sensors, function(key, val) {
-    formhtml += "<input type=\""+input_type+"\" value=\""+val+"\" id=\"sensors\" name=\""+formname+"\""+checked+">" + val + "</input>";
-    checked = "";
-  });
- // formhtml += "<i> Actuators </i>"
-  $.each(mctx.actuators, function(key, val) {
-    formhtml += "<input type=\""+input_type+"\" value=\""+val+"\" id=\"actuators\" name=\""+formname+"\""+checked+">" + val + "</input>";
-    checked = "";
-  });
-  $(this).html(formhtml);
+$.fn.deployDevices = function(input_type, check_first, group) {
+  var container = this;
+  var apply = function(dict, prefix) {
+    $.each(dict, function(key, val) {
+      var attributes = {
+          'type' : input_type, 'value' : key, 'alt' : val,
+          'class' : prefix, 'name' : group, 
+          'id' : prefix + '_' + val //Unique id (name mangling)
+      };
+      var entry = $("<input/>", attributes);
+      var label = $("<label/>", {'for' : prefix + '_' + val, 'text' : val}); 
+      entry.prop("checked", check_first);
+      check_first = false;
+      container.append(entry).append(label);
+    });
+  }
+  
+  apply(mctx.sensors, 'sensors');
+  apply(mctx.actuators, 'actuators');
 };
 
 /**
@@ -71,39 +75,31 @@ $.fn.deployDevices = function(input_type, check_first) {
  * @returns itself (Is this right?)
  */
 $.fn.setDevices = function() {
-       // Query for sensors and actuators
-  var sensor_curtime = 0;
-  var actuator_curtime = 0;
-  return $.when(
-       $.ajax({url : mctx.api + "?sensors"}).done(function(data) {
-               mctx.sensors = $.extend(mctx.sensors, data.sensors);
-      sensor_curtime = data.running_time;
-    }),
-    $.ajax({url : mctx.api + "?actuators"}).done(function(data) {
-      mctx.actuators = $.extend(mctx.actuators, data.actuators);
-      actuator_curtime = data.running_time;
-    })
-  ).then(function() {
-    $("#xaxis").deployDevices("radio", false);
-    $("#yaxis").deployDevices("checkbox", true);
-    var c = Math.max(actuator_curtime, sensor_curtime);
-    $("input[name=current_time]", "#time_range").val(c);
-    
+  // Query for sensors and actuators
+  return $.ajax({
+    url : mctx.api + 'identify', 
+    data : {'sensors' : 1, 'actuators' : 1}
+  }).done(function (data) {
+    mctx.sensors = $.extend(mctx.sensors, data.sensors);
+    mctx.actuators = $.extend(mctx.actuators, data.actuators);
     
+    $("#xaxis").deployDevices("radio", false, 'xaxis');
+    $("#yaxis").deployDevices("checkbox", true, 'yaxis');
+    $("#current_time").val(data.running_time);
   });
 };
 
 
-
-
 /**
  * Sets the graphs to graph stuff.
  * @returns {$.fn}
  */
 $.fn.setGraph = function () {
   clearTimeout(mctx.graph.timer);
-  var sensor_url = mctx.api + "sensors";
-  var actuator_url = mctx.api + "actuators";
+  var urls = {
+    'sensors' : mctx.graph.api.sensors,
+    'actuators' : mctx.graph.api.actuators
+  }
 
   var updateData = function(json, data) {
     for (var i = 0; i < json.data.length; ++i)
@@ -112,11 +108,10 @@ $.fn.setGraph = function () {
   };
   var graphdiv = this;
 
-
   // Determine which actuator/sensors to plot
  
-  var xaxis = $("input[name=xaxis]:checked", "#xaxis");
-  var yaxis = $("input[name=yaxis]:checked", "#yaxis");
+  var xaxis = $("#xaxis input:checked");
+  var yaxis = $("#yaxis input:checked");
   var start_time = $("#start_time").val();
   var end_time = $("#end_time").val();
   if (!$.isNumeric(start_time)) {
@@ -127,43 +122,48 @@ $.fn.setGraph = function () {
   }
 
   var devices = {};
-  xaxis.each(function() {
-    devices[$(this).val()] = {};
-    devices[$(this).val()]["url"] = mctx.api + $(this).attr("id");
-    devices[$(this).val()]["data"] = [];
-    devices[$(this).val()]["start_time"] = start_time;
-    devices[$(this).val()]["end_time"] = end_time;
-  });
+  var populateDict = function () {
+    var dict = {};
+    dict['urltype'] = $(this).attr("class");
+    dict['id'] = $(this).attr("value");
+    dict['data'] = [];
+    dict['start_time'] = start_time;
+    dict['end_time'] = end_time;
+    devices[$(this).attr("alt")] = dict;
+  };
+  xaxis.each(populateDict);
+  yaxis.each(populateDict);
+  
+  /*
   yaxis.each(function() {
-    devices[$(this).val()] = {};
-    devices[$(this).val()]["url"] = mctx.api + $(this).attr("id");
-    devices[$(this).val()]["data"] = [];
-    devices[$(this).val()]["start_time"] = start_time;
-    devices[$(this).val()]["end_time"] = end_time;
+    
+    devices[$(this).attr("alt")] = {};
+    devices[$(this).attr("alt")]["url"] = mctx.api + $(this).attr("class");
+    devices[$(this).attr("alt")]["data"] = [];
+    devices[$(this).attr("alt")]["start_time"] = start_time;
+    devices[$(this).attr("alt")]["end_time"] = end_time;
   });
+  */
 
   var updater = function () {
     var time_limit = 20;
     var responses = [];
     var ctime =  $("#current_time");
     
-    
     $.each(devices, function(key, val) {
-      if (devices[key].url === sensor_url || devices[key].url === actuator_url) {
-       // alert("AJAX");
-        //alert(key);
-        //alert(devices[key].url);
-        parameters = {name : key};
+      console.log(val);
+      if (val.urltype in urls) {
+        var parameters = {id : val.id};
         if (start_time != null) {
-          //alert("start_time = " + start_time);
-          parameters = $.extend(parameters, {start_time : start_time});
+          parameters.start_time = start_time;
         }
-        if (end_time != null)
-          parameters = $.extend(parameters, {end_time : end_time});
-        responses.push($.ajax({url : devices[key].url, data : parameters}).done(function(json) {
+        if (end_time != null) {
+          parameters.end_time = end_time;
+        }
+        responses.push($.ajax({url : urls[val.urltype], data : parameters})
+        .done(function(json) {
           //alert("Hi from " + json.name);
-          var dev = devices[json.name].data;
+          var dev = val.data;
           for (var i = 0; i < json.data.length; ++i) {
             if (dev.length <= 0 || json.data[i][0] > dev[dev.length-1][0]) {
               dev.push(json.data[i]);
@@ -175,19 +175,18 @@ $.fn.setGraph = function () {
       }
     });
 
-    //... When the response is received, then() will happen (I think?)
+    //... When the response is received, then() will happen (I think?) yup
     $.when.apply(this, responses).then(function () {
-      
       var plot_data = [];
       yaxis.each(function() {
         //alert("Add " + $(this).val() + " to plot");
-        if (xaxis.val() === "time") {
+        if (xaxis.attr("alt") === "time") {
           //alert("Against time");
-          plot_data.push(devices[$(this).val()].data);
+          plot_data.push(devices[$(this).attr("alt")].data);
         }
         else {
           var result = []
-          dataMerge(devices[xaxis.val()].data, devices[$(this).val()].data, result);
+          dataMerge(devices[xaxis.attr("alt")].data, devices[$(this).attr("alt")].data, result);
           /*
           var astr = "[";
           for (var i = 0; i < result.length; ++i)

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