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; itimeline.length)? + timeline.length: end; + var index, endIndex, articleId; + for (t=tStart; tdatumCell.timeline.length)? + datumCell.timeline.length: end; + + var index, endIndex, articleId; + for (t=tStart; t poidsMax) { + poidsMax = articles[articleId].poids; + idMax = articleId; + } + } + } + + if (null!=this.parametres.contenu) { + return this.parametres.contenu(datumCell, articles[idMax]); + } + else { + return articles[idMax].titre; + } + }, + + getDataTreemap : function(json, start, end) { + var data = { name : "data", children : []}; + var clusters = json.clusters; + + for (var i=0, _end=clusters.length; i<_end; i++) { // parcours les differents clusters + //var size = comptage(clusters[i], start, end); + var cluster = { name : "cluster_" + clusters[i].numero, + timeline : clusters[i].timeline }; + data.children.push(cluster); + } + + return [data]; + }, + + getDataStreamgraph : function(json) { + var data = new Array(), + clusters = json.clusters, + duree = clusters[0].timeline.length; + + var dataCluster, timeline; + for (var i=0, end=clusters.length; i