Commit c49910f85892d3e7fa90dfc4851a5009488ecbb5

Authored by Luigi Serra
1 parent 4f0953cd

graph updates

datalets/graph-datalet/graph-datalet.html
@@ -31,7 +31,6 @@ @@ -31,7 +31,6 @@
31 31
32 <link rel="import" href="../base-datalet/base-datalet.html"> 32 <link rel="import" href="../base-datalet/base-datalet.html">
33 <link rel="import" href="../../bower_components/iron-flex-layout/iron-flex-layout.html"> 33 <link rel="import" href="../../bower_components/iron-flex-layout/iron-flex-layout.html">
34 -<link rel="import" href="../../bower_components/paper-slider/paper-slider.html">  
35 34
36 <!-- 35 <!--
37 `preview-datalet` is a datalet that allow user to preview the content of a web page. It creates a thumbnail of the site using the data-url attribute passed as input. 36 `preview-datalet` is a datalet that allow user to preview the content of a web page. It creates a thumbnail of the site using the data-url attribute passed as input.
@@ -54,32 +53,26 @@ Example: @@ -54,32 +53,26 @@ Example:
54 <link rel="stylesheet" href="static/css/graphStyle.css"> 53 <link rel="stylesheet" href="static/css/graphStyle.css">
55 54
56 <style is="custom-style"> 55 <style is="custom-style">
57 - .content {  
58 - /*width: 50%;*/  
59 - margin: 0px auto;  
60 - }  
61 56
62 </style> 57 </style>
63 58
64 - <div class="layout vertical">  
65 - <div id="toolbar">  
66 - <paper-slider min="900" max="1500" value="{{width}}"></paper-slider>  
67 - </div>  
68 - <div style="align-content: center;" id="graph-content">  
69 - <svg id="sbiricuda"></svg>  
70 - </div>  
71 - </div>  
72 -  
73 - <base-datalet id="base" data-url="{{dataUrl}}"></base-datalet> 59 + <div style="align-content: center;" id="graph_content">
  60 + <svg id="sbiricuda"></svg>
  61 + </div>
74 62
75 </template> 63 </template>
76 64
77 <script src="static/js/d3.v3.js"></script> 65 <script src="static/js/d3.v3.js"></script>
78 - <script src="static/js/buildGraph.js"></script>  
79 66
80 <script> 67 <script>
81 68
82 - var _this; 69 + gnodes = [];
  70 + glinks = [];
  71 +
  72 + width = undefined;
  73 + height = undefined;
  74 + svg = undefined;
  75 + _this = null;
83 76
84 Polymer({ 77 Polymer({
85 is : 'graph-datalet', 78 is : 'graph-datalet',
@@ -99,8 +92,7 @@ Example: @@ -99,8 +92,7 @@ Example:
99 92
100 width: { 93 width: {
101 type: Number, 94 type: Number,
102 - value: undefined,  
103 - observer : '_widthChanged' 95 + value: 1250
104 }, 96 },
105 97
106 height : { 98 height : {
@@ -111,20 +103,20 @@ Example: @@ -111,20 +103,20 @@ Example:
111 svg: { 103 svg: {
112 type: Object, 104 type: Object,
113 value: undefined 105 value: undefined
114 - }, 106 + }
  107 + },
115 108
116 - gnodes:{  
117 - type: Array,  
118 - value: undefined  
119 - }, 109 + buildGraph: function (t){
120 110
121 - glinks:{  
122 - type: Array,  
123 - value: undefined  
124 - },  
125 - }, 111 + this.svg = this.svg.append("g")
  112 + .call(d3.behavior.zoom().scaleExtent([.25, 20]).on("zoom", this.zoom))
  113 + .append("g");
  114 +
  115 + this.svg.append("rect")
  116 + .attr("fill", "white")
  117 + .attr("width", width)
  118 + .attr("height", height);
126 119
127 - /* buildGraph: function (t){  
128 var graph = {}; 120 var graph = {};
129 121
130 graph.nodes = t.nodes; 122 graph.nodes = t.nodes;
@@ -135,24 +127,35 @@ Example: @@ -135,24 +127,35 @@ Example:
135 return t.value ? t.value : 80 127 return t.value ? t.value : 80
136 }).on("tick", this.tick).start(); 128 }).on("tick", this.tick).start();
137 129
138 - this.glinks = this.svg.selectAll(".link").data(graph.links).enter().append("line").attr("class", "link");  
139 -  
140 - this.gnodes = this.svg.selectAll(".node").data(graph.nodes).enter().append("g").attr("class", function (t) {  
141 - return t.fixed ? "node fixed" : "node"  
142 - }).attr("name", function (t) {  
143 - return t.name ? t.name.split(" ").join("_").toLowerCase() : ""  
144 - }).on("mouseover", this.mouseover).on("mouseout", this.mouseout).on("click", this.active).append("circle").attr("class", function (t) {  
145 - return t.fixed ? "" : "drag"  
146 - }).attr("r", function (t) {  
147 - return t.r ? t.r : 15  
148 - }).attr("style", function (t) {  
149 - return t.color ? "stroke:" + t.color : !1  
150 - }); 130 + glinks = this.svg.selectAll(".link").data(graph.links).enter().append("line").attr("class", "link");
  131 +
  132 + gnodes = this.svg.selectAll(".node").data(graph.nodes).enter().append("g").attr("class", function (t) {
  133 + return t.fixed ? "node fixed" : "node"
  134 + }).attr("name", function (t) {
  135 + return t.name ? t.name.split(" ").join("_").toLowerCase() : ""
  136 + }).on("mouseover", this.mouseover)
  137 + .on("mouseout", this.mouseout)
  138 + .on("click", this.active)
  139 + .append("circle")
  140 + .attr("class", function (t) {
  141 + return t.fixed ? "" : "drag"
  142 + }).attr("r", function (t) {
  143 + return t.r ? t.r : 15
  144 + }).attr("style", function (t) {
  145 + return t.color ? "stroke:" + t.color : !1
  146 + });
151 147
152 //d3.selectAll(".drag").call(force.drag), svg.selectAll("g.fixed").call(text); 148 //d3.selectAll(".drag").call(force.drag), svg.selectAll("g.fixed").call(text);
153 d3.selectAll(".drag").call(force.drag), this.svg.selectAll("g.node").call(this.text); 149 d3.selectAll(".drag").call(force.drag), this.svg.selectAll("g.node").call(this.text);
154 150
  151 + svg = this.svg;
  152 +
  153 + },
  154 +
  155 + zoom: function() {
  156 + svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
155 }, 157 },
  158 +
156 text: function (t) 159 text: function (t)
157 { 160 {
158 var e = t.append("svg:foreignObject").attr("width", 120).attr("height", 30); 161 var e = t.append("svg:foreignObject").attr("width", 120).attr("height", 30);
@@ -179,14 +182,13 @@ Example: @@ -179,14 +182,13 @@ Example:
179 }); 182 });
180 183
181 184
182 -  
183 - _this.gnodes.attr("cx", function (t) {  
184 - return t.x = Math.max(25, Math.min(this.width - 50, t.x)) 185 + gnodes.attr("cx", function (t) {
  186 + return t.x = Math.max(25, Math.min(width - 50, t.x))
185 }).attr("cy", function (t) { 187 }).attr("cy", function (t) {
186 return t.y = Math.max(8, Math.min(600, t.y)) 188 return t.y = Math.max(8, Math.min(600, t.y))
187 }); 189 });
188 190
189 - _this.glinks.attr("x1", function (t) { 191 + glinks.attr("x1", function (t) {
190 return t.source.x 192 return t.source.x
191 }).attr("y1", function (t) { 193 }).attr("y1", function (t) {
192 return t.source.y 194 return t.source.y
@@ -210,7 +212,8 @@ Example: @@ -210,7 +212,8 @@ Example:
210 }, 212 },
211 213
212 active : function (t) { 214 active : function (t) {
213 - t.fixed && openModal(t.name) 215 + /*t.fixed && openModal(t.name)*/
  216 + _this.fire('graph-datalet_node-clicked', {node : t});
214 }, 217 },
215 218
216 openModal : function(t) { 219 openModal : function(t) {
@@ -218,7 +221,7 @@ Example: @@ -218,7 +221,7 @@ Example:
218 $(".modal-content").hide(); 221 $(".modal-content").hide();
219 $("." + e).fadeIn(); 222 $("." + e).fadeIn();
220 $("#modal").modal() 223 $("#modal").modal()
221 - },*/ 224 + },
222 225
223 /** 226 /**
224 * It is called after the elementโ€™s template has been stamped and all elements inside the elementโ€™s local 227 * It is called after the elementโ€™s template has been stamped and all elements inside the elementโ€™s local
@@ -231,47 +234,25 @@ Example: @@ -231,47 +234,25 @@ Example:
231 * 234 *
232 */ 235 */
233 ready: function(){ 236 ready: function(){
234 - width = this.width;  
235 - this.height = 9 * this.width / 16;  
236 - height = this.height;  
237 - svg = d3.select("svg#sbiricuda").attr("class", "svg").attr({  
238 - width: "100%",  
239 - height: "100%"  
240 - })//.attr("viewBox", "0 0 " + this.width + " " + this.height).attr("pointer-events", "all").style("position", "absolute").attr("style", "transform:translate(0px)");  
241 237
242 - var g = JSON.parse(this.data);  
243 - g.nodes[0].x = this.width / 2;  
244 - g.nodes[0].y = this.height / 2;  
245 - buildGraph(g);  
246 -  
247 - /* _this = this; 238 + _this = this;
248 239
249 this.height = 9 * this.width / 16; 240 this.height = 9 * this.width / 16;
250 - this.svg = d3.select("svg#sbiricuda").attr("class", "svg").attr({  
251 - width: "100%",  
252 - height: "100%"  
253 - }).attr("viewBox", "0 0 " + this.width + " " + this.height).attr("pointer-events", "all").style("position", "absolute").attr("style", "transform:translate(0px)");  
254 241
255 - var g = JSON.parse(this.data);  
256 - g.nodes[0].x = this.width / 2;  
257 - g.nodes[0].y = this.height / 2;  
258 - this.buildGraph(g);*/  
259 - },  
260 -  
261 - _widthChanged: function(oldValue, newValue){  
262 -  
263 - width = this.width;  
264 - this.height = 9 * this.width / 16; 242 + width = this.width;
265 height = this.height; 243 height = this.height;
266 244
267 - svg = d3.select("svg#sbiricuda").attr("class", "svg").attr({ 245 + this.$.graph_content.style.height = height + "px";
  246 +
  247 + this.svg = d3.select("svg#sbiricuda").attr("class", "svg").attr({
268 width: "100%", 248 width: "100%",
269 height: "100%" 249 height: "100%"
270 - }).attr("viewBox", "0 0 " + this.width + " " + height).attr("pointer-events", "all").style("position", "absolute").attr("style", "transform:translate(0px)"); 250 + }).attr("viewBox", "0 0 " + this.width + " " + this.height).attr("pointer-events", "all").style("position", "absolute").attr("style", "transform:translate(0px)");
271 251
272 var g = JSON.parse(this.data); 252 var g = JSON.parse(this.data);
273 g.nodes[0].x = this.width / 2; 253 g.nodes[0].x = this.width / 2;
274 g.nodes[0].y = this.height / 2; 254 g.nodes[0].y = this.height / 2;
  255 + this.buildGraph(g);
275 } 256 }
276 }); 257 });
277 </script> 258 </script>
datalets/graph-datalet/static/css/graphStyle.css
  1 +circle{
  2 + stroke-width: 2.5px;
  3 +}
  4 +
1 .text { 5 .text {
  6 + font-family: 'Roboto', sans-serif;
2 visibility: hidden 7 visibility: hidden
3 } 8 }
4 9
@@ -7,6 +12,7 @@ @@ -7,6 +12,7 @@
7 fill: #fff; 12 fill: #fff;
8 stroke: #959595; 13 stroke: #959595;
9 stroke-width: 4.5px 14 stroke-width: 4.5px
  15 + z-index: 100;
10 } 16 }
11 17
12 .node.fixed { 18 .node.fixed {
datalets/graph-datalet/static/js/buildGraph.js deleted
1 -  
2 -var nodes;  
3 -var links;  
4 -  
5 -function buildGraph(t) {  
6 - var graph = {};  
7 -  
8 - graph.nodes = t.nodes;  
9 - graph.links = t.links;  
10 -  
11 - force = d3.layout.force().nodes(graph.nodes).links(graph.links).size([width, height]).charge(-1e3).friction(.5).linkDistance(function (t)  
12 - {  
13 - return t.value ? t.value : 80  
14 - }).on("tick", tick).start();  
15 -  
16 -svg=svg.append("g")  
17 - .call(d3.behavior.zoom().scaleExtent([.25, 20]).on("zoom", zoom))  
18 - .append("g");  
19 -  
20 - svg.append("rect")  
21 - .attr("fill", "white")  
22 - .attr("width", width)  
23 - .attr("height", height);  
24 -  
25 - links = svg.selectAll(".link").data(graph.links).enter().append("line").attr("class", "link");  
26 -  
27 - nodes = svg.selectAll(".node").data(graph.nodes).enter().append("g")  
28 - .attr("class", function (t) {  
29 - return t.fixed ? "node fixed" : "node"  
30 - }).attr("name", function (t) {  
31 - return t.name ? t.name.split(" ").join("_").toLowerCase() : ""  
32 - }).on("mouseover", mouseover).on("mouseout", mouseout).on("click", active)  
33 - .append("circle")  
34 - .attr("class", function (t) {  
35 - return t.fixed ? "" : "drag"  
36 - })  
37 - .attr("r", function (t) {  
38 - return t.r ? t.r : 15  
39 - })  
40 - .attr("style", function (t) {  
41 - return t.color ? "stroke:" + t.color : !1  
42 - });  
43 -  
44 - //d3.selectAll(".drag").call(force.drag), svg.selectAll("g.fixed").call(text);  
45 - d3.selectAll(".drag").call(force.drag), svg.selectAll("g.node").call(text);  
46 -  
47 - /* d3.selectAll("circle").attr("transform", function(t) {  
48 - return "translate(" + t.x + "," + t.y + ")";  
49 - });*/  
50 - //d3.selectAll("circle").attr("transform", function(t) {  
51 - // return "translate(" + t + ")";  
52 - // });  
53 -  
54 -}  
55 -  
56 -function destroyGraph(){  
57 - nodes.remove();  
58 - links.remove();  
59 - svg.remove();  
60 - nodes = [];  
61 - links = [];  
62 -}  
63 -  
64 -function zoom() {  
65 - svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");  
66 -}  
67 -  
68 -function text(t) {  
69 - {  
70 - var e = t.append("svg:foreignObject").attr("width", 120).attr("height", 30);  
71 - e.attr("style", function (t) {  
72 - return "color:" + (t.color ? t.color : "#000")  
73 - }).append("xhtml:div").html(function (t) {  
74 - //return t.fixed ? t.name : null  
75 - return t.name;  
76 - })  
77 - }  
78 -}  
79 -  
80 -/*function textS(t) {  
81 - t.append("text").attr("dx", 12).attr("dy", ".35em").text(function (t) {  
82 - return t.name  
83 - })  
84 -}*/  
85 -  
86 -function tick() {  
87 - // d3.select("svg").attr("style", "transform:translate(8%)");  
88 - d3.selectAll("g foreignObject").attr("x", function (t) {  
89 - return t.x + (t.r ? 1.1 * t.r : 15)  
90 - }).attr("y", function (t) {  
91 - return t.y - 35  
92 - });  
93 -  
94 - d3.selectAll("#logo text").attr("x", function (t) {  
95 - return t.x + .7 * (t.r ? t.r : 15)  
96 - }).attr("y", function (t) {  
97 - return t.y  
98 - });  
99 -  
100 - nodes.attr("cx", function (t) {  
101 - return t.x = Math.max(25, Math.min(width - 50, t.x))  
102 - }).attr("cy", function (t) {  
103 - return t.y = Math.max(8, Math.min(600, t.y))  
104 - });  
105 -  
106 - links.attr("x1", function (t) {  
107 - return t.source.x  
108 - }).attr("y1", function (t) {  
109 - return t.source.y  
110 - }).attr("x2", function (t) {  
111 - return t.target.x  
112 - }).attr("y2", function (t) {  
113 - return t.target.y  
114 - })  
115 -}  
116 -function mouseover(t) {  
117 - d3.select(this).selectAll("circle").transition().duration(600).ease("elastic").attr("r", function (t) {  
118 - return 1 == t.fixed ? 1.4 * t.r : 15  
119 - });  
120 - //$("#sbiricuda").html($("." + t.name.split(" ").join("_").toLowerCase()).html())  
121 -}  
122 -function mouseout() {  
123 - d3.select(this).selectAll("text").style("visibility", "hidden"), d3.select(this).selectAll("circle").transition().duration(400).attr("r", function (t) {  
124 - return t.r ? t.r : 15  
125 - })  
126 -}  
127 -function active(t) {  
128 - t.fixed && openModal(t.name)  
129 -}  
130 -function openModal(t) {  
131 - var e = t.split(" ").join("_").toLowerCase();  
132 - $(".modal-content").hide();  
133 - $("." + e).fadeIn();  
134 - $("#modal").modal()  
135 -}  
136 -/*  
137 -var width = 900;//1250;  
138 -var height = 9 * width / 16, svg, link, node, svg = d3.select("svg#sbiricuda").attr("class", "svg").attr({  
139 - width: "100%",  
140 - height: "100%"  
141 -}).attr("viewBox", "0 0 " + width + " " + height).attr("pointer-events", "all").style("position", "absolute").attr("style", "transform:translate(0px)");*/