Commit fcc0fee355c50426978ce364e53918dd52544ecd
Merge branch 'master' of http://service.routetopa.eu:7480/WebCompDev/COMPONENTS
Showing
3 changed files
with
101 additions
and
15 deletions
datalets/datasetexplorer-datalet/datasetexplorer-datalet.html
@@ -64,7 +64,8 @@ Example: | @@ -64,7 +64,8 @@ Example: | ||
64 | width: 100%; | 64 | width: 100%; |
65 | height: 70%; | 65 | height: 70%; |
66 | min-height: 500px; | 66 | min-height: 500px; |
67 | - background: #ddd; | 67 | + background: #ffffff; |
68 | + position: relative; | ||
68 | } | 69 | } |
69 | 70 | ||
70 | :host ::content text { | 71 | :host ::content text { |
@@ -107,8 +108,19 @@ Example: | @@ -107,8 +108,19 @@ Example: | ||
107 | :host ::content .children:hover rect.child { | 108 | :host ::content .children:hover rect.child { |
108 | fill: #bbb; | 109 | fill: #bbb; |
109 | } | 110 | } |
111 | + | ||
112 | + :host ::content .spinner { | ||
113 | + position: absolute; | ||
114 | + left: 50%; | ||
115 | + top: 50%; | ||
116 | + width: 160px; | ||
117 | + height: 160px; | ||
118 | + margin-left: -80px; | ||
119 | + margin-top: -80px; | ||
120 | + | ||
121 | + } | ||
110 | </style> | 122 | </style> |
111 | - <div id="treemap_placeholder"></div> | 123 | + <div id="treemap_placeholder"><img class="spinner" src="spin.svg" /></div> |
112 | <base-ajax-json-jsonpath-datalet data-url="{{dataUrl}}" fields="{{fields}}" data="{{data}}"></base-ajax-json-jsonpath-datalet> | 124 | <base-ajax-json-jsonpath-datalet data-url="{{dataUrl}}" fields="{{fields}}" data="{{data}}"></base-ajax-json-jsonpath-datalet> |
113 | </template> | 125 | </template> |
114 | 126 | ||
@@ -182,7 +194,15 @@ Example: | @@ -182,7 +194,15 @@ Example: | ||
182 | }, | 194 | }, |
183 | 195 | ||
184 | presentData: function(){ | 196 | presentData: function(){ |
185 | - build(this.map, "treemap_placeholder"); | 197 | + var me = this; |
198 | + var xyz = function(url) { | ||
199 | + me.selectResource(url); | ||
200 | + } | ||
201 | + build(this.map, "treemap_placeholder", xyz); | ||
202 | + }, | ||
203 | + | ||
204 | + selectResource: function(url) { | ||
205 | + this._component.fire("datasetexplorer-datalet_data-url", { url: url }); | ||
186 | } | 206 | } |
187 | }; | 207 | }; |
188 | 208 |
datalets/datasetexplorer-datalet/js/buildtreemap.js
@@ -2,14 +2,12 @@ | @@ -2,14 +2,12 @@ | ||
2 | * Created by Utente on 17/07/2015. | 2 | * Created by Utente on 17/07/2015. |
3 | */ | 3 | */ |
4 | 4 | ||
5 | -function build(root, place_holder) { | 5 | +function build(root, place_holder, select_listener) { |
6 | 6 | ||
7 | var plwidth = $("#" + place_holder).width(), | 7 | var plwidth = $("#" + place_holder).width(), |
8 | plheight = $("#" + place_holder).height(); | 8 | plheight = $("#" + place_holder).height(); |
9 | 9 | ||
10 | var margin = {top: 20, right: 0, bottom: 0, left: 0}, | 10 | var margin = {top: 20, right: 0, bottom: 0, left: 0}, |
11 | - //width = 960, | ||
12 | - //height = 500 - margin.top - margin.bottom, | ||
13 | width = plwidth, | 11 | width = plwidth, |
14 | height = plheight - margin.top - margin.bottom, | 12 | height = plheight - margin.top - margin.bottom, |
15 | formatNumber = d3.format(",d"), | 13 | formatNumber = d3.format(",d"), |
@@ -17,6 +15,7 @@ function build(root, place_holder) { | @@ -17,6 +15,7 @@ function build(root, place_holder) { | ||
17 | 15 | ||
18 | var x = d3.scale.linear() | 16 | var x = d3.scale.linear() |
19 | .domain([0, width]) | 17 | .domain([0, width]) |
18 | + .domain([0, width]) | ||
20 | .range([0, width]); | 19 | .range([0, width]); |
21 | 20 | ||
22 | var y = d3.scale.linear() | 21 | var y = d3.scale.linear() |
@@ -29,7 +28,10 @@ function build(root, place_holder) { | @@ -29,7 +28,10 @@ function build(root, place_holder) { | ||
29 | .ratio(height / width * 0.5 * (1 + Math.sqrt(5))) | 28 | .ratio(height / width * 0.5 * (1 + Math.sqrt(5))) |
30 | .round(false); | 29 | .round(false); |
31 | 30 | ||
32 | - var svg = d3.select("#" + place_holder).append("svg") | 31 | + d3.select("#" + place_holder).selectAll('*').remove(); |
32 | + | ||
33 | + var svg = d3.select("#" + place_holder) | ||
34 | + .append("svg") | ||
33 | .attr("width", width + margin.left + margin.right) | 35 | .attr("width", width + margin.left + margin.right) |
34 | .attr("height", height + margin.bottom + margin.top) | 36 | .attr("height", height + margin.bottom + margin.top) |
35 | .style("margin-left", -margin.left + "px") | 37 | .style("margin-left", -margin.left + "px") |
@@ -102,7 +104,7 @@ function build(root, place_holder) { | @@ -102,7 +104,7 @@ function build(root, place_holder) { | ||
102 | } | 104 | } |
103 | } | 105 | } |
104 | 106 | ||
105 | - function display(d) {0 | 107 | + function display(d) { |
106 | grandparent | 108 | grandparent |
107 | .datum(d.parent) | 109 | .datum(d.parent) |
108 | .on("click", transition) | 110 | .on("click", transition) |
@@ -135,9 +137,7 @@ function build(root, place_holder) { | @@ -135,9 +137,7 @@ function build(root, place_holder) { | ||
135 | 137 | ||
136 | g.append("text") | 138 | g.append("text") |
137 | .attr("dy", ".75em") | 139 | .attr("dy", ".75em") |
138 | - .text(function(d) { return (d._children) ? d.name : ''; }) | ||
139 | - .call(text) | ||
140 | - ; | 140 | + .call(text); |
141 | 141 | ||
142 | function transition(d) { | 142 | function transition(d) { |
143 | if (transitioning || !d) return; | 143 | if (transitioning || !d) return; |
@@ -160,7 +160,7 @@ function build(root, place_holder) { | @@ -160,7 +160,7 @@ function build(root, place_holder) { | ||
160 | svg.style("shape-rendering", null); | 160 | svg.style("shape-rendering", null); |
161 | 161 | ||
162 | // Draw child nodes on top of parent nodes. | 162 | // Draw child nodes on top of parent nodes. |
163 | - svg.selectAll(".depth").sort(function(a, b) { return a.depth - b.depth; }); | 163 | + svg.selectAll(".depth").sort(function(a, b) { return b.depth - a.depth; }); |
164 | 164 | ||
165 | // Fade-in entering text. | 165 | // Fade-in entering text. |
166 | g2.selectAll("text").style("fill-opacity", 0); | 166 | g2.selectAll("text").style("fill-opacity", 0); |
@@ -179,6 +179,11 @@ function build(root, place_holder) { | @@ -179,6 +179,11 @@ function build(root, place_holder) { | ||
179 | } | 179 | } |
180 | 180 | ||
181 | if (!d._children[0]._children) { | 181 | if (!d._children[0]._children) { |
182 | + //grandparent.dispatchEvent(new CustomEvent('select', { detail: d._children[0].name })); | ||
183 | + if (select_listener) { | ||
184 | + select_listener(d._children[0].name); | ||
185 | + } | ||
186 | + | ||
182 | var dataurl = d._children[0].name; | 187 | var dataurl = d._children[0].name; |
183 | var pageurl = dataurl.replace(/\/download\/.*/, ''); | 188 | var pageurl = dataurl.replace(/\/download\/.*/, ''); |
184 | dataletContainer = svg | 189 | dataletContainer = svg |
@@ -194,9 +199,69 @@ function build(root, place_holder) { | @@ -194,9 +199,69 @@ function build(root, place_holder) { | ||
194 | } | 199 | } |
195 | 200 | ||
196 | function text(text) { | 201 | function text(text) { |
197 | - text.attr("x", function(d) { return x(d.x) + 6; }) | ||
198 | - .attr("y", function(d) { return y(d.y) + 6; }) | ||
199 | - ; | 202 | + text |
203 | + .attr("x", function(d) { return x(d.x) + 6; }) | ||
204 | + .attr("y", function(d) { return y(d.y) + 6; }); | ||
205 | + text.call(wrap); | ||
206 | + } | ||
207 | + | ||
208 | + function wrap(d) { | ||
209 | + var wwidth = width; | ||
210 | + var hheight = height; | ||
211 | + | ||
212 | + d.each(function(){ | ||
213 | + var text = d3.select(this), | ||
214 | + d = text[0][0].__data__, | ||
215 | + words = d.name.trim().split(/\s+|\./).reverse(), | ||
216 | + word = words.pop(), | ||
217 | + line = [word], | ||
218 | + lineNumber = 0, | ||
219 | + lineHeight = 1.1, // ems | ||
220 | + x = parseFloat(text.attr("x")), | ||
221 | + y = parseFloat(text.attr("y")), | ||
222 | + dy = parseFloat(text.attr("dy")); | ||
223 | + text.selectAll("tspan").remove(); | ||
224 | + | ||
225 | + var fx = d3.scale.linear() | ||
226 | + .domain([d.parent.x, d.parent.x + d.parent.dx]) | ||
227 | + .range([0, wwidth]); | ||
228 | + | ||
229 | + var fy = d3.scale.linear() | ||
230 | + .domain([d.parent.y, d.parent.y + d.parent.dy]) | ||
231 | + .range([0, hheight]); | ||
232 | + | ||
233 | + var tspan = text | ||
234 | + .text(null) | ||
235 | + .append("tspan") | ||
236 | + .attr("x", fx(d.x) + 6) | ||
237 | + .attr("y", fy(d.y) + 6) | ||
238 | + .attr("dy", lineNumber++ * lineHeight + dy + "em"); | ||
239 | + var width = fx(d.x + d.dx) - fx(d.x) - 12; | ||
240 | + var height = fy(d.y + d.dy) - fy(d.y) - 6; | ||
241 | + | ||
242 | + while (word = words.pop()) { | ||
243 | + line.push(word); | ||
244 | + tspan.text(line.join(" ")); | ||
245 | + if (tspan.node().getComputedTextLength() > width) { | ||
246 | + line.pop(); | ||
247 | + tspan.text(line.join(" ")); | ||
248 | + | ||
249 | + line = [word]; | ||
250 | + | ||
251 | + tspan = text | ||
252 | + .append("tspan") | ||
253 | + .attr("x", fx(d.x) + 6) | ||
254 | + .attr("y", fy(d.y) + 6) | ||
255 | + .attr("dy", lineNumber++ * lineHeight + dy + "em") | ||
256 | + .text(word); | ||
257 | + | ||
258 | + if (text.node().offsetHeight > height) { | ||
259 | + tspan.remove(); | ||
260 | + break; | ||
261 | + } | ||
262 | + } | ||
263 | + } | ||
264 | + }); | ||
200 | } | 265 | } |
201 | 266 | ||
202 | function rect(rect) { | 267 | function rect(rect) { |
datalets/datasetexplorer-datalet/spin.svg
0 → 100644
1 | +<?xml version="1.0" encoding="utf-8"?><svg width='198px' height='198px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-spin"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><g transform="translate(50 50)"><g transform="rotate(0) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(45) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.12s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.12s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(90) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.25s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.25s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(135) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.37s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.37s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(180) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.5s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.5s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(225) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.62s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.62s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(270) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.75s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.75s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(315) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.87s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.87s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g></g></svg> | ||
0 | \ No newline at end of file | 2 | \ No newline at end of file |