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