annotate public/javascripts/revision_graph.js @ 1478:5ca1f4a47171 bibplugin_db_migrations

Close obsolete branch bibplugin_db_migrations
author Chris Cannam
date Fri, 30 Nov 2012 14:40:50 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@909 1 var commits = chunk.commits,
Chris@909 2 comms = {},
Chris@909 3 pixelsX = [],
Chris@909 4 pixelsY = [],
Chris@909 5 mmax = Math.max,
Chris@909 6 max_rdmid = 0,
Chris@909 7 max_space = 0,
Chris@909 8 parents = {};
Chris@909 9 for (var i = 0, ii = commits.length; i < ii; i++) {
Chris@909 10 for (var j = 0, jj = commits[i].parents.length; j < jj; j++) {
Chris@909 11 parents[commits[i].parents[j][0]] = true;
Chris@909 12 }
Chris@909 13 max_rdmid = Math.max(max_rdmid, commits[i].rdmid);
Chris@909 14 max_space = Math.max(max_space, commits[i].space);
Chris@909 15 }
Chris@909 16
Chris@909 17 for (i = 0; i < ii; i++) {
Chris@909 18 if (commits[i].scmid in parents) {
Chris@909 19 commits[i].isParent = true;
Chris@909 20 }
Chris@909 21 comms[commits[i].scmid] = commits[i];
Chris@909 22 }
Chris@909 23 var colors = ["#000"];
Chris@909 24 for (var k = 0; k < max_space; k++) {
Chris@909 25 colors.push(Raphael.getColor());
Chris@909 26 }
Chris@909 27
Chris@909 28 function branchGraph(holder) {
Chris@909 29 var xstep = 20;
Chris@909 30 var ystep = $$('tr.changeset')[0].getHeight();
Chris@909 31 var ch, cw;
Chris@909 32 cw = max_space * xstep + xstep;
Chris@909 33 ch = max_rdmid * ystep + ystep;
Chris@909 34 var r = Raphael("holder", cw, ch),
Chris@909 35 top = r.set();
Chris@909 36 var cuday = 0, cumonth = "";
Chris@909 37
Chris@909 38 for (i = 0; i < ii; i++) {
Chris@909 39 var x, y;
Chris@909 40 y = 10 + ystep *(max_rdmid - commits[i].rdmid);
Chris@909 41 x = 3 + xstep * commits[i].space;
Chris@909 42 var stroke = "none";
Chris@909 43 r.circle(x, y, 3).attr({fill: colors[commits[i].space], stroke: stroke});
Chris@909 44 if (commits[i].refs != null && commits[i].refs != "") {
Chris@909 45 var longrefs = commits[i].refs
Chris@909 46 var shortrefs = commits[i].refs;
Chris@909 47 if (shortrefs.length > 15) {
Chris@909 48 shortrefs = shortrefs.substr(0,13) + "...";
Chris@909 49 }
Chris@909 50 var t = r.text(x+5,y+5,shortrefs).attr({font: "12px Fontin-Sans, Arial", fill: "#666",
Chris@909 51 title: longrefs, cursor: "pointer", rotation: "0"});
Chris@909 52
Chris@909 53 var textbox = t.getBBox();
Chris@909 54 t.translate(textbox.width / 2, textbox.height / -3);
Chris@909 55 }
Chris@909 56 for (var j = 0, jj = commits[i].parents.length; j < jj; j++) {
Chris@909 57 var c = comms[commits[i].parents[j][0]];
Chris@909 58 var p,arrow;
Chris@909 59 if (c) {
Chris@909 60 var cy, cx;
Chris@909 61 cy = 10 + ystep * (max_rdmid - c.rdmid),
Chris@909 62 cx = 3 + xstep * c.space;
Chris@909 63
Chris@909 64 if (c.space == commits[i].space) {
Chris@909 65 p = r.path("M" + x + "," + y + "L" + cx + "," + cy);
Chris@909 66 } else {
Chris@909 67 p = r.path(["M", x, y, "C",x,y,x, y+(cy-y)/2,x+(cx-x)/2, y+(cy-y)/2,
Chris@909 68 "C", x+(cx-x)/2,y+(cy-y)/2, cx, cy-(cy-y)/2, cx, cy]);
Chris@909 69 }
Chris@909 70 } else {
Chris@909 71 p = r.path("M" + x + "," + y + "L" + x + "," + ch);
Chris@909 72 }
Chris@909 73 p.attr({stroke: colors[commits[i].space], "stroke-width": 1.5});
Chris@909 74 }
Chris@909 75 (function (c, x, y) {
Chris@909 76 top.push(r.circle(x, y, 10).attr({fill: "#000", opacity: 0,
Chris@909 77 cursor: "pointer", href: commits[i].href})
Chris@909 78 .hover(function () {}, function () {})
Chris@909 79 );
Chris@909 80 }(commits[i], x, y));
Chris@909 81 }
Chris@909 82 top.toFront();
Chris@909 83 var hw = holder.offsetWidth,
Chris@909 84 hh = holder.offsetHeight,
Chris@909 85 drag,
Chris@909 86 dragger = function (e) {
Chris@909 87 if (drag) {
Chris@909 88 e = e || window.event;
Chris@909 89 holder.scrollLeft = drag.sl - (e.clientX - drag.x);
Chris@909 90 holder.scrollTop = drag.st - (e.clientY - drag.y);
Chris@909 91 }
Chris@909 92 };
Chris@909 93 holder.onmousedown = function (e) {
Chris@909 94 e = e || window.event;
Chris@909 95 drag = {x: e.clientX, y: e.clientY, st: holder.scrollTop, sl: holder.scrollLeft};
Chris@909 96 document.onmousemove = dragger;
Chris@909 97 };
Chris@909 98 document.onmouseup = function () {
Chris@909 99 drag = false;
Chris@909 100 document.onmousemove = null;
Chris@909 101 };
Chris@909 102 holder.scrollLeft = cw;
Chris@909 103 };
Chris@909 104
Chris@909 105 Raphael.fn.popupit = function (x, y, set, dir, size) {
Chris@909 106 dir = dir == null ? 2 : dir;
Chris@909 107 size = size || 5;
Chris@909 108 x = Math.round(x);
Chris@909 109 y = Math.round(y);
Chris@909 110 var bb = set.getBBox(),
Chris@909 111 w = Math.round(bb.width / 2),
Chris@909 112 h = Math.round(bb.height / 2),
Chris@909 113 dx = [0, w + size * 2, 0, -w - size * 2],
Chris@909 114 dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
Chris@909 115 p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0),
Chris@909 116 0, "a", size, size, 0, 0, 1, -size, -size,
Chris@909 117 "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0,
Chris@909 118 -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
Chris@909 119 "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0),
Chris@909 120 0, "a", size, size, 0, 0, 1, size, size,
Chris@909 121 "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0,
Chris@909 122 mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
Chris@909 123 "l", -mmax(w - size, 0), 0, "z"].join(","),
Chris@909 124 xy = [{x: x, y: y + size * 2 + h},
Chris@909 125 {x: x - size * 2 - w, y: y},
Chris@909 126 {x: x, y: y - size * 2 - h},
Chris@909 127 {x: x + size * 2 + w, y: y}]
Chris@909 128 [dir];
Chris@909 129 set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
Chris@909 130 return this.set(this.path(p).attr({fill: "#234", stroke: "none"})
Chris@909 131 .insertBefore(set.node ? set : set[0]), set);
Chris@909 132 };
Chris@909 133
Chris@909 134 Raphael.fn.popup = function (x, y, text, dir, size) {
Chris@909 135 dir = dir == null ? 2 : dir > 3 ? 3 : dir;
Chris@909 136 size = size || 5;
Chris@909 137 text = text || "$9.99";
Chris@909 138 var res = this.set(),
Chris@909 139 d = 3;
Chris@909 140 res.push(this.path().attr({fill: "#000", stroke: "#000"}));
Chris@909 141 res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
Chris@909 142 res.update = function (X, Y, withAnimation) {
Chris@909 143 X = X || x;
Chris@909 144 Y = Y || y;
Chris@909 145 var bb = this[1].getBBox(),
Chris@909 146 w = bb.width / 2,
Chris@909 147 h = bb.height / 2,
Chris@909 148 dx = [0, w + size * 2, 0, -w - size * 2],
Chris@909 149 dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
Chris@909 150 p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size,
Chris@909 151 -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
Chris@909 152 "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size,
Chris@909 153 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
Chris@909 154 "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0),
Chris@909 155 0, "a", size, size, 0, 0, 1, size, size,
Chris@909 156 "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0,
Chris@909 157 mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
Chris@909 158 "l", -mmax(w - size, 0), 0, "z"].join(","),
Chris@909 159 xy = [{x: X, y: Y + size * 2 + h},
Chris@909 160 {x: X - size * 2 - w, y: Y},
Chris@909 161 {x: X, y: Y - size * 2 - h},
Chris@909 162 {x: X + size * 2 + w, y: Y}]
Chris@909 163 [dir];
Chris@909 164 xy.path = p;
Chris@909 165 if (withAnimation) {
Chris@909 166 this.animate(xy, 500, ">");
Chris@909 167 } else {
Chris@909 168 this.attr(xy);
Chris@909 169 }
Chris@909 170 return this;
Chris@909 171 };
Chris@909 172 return res.update(x, y);
Chris@909 173 };