refactor selected nodes
[myslice.git] / plugins / senslabmap / static / js / map.js
index 0e8e140..a3589c2 100644 (file)
@@ -11,21 +11,36 @@ var Senslab = {
 
     if (info && info[2] == "iot-lab" && info[3] == "info") {
       node.arch = info[0].split("-")[0];
-      node.id = info[0].split("-")[1];
+      node.id = parseInt(info[0].split("-")[1]);
       node.site = info[1];
+      node.x = parseFloat(node.x);
+      node.y = parseFloat(node.y);
+      node.z = parseFloat(node.z);
+      node.selected = false;
       node.normalized = true;
     }
   },
   notify: function(node) {
-    console.log("[Notify] node " + node.id + " is " + node.boot_state);
+    console.log("[Notify] node " + node.id + " is " + node.selected);
   },
   createMaps: function($container, sites, nodes) {
     var maps = {};
+    var $menu = $("<ul id='sites-tabs' class='nav nav-tabs' data-tabs='sites-tabs'/>").appendTo($container);
+    var $maps = $("<div id='maps' class='tab-content' />").appendTo($container);
+    
     $.each(sites, function(i, site) {
-      var $div = $("<div />").appendTo($container);
-      maps[site] = new Senslab.Map($div);
+      var entry = $("<li><a href='#" + site + "' data-toggle='tab'>" + site + "</a></li>").appendTo($menu);
+      var $tab = $("<div class='tab-pane' id='" + site + "' />").appendTo($maps);
+      maps[site] = new Senslab.Map($tab);
       maps[site].addNodes(nodes[site]);
     });
+    
+    $menu.find("li").eq(0).addClass("active");
+    $maps.find("div").eq(0).addClass("active");
+
+    if (!sites.length) {
+      $container.text("No nodes to display.");
+    }
   }
 };
 
@@ -108,7 +123,7 @@ Senslab.Map = function() {
           if (intersects.length > 0) {
             var particle = intersects[0].object;
             if (particle.data.boot_state != "Suspected") {
-              setState(particle, particle.data.boot_state == "Alive" ? "Selected" : "Alive");
+              setSelected(particle, !particle.data.selected);
               var $nodeInput = self.$nodeInputs[particle.data.arch];
               $nodeInput.val(factorize(self.getNodesId(particle.data.arch)));
               self.update();
@@ -144,7 +159,7 @@ Senslab.Map = function() {
     var particles = this.scene.children;
     var nodes = [];
     for (var i = 0; i < particles.length; ++i) {
-      if (particles[i].data && particles[i].data.arch == arch && particles[i].data.boot_state == "Selected") {
+      if (particles[i].data && particles[i].data.arch == arch && particles[i].data.selected) {
         nodes.push(particles[i].id);
       }
     }
@@ -173,14 +188,14 @@ Senslab.Map = function() {
     this.update();
   };
   
-  Map.prototype.updateSelected = function(arch, selected) {
+  Map.prototype.updateSelected = function(arch, selectedNodes) {
     var particles = this.scene.children;
     for (var i = 0; i < particles.length; ++i) {
       if (particles[i].data && particles[i].data.arch == arch && particles[i].data.boot_state != "Suspected") {
         var particle = particles[i];
-        var state = $.inArray(particle.id, selected) == -1 ? "Alive" : "Selected";
-        if (particle.data.boot_state != state) {
-          setState(particle, state);
+        var selected = $.inArray(particle.id, selectedNodes) != -1;
+        if (particle.data.selected != selected) {
+          setSelected(particle, selected);
         }
       }
     }
@@ -202,14 +217,14 @@ Senslab.Map = function() {
     this.renderer.render(this.scene, this.camera);
   };
 
-  function setState(particle, state) {
-    particle.data.boot_state = state;
+  function setSelected(particle, selected) {
+    particle.data.selected = selected;
     setColor(particle);
     Senslab.notify(particle.data);
   }
 
   function setColor(particle) {
-    var color = colors[particle.data.boot_state] || colors["Selected"];
+    var color = particle.data.selected ? colors["Selected"] : colors[particle.data.boot_state];
     particle.material.color.setHex(color);
   }