-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.js
82 lines (71 loc) · 2.36 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
function dist(x1, y1, x2, y2) {
var a = x1 - x2;
var b = y1 - y2;
return Math.sqrt(a*a + b*b);
}
// gets the coordiantes of a point on semicircle
function semicircleCoords(width, height, proportion) {
// origin of the cicle
var originX = width / 2;
var originY = height;
// leftmost and rightmost points along semicircle
var leftmostX = circleSize;
var leftmostY = semicircleStart * height;
var rightmostX = width - circleSize;
// angle and distance from origin to leftmost and rightmost angles
var leftAngle = Math.atan((originY - leftmostY) / (originX - leftmostX));
var rightAngle = Math.PI - leftAngle;
var semicircleRadius = dist(originX, originY, leftmostX, leftmostY);
// compute desired angle
var desiredAngle = (proportion * (rightAngle - leftAngle)) + leftAngle;
// compute desired x and y values
var x = originX - semicircleRadius * Math.cos(desiredAngle);
var y = originY - semicircleRadius * Math.sin(desiredAngle);
return [x, y];
}
function boundBy(x, lower, upper) {
if (x < lower)
return lower;
else if (x > upper)
return upper;
else
return x;
}
function px(x) {
return x + 'px';
}
function min(a, b) {
return a < b ? a : b;
}
function wrap(text, width) {
text.each(function () {
var text = d3.select(this),
words = text.text().split(/\s+/).reverse(),
word,
line = [],
lineNumber = 0,
lineHeight = 1.1, // ems
x = text.attr("x"),
y = text.attr("y"),
dy = 0, //parseFloat(text.attr("dy")),
tspan = text.text(null)
.append("tspan")
.attr("x", x)
.attr("y", y)
.attr("dy", dy + "em");
while (word = words.pop()) {
line.push(word);
tspan.text(line.join(" "));
if (tspan.node().getComputedTextLength() > width) {
line.pop();
tspan.text(line.join(" "));
line = [word];
tspan = text.append("tspan")
.attr("x", x)
.attr("y", y)
.attr("dy", ++lineNumber * lineHeight + dy + "em")
.text(word);
}
}
});
}