annotate public/javascripts/gantt.js @ 1628:9c5f8e24dadc live tip

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