diff -r efd9c589177a -r c0b4a8b5a012 toolkit/exemples/couple/javascript/streamMap.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/toolkit/exemples/couple/javascript/streamMap.js Thu Apr 10 14:20:23 2014 +0200
@@ -0,0 +1,401 @@
+/**
+ * Creation of an object for streamgraph and treemap connected
+ */
+
+/**
+ * Parameters is the object containing basics initialization parameters
+ */
+function StreamMap(json, parametres) {
+ this.parametres = {
+ hauteurStream: 100,
+ largeurStream: 900,
+ selectorStream: "#streamgraph",
+
+ hauteurTree: 900,
+ largeurTree: 900,
+ selectorTree: "#treemap",
+
+ duree: 50,
+ nbClusters: 10,
+ nbArticles: 1000,
+
+ couleurs: null,
+
+ mx: 0,
+ my: 0,
+
+ onFocus: null,
+ onBlur: null,
+ contenu: function(cellule, article) {
+
+ var html;
+ var img = article.image;
+ var wi, hi, wc, hc, w, h, r;
+
+ wi = img.largeur;
+ hi = img.hauteur;
+ wc = cellule.dx - 1;
+ hc = cellule.dy - 1;
+ r = Math.min(hi/hc, wi/wc);
+ w = wi/r;
+ h = hi/r;
+
+ var posx, posy;
+ posx = -(w-wc)/2;
+ posy = -(h-hc)/2;
+
+ html = "";
+
+ html += "
" + article.titre + "
"; + return html; + } + }; + this.etendre(parametres); + + var object = this; + this.treemap = null; + this.streamgraph = null; + this.dataTreemap = null; + this.articles = null; + this.dataStreamgraph = null; + this.data = null; + this.relations = []; + this.treemapHtml = null; + this.streamgraphHtml = null; + + this.area = d3.svg.area() + .x(function(d) { + return d.x * object.parametres.largeurStream / object.parametres.mx; + }) + .y0(function(d) { + return object.parametres.hauteurStream + - d.y0 * object.parametres.hauteurStream / object.parametres.my; + }) + .y1(function(d) { + return object.parametres.hauteurStream + - (d.y + d.y0) * object.parametres.hauteurStream + / object.parametres.my; + }); + + // Consctructeur des deux graphes + + object.dataJSON = json; + + /* -- Generate arrays for each graph -- */ + + object.dataTreemap = object.getDataTreemap(json); + object.dataStreamgraph = object.getDataStreamgraph(json); + object.articles = object.dataJSON.articles[0]; +// console.log(object.dataTreemap); +// console.log(object.dataStreamgraph); + + /* -- Create the streamgraph -- */ + + if (null==object.parametres.couleurs) { + object.parametres.couleurs = d3.scale.category20c(); + } + + object.parametres.mx = object.dataStreamgraph[0].length - 1; + object.parametres.my = d3.max(object.dataStreamgraph, function(d) { + return d3.max(d, function(d) { + return d.y0 + d.y; + }); + }); + + object.streamgraphHtml = d3.select(object.parametres.selectorStream) + .style("width", object.parametres.largeurStream + "px") + .style("height", object.parametres.hauteurStream + "px") + .append("svg:svg"); + + object.streamgraphHtml.selectAll("path") + .data(object.dataStreamgraph).enter().append("svg:path") + .style("fill", function() { + return object.parametres.couleurs(Math.random()); + }) + .attr("d", object.area) + .each(function(datum, index) { + var item = d3.select(this).attr("id", index); + object.relations.push({ + name: "cluster_" + index, + stream: item, + map: null, + color: item.style("fill") + }); + }); + + /* -- Create the treemap -- */ + + object.treemap = d3.layout.treemap() + .size([object.parametres.largeurTree, object.parametres.hauteurTree]) + .sticky(true) + .value(function(d) { + return object.comptage(d.timeline); + }); + + object.treemapHtml = d3.select("#treemap").append('div') + .style('position', 'relative') + .style('width', object.parametres.largeurTree + 'px') + .style('height', object.parametres.hauteurTree + 'px') + .style('background-color', '#32375F'); + + object.treemapHtml.data(object.dataTreemap).selectAll("div") + .data(object.treemap.nodes).enter().append("div") + .attr('class', 'cell') + .call(object.sizeCell) + .html(function(d) { + return d.children? null: object.getContent(d); + }) + /* .style('background', function(d) { + return !d.children? null: object.parametres.couleurs(d.name); + })*/ + .each(function(datum) { + var item = d3.select(this); + for (var i=0; i