cms/app-client/app/components/visu-langues.js
changeset 188 d2cb39155997
parent 142 86fcf0c837c0
child 198 541e26eb356f
--- a/cms/app-client/app/components/visu-langues.js	Sat Jun 11 01:07:57 2016 +0200
+++ b/cms/app-client/app/components/visu-langues.js	Sun Jun 12 22:53:25 2016 +0200
@@ -4,203 +4,208 @@
 import _ from 'lodash/lodash';
 
 export default Ember.Component.extend({
-  constants: Ember.inject.service(),
-  didInsertElement: function(){
-    var _this = this;
-    var margin = {top: 20, right: 0, bottom: 0, left: 0},
+
+    constants: Ember.inject.service(),
+
+    didInsertElement: function(){
+        var self = this;
+        var margin = {top: 20, right: 0, bottom: 0, left: 0},
         width = Ember.$("#chart_div").width(),
         height = 600 - margin.top - margin.bottom,
         formatNumber = d3.format(",d"),
         transitioning;
 
-    var x = d3.scale.linear()
-        .domain([0, width])
-        .range([0, width]);
+        var x = d3.scale.linear()
+            .domain([0, width])
+            .range([0, width]);
 
-    var y = d3.scale.linear()
-        .domain([0, height])
-        .range([0, height]);
+        var y = d3.scale.linear()
+            .domain([0, height])
+            .range([0, height]);
 
-    var treemap = d3.layout.treemap()
-        .children(function(d, depth) { return depth ? null : d._children; })
-        .sort(function(a, b) { return a.value - b.value; })
-        .ratio(height / width * 0.5 * (1 + Math.sqrt(5)))
-        .round(false);
+        var treemap = d3.layout.treemap()
+            .children(function(d, depth) { return depth ? null : d._children; })
+            .sort(function(a, b) { return a.value - b.value; })
+            .ratio(height / width * 0.5 * (1 + Math.sqrt(5)))
+            .round(false);
 
-    var svg = d3.select("#chart_div").append("svg")
-        .attr("width", width + margin.left + margin.right)
-        .attr("height", height + margin.bottom + margin.top)
-        .style("margin-left", -margin.left + "px")
-        .style("margin.right", -margin.right + "px")
-      .append("g")
-        .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
-        .style("shape-rendering", "crispEdges");
+        var svg = d3.select("#chart_div").append("svg")
+            .attr("width", width + margin.left + margin.right)
+            .attr("height", height + margin.bottom + margin.top)
+            .style("margin-left", -margin.left + "px")
+            .style("margin.right", -margin.right + "px")
+            .append("g")
+            .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
+            .style("shape-rendering", "crispEdges");
 
-    var grandparent = svg.append("g")
-        .attr("class", "grandparent");
+        var grandparent = svg.append("g")
+            .attr("class", "grandparent");
 
-    grandparent.append("rect")
-        .attr("y", -margin.top)
-        .attr("width", width)
-        .attr("height", margin.top);
+        grandparent.append("rect")
+            .attr("y", -margin.top)
+            .attr("width", width)
+            .attr("height", margin.top);
 
-    grandparent.append("text")
-        .attr("x", 6)
-        .attr("y", 6 - margin.top)
-        .attr("dy", ".75em");
+        grandparent.append("text")
+            .attr("x", 6)
+            .attr("y", 6 - margin.top)
+            .attr("dy", ".75em");
 
-    var baseurl = ENV.baseURL.replace(/\/$/,"")+'/api/v1';
-    d3.json(baseurl+"/languages", function(languages) {
+        var baseurl = ENV.baseURL.replace(/\/$/,"")+'/api/v1';
+        d3.json(baseurl+"/languages", function(languages) {
 
-      var root = _.cloneDeep(_this.constants.LANGUAGES_TREEMAP);
+            var root = _.cloneDeep(self.constants.LANGUAGES_TREEMAP);
 
-      initialize(root);
-      accumulate(root);
-      layout(root);
-      display(root);
+            initialize(root);
+            accumulate(root);
+            layout(root);
+            display(root);
 
-      function initialize(root) {
-        root.x = root.y = 0;
-        root.dx = width;
-        root.dy = height;
-        root.depth = 0;
-      }
+            function initialize(root) {
+                root.x = root.y = 0;
+                root.dx = width;
+                root.dy = height;
+                root.depth = 0;
+            }
+
+            // Aggregate the values for internal nodes. This is normally done by the
+            // treemap layout, but not here because of our custom implementation.
+            // We also take a snapshot of the original children (_children) to avoid
+            // the children being overwritten when when layout is computed.
+            function accumulate(d) {
+                d._children = d.children;
+
+                if(d.children) {
+                    d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0);
+                } else if (_.isArray(d.id)) {
+                    d.value = d.id.reduce(function(s,lid) { return s + (languages[lid]?languages[lid]:0); }, 0);
+                } else {
+                    d.value = languages[d.id]?languages[d.id]:0;
+                }
 
-      // Aggregate the values for internal nodes. This is normally done by the
-      // treemap layout, but not here because of our custom implementation.
-      // We also take a snapshot of the original children (_children) to avoid
-      // the children being overwritten when when layout is computed.
-      function accumulate(d) {
-        d._children = d.children;
-        if(d.children) {
-          d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0);
-        } else if (_.isArray(d.id)) {
-          d.value = d.id.reduce(
-            function(s,lid) { return s + (languages[lid]?languages[lid]:0); },
-            0
-          );
-        }
-        else {
-          d.value = languages[d.id]?languages[d.id]:0;
-        }
-        return d.value;
-      }
+                return d.value;
+            }
 
-      // Compute the treemap layout recursively such that each group of siblings
-      // uses the same size (1×1) rather than the dimensions of the parent cell.
-      // This optimizes the layout for the current zoom state. Note that a wrapper
-      // object is created for the parent node for each group of siblings so that
-      // the parent’s dimensions are not discarded as we recurse. Since each group
-      // of sibling was laid out in 1×1, we must rescale to fit using absolute
-      // coordinates. This lets us use a viewport to zoom.
-      function layout(d) {
-        if (d._children) {
-          treemap.nodes({_children: d._children});
-          d._children.forEach(function(c) {
-            c.x = d.x + c.x * d.dx;
-            c.y = d.y + c.y * d.dy;
-            c.dx *= d.dx;
-            c.dy *= d.dy;
-            c.parent = d;
-            layout(c);
-          });
-        }
-      }
+            // Compute the treemap layout recursively such that each group of siblings
+            // uses the same size (1×1) rather than the dimensions of the parent cell.
+            // This optimizes the layout for the current zoom state. Note that a wrapper
+            // object is created for the parent node for each group of siblings so that
+            // the parent’s dimensions are not discarded as we recurse. Since each group
+            // of sibling was laid out in 1×1, we must rescale to fit using absolute
+            // coordinates. This lets us use a viewport to zoom.
+            function layout(d) {
+                if (d._children) {
+                    treemap.nodes({_children: d._children});
+                    d._children.forEach(function(c) {
+                        c.x = d.x + c.x * d.dx;
+                        c.y = d.y + c.y * d.dy;
+                        c.dx *= d.dx;
+                        c.dy *= d.dy;
+                        c.parent = d;
+                        layout(c);
+                    });
+                }
+            }
 
-      function display(d) {
-        grandparent
-            .datum(d.parent)
-            .on("click", transition)
-            .select("text")
-            .text(name(d));
+            function display(d) {
+                grandparent
+                    .datum(d.parent)
+                    .on("click", transition)
+                    .select("text")
+                    .text(name(d));
+
+                var g1 = svg.insert("g", ".grandparent")
+                    .datum(d)
+                    .attr("class", "depth");
 
-        var g1 = svg.insert("g", ".grandparent")
-            .datum(d)
-            .attr("class", "depth");
+                var g = g1.selectAll("g")
+                    .data(d._children)
+                    .enter().append("g");
 
-        var g = g1.selectAll("g")
-            .data(d._children)
-            .enter().append("g");
+                g.classed("bla", true)
+                    .on("click", selectHandler);
 
-        g.classed("bla", true).on("click", selectHandler);
-
-        g.filter(function(d) { return d._children; })
-            .classed("children", true)
-            .on("click", transition);
+                g.filter(function(d) { return d._children; })
+                    .classed("children", true)
+                    .on("click", transition);
 
-        g.append("rect")
-            .attr("class", "parent")
-            // .attr("fill", (d.color || "#bbb"))
-            .call(rect)
-          .append("title")
-            .text(function(d) { return formatNumber(d.value); });
+                g.append("rect")
+                    .attr("class", "parent")
+                    .call(rect)
+                    .append("title")
+                    .text(function(d) { return formatNumber(d.value); });
 
-        g.append("text")
-            .attr("dy", ".75em")
-            .text(function(d) { return d.name; })
-            .call(text);
+                g.append("text")
+                    .attr("dy", ".75em")
+                    .text(function(d) { return d.name; })
+                    .call(text);
 
-        function transition(d) {
-          if (transitioning || !d) { return; }
-          selectHandler(d);
-          transitioning = true;
+                function transition(d) {
+                    if (transitioning || !d) {
+                        return;
+                    }
+                    
+                    selectHandler(d);
+                    transitioning = true;
 
-          var g2 = display(d),
-              t1 = g1.transition().duration(750),
-              t2 = g2.transition().duration(750);
+                    var g2 = display(d),
+                    t1 = g1.transition().duration(750),
+                    t2 = g2.transition().duration(750);
 
-          // Update the domain only after entering new elements.
-          x.domain([d.x, d.x + d.dx]);
-          y.domain([d.y, d.y + d.dy]);
-
-          // Enable anti-aliasing during the transition.
-          svg.style("shape-rendering", null);
+                    // Update the domain only after entering new elements.
+                    x.domain([d.x, d.x + d.dx]);
+                    y.domain([d.y, d.y + d.dy]);
 
-          // Draw child nodes on top of parent nodes.
-          svg.selectAll(".depth").sort(function(a, b) { return a.depth - b.depth; });
+                    // Enable anti-aliasing during the transition.
+                    svg.style("shape-rendering", null);
 
-          // Fade-in entering text.
-          g2.selectAll("text").style("fill-opacity", 0);
+                    // Draw child nodes on top of parent nodes.
+                    svg.selectAll(".depth").sort(function(a, b) { return a.depth - b.depth; });
+
+                    // Fade-in entering text.
+                    g2.selectAll("text").style("fill-opacity", 0);
 
-          // Transition to the new view.
-          t1.selectAll("text").call(text).style("fill-opacity", 0);
-          t2.selectAll("text").call(text).style("fill-opacity", 1);
-          t1.selectAll("rect").call(rect);
-          t2.selectAll("rect").call(rect);
+                    // Transition to the new view.
+                    t1.selectAll("text").call(text).style("fill-opacity", 0);
+                    t2.selectAll("text").call(text).style("fill-opacity", 1);
+                    t1.selectAll("rect").call(rect);
+                    t2.selectAll("rect").call(rect);
 
-          // Remove the old node when the transition is finished.
-          t1.remove().each("end", function() {
-            svg.style("shape-rendering", "crispEdges");
-            transitioning = false;
-          });
-        }
+                    // Remove the old node when the transition is finished.
+                    t1.remove().each("end", function() {
+                        svg.style("shape-rendering", "crispEdges");
+                        transitioning = false;
+                    });
+                }
 
-        function selectHandler (d){
-          if (d.name === "Global"){
-            return _this.sendAction('action', null);
-          }
-          _this.sendAction('action', d.name);
-        }
+                function selectHandler (d){
+                    if (d.id){
+                        self.get('setQueryParameters')(d.id);
+                    }
+                }
 
-        return g;
-      }
+                return g;
+            }
 
-      function text(text) {
-        text.attr("x", function(d) { return x(d.x) + 6; })
-            .attr("y", function(d) { return y(d.y) + 6; });
-      }
+            function text(text) {
+                text.attr("x", function(d) { return x(d.x) + 6; })
+                .attr("y", function(d) { return y(d.y) + 6; });
+            }
 
-      function rect(rect) {
-        rect.attr("x", function(d) { return x(d.x); })
-            .attr("y", function(d) { return y(d.y); })
-            .attr("width", function(d) { return x(d.x + d.dx) - x(d.x); })
-            .attr("height", function(d) { return y(d.y + d.dy) - y(d.y); })
-            .attr("fill", function(d) { return (d.color || "#bbb"); });
-      }
+            function rect(rect) {
+                rect.attr("x", function(d) { return x(d.x); })
+                    .attr("y", function(d) { return y(d.y); })
+                    .attr("width", function(d) { return x(d.x + d.dx) - x(d.x); })
+                    .attr("height", function(d) { return y(d.y + d.dy) - y(d.y); })
+                    .attr("fill", function(d) { return (d.color || "#bbb"); });
+            }
 
-      function name(d) {
-        return d.parent ? name(d.parent) + "." + d.name : d.name;
-      }
-    });
-  }
+            function name(d) {
+                return d.parent ? name(d.parent) + "." + d.name : d.name;
+            }
+
+        });
+
+    }
+
 });