root / tei / js / .graffle.js @ 2
Historique | Voir | Annoter | Télécharger (3,74 ko)
1 | 2 | mingarao | Raphael.fn.connection = function (obj1, obj2, line, bg) { |
---|---|---|---|
2 | 2 | mingarao | if (obj1.line && obj1.from && obj1.to) {
|
3 | 2 | mingarao | line = obj1; |
4 | 2 | mingarao | obj1 = line.from; |
5 | 2 | mingarao | obj2 = line.to; |
6 | 2 | mingarao | } |
7 | 2 | mingarao | var bb1 = obj1.getBBox(),
|
8 | 2 | mingarao | bb2 = obj2.getBBox(), |
9 | 2 | mingarao | p = [{x: bb1.x + bb1.width / 2, y: bb1.y - 1}, |
10 | 2 | mingarao | {x: bb1.x + bb1.width / 2, y: bb1.y + bb1.height + 1}, |
11 | 2 | mingarao | {x: bb1.x - 1, y: bb1.y + bb1.height / 2}, |
12 | 2 | mingarao | {x: bb1.x + bb1.width + 1, y: bb1.y + bb1.height / 2}, |
13 | 2 | mingarao | {x: bb2.x + bb2.width / 2, y: bb2.y - 1}, |
14 | 2 | mingarao | {x: bb2.x + bb2.width / 2, y: bb2.y + bb2.height + 1}, |
15 | 2 | mingarao | {x: bb2.x - 1, y: bb2.y + bb2.height / 2}, |
16 | 2 | mingarao | {x: bb2.x + bb2.width + 1, y: bb2.y + bb2.height / 2}], |
17 | 2 | mingarao | d = {}, dis = []; |
18 | 2 | mingarao | for (var i = 0; i < 4; i++) { |
19 | 2 | mingarao | for (var j = 4; j < 8; j++) { |
20 | 2 | mingarao | var dx = Math.abs(p[i].x - p[j].x),
|
21 | 2 | mingarao | dy = Math.abs(p[i].y - p[j].y); |
22 | 2 | mingarao | if ((i == j - 4) || (((i != 3 && j != 6) || p[i].x < p[j].x) && ((i != 2 && j != 7) || p[i].x > p[j].x) && ((i != 0 && j != 5) || p[i].y > p[j].y) && ((i != 1 && j != 4) || p[i].y < p[j].y))) { |
23 | 2 | mingarao | dis.push(dx + dy); |
24 | 2 | mingarao | d[dis[dis.length - 1]] = [i, j];
|
25 | 2 | mingarao | } |
26 | 2 | mingarao | } |
27 | 2 | mingarao | } |
28 | 2 | mingarao | if (dis.length == 0) { |
29 | 2 | mingarao | var res = [0, 4]; |
30 | 2 | mingarao | } else {
|
31 | 2 | mingarao | res = d[Math.min.apply(Math, dis)]; |
32 | 2 | mingarao | } |
33 | 2 | mingarao | var x1 = p[res[0]].x, |
34 | 2 | mingarao | y1 = p[res[0]].y,
|
35 | 2 | mingarao | x4 = p[res[1]].x,
|
36 | 2 | mingarao | y4 = p[res[1]].y;
|
37 | 2 | mingarao | dx = Math.max(Math.abs(x1 - x4) / 2, 10); |
38 | 2 | mingarao | dy = Math.max(Math.abs(y1 - y4) / 2, 10); |
39 | 2 | mingarao | var x2 = [x1, x1, x1 - dx, x1 + dx][res[0]].toFixed(3), |
40 | 2 | mingarao | y2 = [y1 - dy, y1 + dy, y1, y1][res[0]].toFixed(3), |
41 | 2 | mingarao | x3 = [0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx][res[1]].toFixed(3), |
42 | 2 | mingarao | y3 = [0, 0, 0, 0, y1 + dy, y1 - dy, y4, y4][res[1]].toFixed(3); |
43 | 2 | mingarao | var path = ["M", x1.toFixed(3), y1.toFixed(3), "C", x2, y2, x3, y3, x4.toFixed(3), y4.toFixed(3)].join(","); |
44 | 2 | mingarao | if (line && line.line) {
|
45 | 2 | mingarao | line.bg && line.bg.attr({path: path});
|
46 | 2 | mingarao | line.line.attr({path: path});
|
47 | 2 | mingarao | } else {
|
48 | 2 | mingarao | var color = typeof line == "string" ? line : "#000"; |
49 | 2 | mingarao | return {
|
50 | 2 | mingarao | bg: bg && bg.split && this.path(path).attr({stroke: bg.split("|")[0], fill: "none", "stroke-width": bg.split("|")[1] || 3}), |
51 | 2 | mingarao | line: this.path(path).attr({stroke: color, fill: "none"}), |
52 | 2 | mingarao | from: obj1,
|
53 | 2 | mingarao | to: obj2
|
54 | 2 | mingarao | }; |
55 | 2 | mingarao | } |
56 | 2 | mingarao | }; |
57 | 2 | mingarao | |
58 | 2 | mingarao | var el;
|
59 | 2 | mingarao | window.onload = function () { |
60 | 2 | mingarao | var dragger = function () { |
61 | 2 | mingarao | this.ox = this.type == "rect" ? this.attr("x") : this.attr("cx"); |
62 | 2 | mingarao | this.oy = this.type == "rect" ? this.attr("y") : this.attr("cy"); |
63 | 2 | mingarao | this.animate({"fill-opacity": .2}, 500); |
64 | 2 | mingarao | }, |
65 | 2 | mingarao | move = function (dx, dy) { |
66 | 2 | mingarao | var att = this.type == "rect" ? {x: this.ox + dx, y: this.oy + dy} : {cx: this.ox + dx, cy: this.oy + dy}; |
67 | 2 | mingarao | this.attr(att);
|
68 | 2 | mingarao | for (var i = connections.length; i--;) { |
69 | 2 | mingarao | r.connection(connections[i]); |
70 | 2 | mingarao | } |
71 | 2 | mingarao | r.safari(); |
72 | 2 | mingarao | }, |
73 | 2 | mingarao | up = function () { |
74 | 2 | mingarao | this.animate({"fill-opacity": 0}, 500); |
75 | 2 | mingarao | }, |
76 | 2 | mingarao | r = Raphael("holder", 640, 480), |
77 | 2 | mingarao | connections = [], |
78 | 2 | mingarao | shapes = [ r.ellipse(190, 100, 30, 20), |
79 | 2 | mingarao | r.rect(290, 80, 60, 40, 10), |
80 | 2 | mingarao | r.rect(290, 180, 60, 40, 2), |
81 | 2 | mingarao | r.ellipse(450, 100, 20, 20) |
82 | 2 | mingarao | ]; |
83 | 2 | mingarao | for (var i = 0, ii = shapes.length; i < ii; i++) { |
84 | 2 | mingarao | var color = Raphael.getColor();
|
85 | 2 | mingarao | shapes[i].attr({fill: color, stroke: color, "fill-opacity": 0, "stroke-width": 2, cursor: "move"}); |
86 | 2 | mingarao | shapes[i].drag(move, dragger, up); |
87 | 2 | mingarao | } |
88 | 2 | mingarao | connections.push(r.connection(shapes[0], shapes[1], "#fff")); |
89 | 2 | mingarao | connections.push(r.connection(shapes[1], shapes[2], "#fff", "#fff|5")); |
90 | 2 | mingarao | connections.push(r.connection(shapes[1], shapes[3], "#000", "#fff")); |
91 | 2 | mingarao | }; |