@@ -1,172 +1,172 | |||
|
1 | 1 | var draw_gantt = null; |
|
2 | 2 | var draw_top; |
|
3 | 3 | var draw_right; |
|
4 | 4 | var draw_left; |
|
5 | 5 | |
|
6 | 6 | var rels_stroke_width = 2; |
|
7 | 7 | |
|
8 | 8 | function setDrawArea() { |
|
9 | 9 | draw_top = $("#gantt_draw_area").position().top; |
|
10 | 10 | draw_right = $("#gantt_draw_area").width(); |
|
11 | 11 | draw_left = $("#gantt_area").scrollLeft(); |
|
12 | 12 | } |
|
13 | 13 | |
|
14 | 14 | function getRelationsArray() { |
|
15 | 15 | var arr = new Array(); |
|
16 | 16 | $.each($('div.task_todo[data-rels]'), function(index_div, element) { |
|
17 | 17 | var element_id = $(element).attr("id"); |
|
18 | 18 | if (element_id != null) { |
|
19 | 19 | var issue_id = element_id.replace("task-todo-issue-", ""); |
|
20 | 20 | var data_rels = $(element).data("rels"); |
|
21 | 21 | for (rel_type_key in data_rels) { |
|
22 | 22 | $.each(data_rels[rel_type_key], function(index_issue, element_issue) { |
|
23 | 23 | arr.push({issue_from: issue_id, issue_to: element_issue, |
|
24 | 24 | rel_type: rel_type_key}); |
|
25 | 25 | }); |
|
26 | 26 | } |
|
27 | 27 | } |
|
28 | 28 | }); |
|
29 | 29 | return arr; |
|
30 | 30 | } |
|
31 | 31 | |
|
32 | 32 | function drawRelations() { |
|
33 | 33 | var arr = getRelationsArray(); |
|
34 | 34 | $.each(arr, function(index_issue, element_issue) { |
|
35 | 35 | var issue_from = $("#task-todo-issue-" + element_issue["issue_from"]); |
|
36 | 36 | var issue_to = $("#task-todo-issue-" + element_issue["issue_to"]); |
|
37 | 37 | if (issue_from.size() == 0 || issue_to.size() == 0) { |
|
38 | 38 | return; |
|
39 | 39 | } |
|
40 | 40 | var issue_height = issue_from.height(); |
|
41 | 41 | var issue_from_top = issue_from.position().top + (issue_height / 2) - draw_top; |
|
42 | 42 | var issue_from_right = issue_from.position().left + issue_from.width(); |
|
43 | 43 | var issue_to_top = issue_to.position().top + (issue_height / 2) - draw_top; |
|
44 | 44 | var issue_to_left = issue_to.position().left; |
|
45 | 45 | var color = issue_relation_type[element_issue["rel_type"]]["color"]; |
|
46 | 46 | var landscape_margin = issue_relation_type[element_issue["rel_type"]]["landscape_margin"]; |
|
47 | 47 | var issue_from_right_rel = issue_from_right + landscape_margin; |
|
48 | 48 | var issue_to_left_rel = issue_to_left - landscape_margin; |
|
49 | 49 | draw_gantt.path(["M", issue_from_right + draw_left, issue_from_top, |
|
50 | 50 | "L", issue_from_right_rel + draw_left, issue_from_top]) |
|
51 | 51 | .attr({stroke: color, |
|
52 | 52 | "stroke-width": rels_stroke_width |
|
53 | 53 | }); |
|
54 | 54 | if (issue_from_right_rel < issue_to_left_rel) { |
|
55 | 55 | draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top, |
|
56 | 56 | "L", issue_from_right_rel + draw_left, issue_to_top]) |
|
57 | 57 | .attr({stroke: color, |
|
58 | 58 | "stroke-width": rels_stroke_width |
|
59 | 59 | }); |
|
60 | 60 | draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_to_top, |
|
61 | 61 | "L", issue_to_left + draw_left, issue_to_top]) |
|
62 | 62 | .attr({stroke: color, |
|
63 | 63 | "stroke-width": rels_stroke_width |
|
64 | 64 | }); |
|
65 | 65 | } else { |
|
66 | 66 | var issue_middle_top = issue_to_top + |
|
67 | 67 | (issue_height * |
|
68 | 68 | ((issue_from_top > issue_to_top) ? 1 : -1)); |
|
69 | 69 | draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top, |
|
70 | 70 | "L", issue_from_right_rel + draw_left, issue_middle_top]) |
|
71 | 71 | .attr({stroke: color, |
|
72 | 72 | "stroke-width": rels_stroke_width |
|
73 | 73 | }); |
|
74 | 74 | draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_middle_top, |
|
75 | 75 | "L", issue_to_left_rel + draw_left, issue_middle_top]) |
|
76 | 76 | .attr({stroke: color, |
|
77 | 77 | "stroke-width": rels_stroke_width |
|
78 | 78 | }); |
|
79 | 79 | draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_middle_top, |
|
80 | 80 | "L", issue_to_left_rel + draw_left, issue_to_top]) |
|
81 | 81 | .attr({stroke: color, |
|
82 | 82 | "stroke-width": rels_stroke_width |
|
83 | 83 | }); |
|
84 | 84 | draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_to_top, |
|
85 | 85 | "L", issue_to_left + draw_left, issue_to_top]) |
|
86 | 86 | .attr({stroke: color, |
|
87 | 87 | "stroke-width": rels_stroke_width |
|
88 | 88 | }); |
|
89 | 89 | } |
|
90 | 90 | draw_gantt.path(["M", issue_to_left + draw_left, issue_to_top, |
|
91 | 91 | "l", -4 * rels_stroke_width, -2 * rels_stroke_width, |
|
92 | 92 | "l", 0, 4 * rels_stroke_width, "z"]) |
|
93 | 93 | .attr({stroke: "none", |
|
94 | 94 | fill: color, |
|
95 | 95 | "stroke-linecap": "butt", |
|
96 |
"stroke-linejoin": "miter" |
|
|
96 | "stroke-linejoin": "miter" | |
|
97 | 97 | }); |
|
98 | 98 | }); |
|
99 | 99 | } |
|
100 | 100 | |
|
101 | 101 | function getProgressLinesArray() { |
|
102 | 102 | var arr = new Array(); |
|
103 | 103 | var today_left = $('#today_line').position().left; |
|
104 | 104 | arr.push({left: today_left, top: 0}); |
|
105 | 105 | $.each($('div.issue-subject, div.version-name'), function(index, element) { |
|
106 | 106 | var t = $(element).position().top - draw_top ; |
|
107 | 107 | var h = ($(element).height() / 9); |
|
108 | 108 | var element_top_upper = t - h; |
|
109 | 109 | var element_top_center = t + (h * 3); |
|
110 | 110 | var element_top_lower = t + (h * 8); |
|
111 | 111 | var issue_closed = $(element).children('span').hasClass('issue-closed'); |
|
112 | 112 | var version_closed = $(element).children('span').hasClass('version-closed'); |
|
113 | 113 | if (issue_closed || version_closed) { |
|
114 | 114 | arr.push({left: today_left, top: element_top_center}); |
|
115 | 115 | } else { |
|
116 | 116 | var issue_done = $("#task-done-" + $(element).attr("id")); |
|
117 | 117 | var is_behind_start = $(element).children('span').hasClass('behind-start-date'); |
|
118 | 118 | var is_over_end = $(element).children('span').hasClass('over-end-date'); |
|
119 | 119 | if (is_over_end) { |
|
120 | 120 | arr.push({left: draw_right, top: element_top_upper, is_right_edge: true}); |
|
121 | 121 | arr.push({left: draw_right, top: element_top_lower, is_right_edge: true, none_stroke: true}); |
|
122 | 122 | } else if (issue_done.size() > 0) { |
|
123 | 123 | var done_left = issue_done.first().position().left + |
|
124 | 124 | issue_done.first().width(); |
|
125 | 125 | arr.push({left: done_left, top: element_top_center}); |
|
126 | 126 | } else if (is_behind_start) { |
|
127 | 127 | arr.push({left: 0 , top: element_top_upper, is_left_edge: true}); |
|
128 | 128 | arr.push({left: 0 , top: element_top_lower, is_left_edge: true, none_stroke: true}); |
|
129 | 129 | } else { |
|
130 | 130 | var todo_left = today_left; |
|
131 | 131 | var issue_todo = $("#task-todo-" + $(element).attr("id")); |
|
132 | 132 | if (issue_todo.size() > 0){ |
|
133 | 133 | todo_left = issue_todo.first().position().left; |
|
134 | 134 | } |
|
135 | 135 | arr.push({left: Math.min(today_left, todo_left), top: element_top_center}); |
|
136 | 136 | } |
|
137 | 137 | } |
|
138 | 138 | }); |
|
139 | 139 | return arr; |
|
140 | 140 | } |
|
141 | 141 | |
|
142 | 142 | function drawGanttProgressLines() { |
|
143 | 143 | var arr = getProgressLinesArray(); |
|
144 | 144 | var color = $("#today_line") |
|
145 | 145 | .css("border-left-color"); |
|
146 | 146 | var i; |
|
147 | 147 | for(i = 1 ; i < arr.length ; i++) { |
|
148 | 148 | if (!("none_stroke" in arr[i]) && |
|
149 | 149 | (!("is_right_edge" in arr[i - 1] && "is_right_edge" in arr[i]) && |
|
150 | 150 | !("is_left_edge" in arr[i - 1] && "is_left_edge" in arr[i])) |
|
151 | 151 | ) { |
|
152 | 152 | var x1 = (arr[i - 1].left == 0) ? 0 : arr[i - 1].left + draw_left; |
|
153 | 153 | var x2 = (arr[i].left == 0) ? 0 : arr[i].left + draw_left; |
|
154 | 154 | draw_gantt.path(["M", x1, arr[i - 1].top, |
|
155 | 155 | "L", x2, arr[i].top]) |
|
156 | 156 | .attr({stroke: color, "stroke-width": 2}); |
|
157 | 157 | } |
|
158 | 158 | } |
|
159 | 159 | } |
|
160 | 160 | |
|
161 | 161 | function drawGanttHandler() { |
|
162 | 162 | var folder = document.getElementById('gantt_draw_area'); |
|
163 | 163 | if(draw_gantt != null) |
|
164 | 164 | draw_gantt.clear(); |
|
165 | 165 | else |
|
166 | 166 | draw_gantt = Raphael(folder); |
|
167 | 167 | setDrawArea(); |
|
168 | 168 | if ($("#draw_progress_line").attr('checked')) |
|
169 | 169 | drawGanttProgressLines(); |
|
170 | 170 | if ($("#draw_rels").attr('checked')) |
|
171 | 171 | drawRelations(); |
|
172 | 172 | } |
General Comments 0
You need to be logged in to leave comments.
Login now