integration/js/streamgraph.js
changeset 9 86ddd934464a
parent 8 dfdefb4dae2c
child 13 e15576c6953b
--- a/integration/js/streamgraph.js	Mon Oct 15 14:19:51 2012 +0200
+++ b/integration/js/streamgraph.js	Mon Oct 15 15:22:48 2012 +0200
@@ -1,4 +1,4 @@
-function streamgraph($selector, $slider) {
+function Streamgraph($selector) {
     
     /* Constants */
    
@@ -6,7 +6,8 @@
         YEARSHEIGHT = 20,
         STARTTIME = new Date(2007,6,1),
         ENDTIME = new Date(),
-        CURVE = .3,
+        CURVE = .25,
+        DATEPADDING = 10,
         COLORS = [ "#943a23", "#fbee97", "#cfbb95", "#da9761", "#ba5036" ],
         SELECTEDCOLOR = "#c51810"; 
     
@@ -94,18 +95,10 @@
     
     _(paths).each(function(path, index) {
         var color = COLORS[index % COLORS.length],
-            path = paper.path(path);
-        path.attr({
+            p = paper.path(path);
+        p.attr({
             stroke: "none",
             fill: color
-        }).mouseover(function() {
-            path.attr({
-                fill: SELECTEDCOLOR
-            });
-        }).mouseout(function() {
-            path.attr({
-                fill: color
-            })
         });
     });
     
@@ -124,9 +117,86 @@
                 "font-size": "14px"
             });
     }
+    
+    /* Drawing range window */
+    
+    var carregauche = paper.rect(width,-1,width,(2+height)),
+        carredroite = paper.rect(-width,-1,width,(2+height)),
+        attrcarres = {
+            fill: "#333333",
+            "fill-opacity": .5,
+            stroke: SELECTEDCOLOR
+        };
+    carregauche.attr(attrcarres);
+    carredroite.attr(attrcarres);
+    
+    var rangerect = paper.rect(0, (height - YEARSHEIGHT), width, YEARSHEIGHT);
+    rangerect.attr({
+        fill: SELECTEDCOLOR,
+        stroke: "none"
+    });
+    
+    function datetext(date) {
+        var d = new Date(date),
+            m = 1+d.getMonth(),
+            y = d.getFullYear();
+        return ((m < 10 ? "0" : "") + m + "/" + y);
+    }
+    
+    var startdate = paper.text(DATEPADDING, height - .5 * YEARSHEIGHT, datetext(STARTTIME));
+    startdate.attr({
+        fill: "#ffffff",
+        "text-anchor": "start"
+    });
+    var enddate = paper.text(width - DATEPADDING, height - .5 * YEARSHEIGHT, datetext(ENDTIME));
+    enddate.attr({
+        fill: "#ffffff",
+        "text-anchor": "end"
+    });
+    
+    /* Redrawing time slices for rollover effect */
+   
+    _(paths).each(function(path, index) {
+        var p = paper.path(path);
+        p.attr({
+            stroke: "none",
+            fill: SELECTEDCOLOR,
+            opacity: .01
+        }).mouseover(function() {
+            p.attr({
+                opacity: 1
+            });
+        }).mouseout(function() {
+            p.attr({
+                opacity: .01
+            })
+        });
+    });
+    
+    /* Returning a handler for slide value change */
+    
+    this.slidevalues = function(left, right) {
+        left = left || 0;
+        right = right || width;
+        carregauche.attr({x: left - width});
+        carredroite.attr({x: right});
+        startdate.attr({
+            x: DATEPADDING + left,
+            text: datetext(STARTTIME.valueOf() + left / txscale)
+        });
+        enddate.attr({
+            x: right - DATEPADDING,
+            text: datetext(STARTTIME.valueOf() + right / txscale)
+        });
+        rangerect.attr({
+            x: left,
+            width: right - left
+        });
+    }
 
 }
 
 $(function() {
-    streamgraph($(".streamgraph"), $("#slider-range"));
+    window.streamgraph = new Streamgraph($(".streamgraph"));
+    streamgraph.slidevalues.apply(streamgraph,$("#slider-range").dragslider("values"));
 })