changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > infra > home / annotate templates/static/mercurial.js

changeset 53: d25f982fb8a6
author: Richard Westhaver <ellis@rwest.io>
date: Sat, 20 Jul 2024 22:31:54 -0400
permissions: -rw-r--r--
description: init vc
53
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 // mercurial.js - JavaScript utility functions
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 //
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 // Rendering of branch DAGs on the client side
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 // Display of elapsed time
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 // Show or hide diffstat
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 //
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 // Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 // Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 //
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 // derived from code written by Scott James Remnant <scott@ubuntu.com>
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
 // Copyright 2005 Canonical Ltd.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
 //
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
 // This software may be used and distributed according to the terms
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
 // of the GNU General Public License, incorporated herein by reference.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
 var colors = [
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
 	[ 1.0, 0.0, 0.0 ],
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
18
 	[ 1.0, 1.0, 0.0 ],
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
 	[ 0.0, 1.0, 0.0 ],
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
 	[ 0.0, 1.0, 1.0 ],
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
 	[ 0.0, 0.0, 1.0 ],
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
 	[ 1.0, 0.0, 1.0 ]
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
 ];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
24
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
 function Graph() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
26
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
27
 	this.canvas = document.getElementById('graph');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
 	this.ctx = this.canvas.getContext('2d');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
29
 	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
30
 	this.ctx.fillStyle = 'rgb(0, 0, 0)';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
31
 	this.bg = [0, 4];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
 	this.cell = [2, 0];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
 	this.columns = 0;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
34
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
35
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
36
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
37
 Graph.prototype = {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
38
 	reset: function() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
 		this.bg = [0, 4];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 		this.cell = [2, 0];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
 		this.columns = 0;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
42
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
43
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
 	scale: function(height) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
 		this.bg_height = height;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
 		this.box_size = Math.floor(this.bg_height / 1.2);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
47
 		this.cell_height = this.box_size;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
48
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
49
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
50
 	setColor: function(color, bg, fg) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
51
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
52
 		// Set the colour.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
53
 		//
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
54
 		// If color is a string, expect an hexadecimal RGB
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
55
 		// value and apply it unchanged. If color is a number,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
56
 		// pick a distinct colour based on an internal wheel;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
57
 		// the bg parameter provides the value that should be
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
58
 		// assigned to the 'zero' colours and the fg parameter
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
59
 		// provides the multiplier that should be applied to
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
60
 		// the foreground colours.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
61
 		var s;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
62
 		if(typeof color === "string") {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
63
 			s = "#" + color;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
64
 		} else { //typeof color === "number"
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
65
 			color %= colors.length;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
66
 			var red = (colors[color][0] * fg) || bg;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
67
 			var green = (colors[color][1] * fg) || bg;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
68
 			var blue = (colors[color][2] * fg) || bg;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
69
 			red = Math.round(red * 255);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
70
 			green = Math.round(green * 255);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
71
 			blue = Math.round(blue * 255);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
72
 			s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
73
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
74
 		this.ctx.strokeStyle = s;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
75
 		this.ctx.fillStyle = s;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
76
 		return s;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
77
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
78
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
79
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
80
 	edge: function(x0, y0, x1, y1, color, width) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
81
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
82
 		this.setColor(color, 0.0, 0.65);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
83
 		if(width >= 0)
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
84
 			 this.ctx.lineWidth = width;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
85
 		this.ctx.beginPath();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
86
 		this.ctx.moveTo(x0, y0);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
87
 		this.ctx.lineTo(x1, y1);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
88
 		this.ctx.stroke();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
89
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
90
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
91
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
92
 	graphNodeCurrent: function(x, y, radius) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
93
 		this.ctx.lineWidth = 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
94
 		this.ctx.beginPath();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
95
 		this.ctx.arc(x, y, radius * 1.75, 0, Math.PI * 2, true);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
96
 		this.ctx.stroke();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
97
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
98
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
99
 	graphNodeClosing: function(x, y, radius) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
100
 		this.ctx.fillRect(x - radius, y - 1.5, radius * 2, 3);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
101
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
102
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
103
 	graphNodeUnstable: function(x, y, radius) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
104
 		var x30 = radius * Math.cos(Math.PI / 6);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
105
 		var y30 = radius * Math.sin(Math.PI / 6);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
106
 		this.ctx.lineWidth = 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
107
 		this.ctx.beginPath();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
108
 		this.ctx.moveTo(x, y - radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
109
 		this.ctx.lineTo(x, y + radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
110
 		this.ctx.moveTo(x - x30, y - y30);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
111
 		this.ctx.lineTo(x + x30, y + y30);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
112
 		this.ctx.moveTo(x - x30, y + y30);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
113
 		this.ctx.lineTo(x + x30, y - y30);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
114
 		this.ctx.stroke();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
115
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
116
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
117
 	graphNodeObsolete: function(x, y, radius) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
118
 		var p45 = radius * Math.cos(Math.PI / 4);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
119
 		this.ctx.lineWidth = 3;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
120
 		this.ctx.beginPath();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
121
 		this.ctx.moveTo(x - p45, y - p45);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
122
 		this.ctx.lineTo(x + p45, y + p45);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
123
 		this.ctx.moveTo(x - p45, y + p45);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
124
 		this.ctx.lineTo(x + p45, y - p45);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
125
 		this.ctx.stroke();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
126
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
127
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
128
 	graphNodeNormal: function(x, y, radius) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
129
 		this.ctx.beginPath();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
130
 		this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
131
 		this.ctx.fill();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
132
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
133
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
134
 	vertex: function(x, y, radius, color, parity, cur) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
135
 		this.ctx.save();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
136
 		this.setColor(color, 0.25, 0.75);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
137
 		if (cur.graphnode[0] === '@') {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
138
 			this.graphNodeCurrent(x, y, radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
139
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
140
 		switch (cur.graphnode.substr(-1)) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
141
 			case '_':
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
142
 				this.graphNodeClosing(x, y, radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
143
 				break;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
144
 			case '*':
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
145
 				this.graphNodeUnstable(x, y, radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
146
 				break;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
147
 			case 'x':
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
148
 				this.graphNodeObsolete(x, y, radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
149
 				break;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
150
 			default:
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
151
 				this.graphNodeNormal(x, y, radius);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
152
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
153
 		this.ctx.restore();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
154
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
155
 		var left = (this.bg_height - this.box_size) + (this.columns + 1) * this.box_size;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
156
 		var item = document.querySelector('[data-node="' + cur.node + '"]');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
157
 		if (item) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
158
 			item.style.paddingLeft = left + 'px';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
159
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
160
 	},
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
161
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
162
 	render: function(data) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
163
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
164
 		var i, j, cur, line, start, end, color, x, y, x0, y0, x1, y1, column, radius;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
165
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
166
 		var cols = 0;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
167
 		for (i = 0; i < data.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
168
 			cur = data[i];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
169
 			for (j = 0; j < cur.edges.length; j++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
170
 				line = cur.edges[j];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
171
 				cols = Math.max(cols, line[0], line[1]);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
172
 			}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
173
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
174
 		this.canvas.width = (cols + 1) * this.bg_height;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
175
 		this.canvas.height = (data.length + 1) * this.bg_height - 27;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
176
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
177
 		for (i = 0; i < data.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
178
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
179
 			var parity = i % 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
180
 			this.cell[1] += this.bg_height;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
181
 			this.bg[1] += this.bg_height;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
182
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
183
 			cur = data[i];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
184
 			var fold = false;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
185
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
186
 			var prevWidth = this.ctx.lineWidth;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
187
 			for (j = 0; j < cur.edges.length; j++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
188
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
189
 				line = cur.edges[j];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
190
 				start = line[0];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
191
 				end = line[1];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
192
 				color = line[2];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
193
 				var width = line[3];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
194
 				if(width < 0)
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
195
 					 width = prevWidth;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
196
 				var branchcolor = line[4];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
197
 				if(branchcolor)
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
198
 					color = branchcolor;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
199
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
200
 				if (end > this.columns || start > this.columns) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
201
 					this.columns += 1;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
202
 				}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
203
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
204
 				if (start === this.columns && start > end) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
205
 					fold = true;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
206
 				}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
207
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
208
 				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
209
 				y0 = this.bg[1] - this.bg_height / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
210
 				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
211
 				y1 = this.bg[1] + this.bg_height / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
212
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
213
 				this.edge(x0, y0, x1, y1, color, width);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
214
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
215
 			}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
216
 			this.ctx.lineWidth = prevWidth;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
217
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
218
 			// Draw the revision node in the right column
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
219
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
220
 			column = cur.vertex[0];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
221
 			color = cur.vertex[1];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
222
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
223
 			radius = this.box_size / 8;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
224
 			x = this.cell[0] + this.box_size * column + this.box_size / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
225
 			y = this.bg[1] - this.bg_height / 2;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
226
 			this.vertex(x, y, radius, color, parity, cur);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
227
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
228
 			if (fold) this.columns -= 1;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
229
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
230
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
231
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
232
 	}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
233
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
234
 };
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
235
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
236
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
237
 function process_dates(parentSelector){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
238
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
239
 	// derived from code from mercurial/templatefilter.py
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
240
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
241
 	var scales = {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
242
 		'year':  365 * 24 * 60 * 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
243
 		'month':  30 * 24 * 60 * 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
244
 		'week':    7 * 24 * 60 * 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
245
 		'day':    24 * 60 * 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
246
 		'hour':   60 * 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
247
 		'minute': 60,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
248
 		'second': 1
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
249
 	};
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
250
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
251
 	function format(count, string){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
252
 		var ret = count + ' ' + string;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
253
 		if (count > 1){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
254
 			ret = ret + 's';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
255
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
256
  		return ret;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
257
  	}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
258
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
259
 	function shortdate(date){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
260
 		var ret = date.getFullYear() + '-';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
261
 		// getMonth() gives a 0-11 result
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
262
 		var month = date.getMonth() + 1;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
263
 		if (month <= 9){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
264
 			ret += '0' + month;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
265
 		} else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
266
 			ret += month;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
267
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
268
 		ret += '-';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
269
 		var day = date.getDate();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
270
 		if (day <= 9){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
271
 			ret += '0' + day;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
272
 		} else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
273
 			ret += day;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
274
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
275
 		return ret;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
276
 	}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
277
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
278
  	function age(datestr){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
279
  		var now = new Date();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
280
  		var once = new Date(datestr);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
281
 		if (isNaN(once.getTime())){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
282
 			// parsing error
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
283
 			return datestr;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
284
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
285
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
286
 		var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
287
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
288
 		var future = false;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
289
 		if (delta < 0){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
290
 			future = true;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
291
 			delta = -delta;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
292
 			if (delta > (30 * scales.year)){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
293
 				return "in the distant future";
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
294
 			}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
295
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
296
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
297
 		if (delta > (2 * scales.year)){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
298
 			return shortdate(once);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
299
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
300
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
301
 		for (var unit in scales){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
302
 			if (!scales.hasOwnProperty(unit)) { continue; }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
303
 			var s = scales[unit];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
304
 			var n = Math.floor(delta / s);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
305
 			if ((n >= 2) || (s === 1)){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
306
 				if (future){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
307
 					return format(n, unit) + ' from now';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
308
 				} else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
309
 					return format(n, unit) + ' ago';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
310
 				}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
311
 			}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
312
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
313
 	}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
314
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
315
 	var nodes = document.querySelectorAll((parentSelector || '') + ' .age');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
316
 	var dateclass = new RegExp('\\bdate\\b');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
317
 	for (var i=0; i<nodes.length; ++i){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
318
 		var node = nodes[i];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
319
 		var classes = node.className;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
320
 		var agevalue = age(node.textContent);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
321
 		if (dateclass.test(classes)){
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
322
 			// We want both: date + (age)
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
323
 			node.textContent += ' ('+agevalue+')';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
324
 		} else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
325
 			node.title = node.textContent;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
326
 			node.textContent = agevalue;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
327
 		}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
328
 	}
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
329
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
330
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
331
 function toggleDiffstat(event) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
332
     var curdetails = document.getElementById('diffstatdetails').style.display;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
333
     var curexpand = curdetails === 'none' ? 'inline' : 'none';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
334
     document.getElementById('diffstatdetails').style.display = curexpand;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
335
     document.getElementById('diffstatexpand').style.display = curdetails;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
336
     event.preventDefault();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
337
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
338
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
339
 function toggleLinewrap(event) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
340
     function getLinewrap() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
341
         var nodes = document.getElementsByClassName('sourcelines');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
342
         // if there are no such nodes, error is thrown here
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
343
         return nodes[0].classList.contains('wrap');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
344
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
345
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
346
     function setLinewrap(enable) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
347
         var nodes = document.getElementsByClassName('sourcelines');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
348
         var i;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
349
         for (i = 0; i < nodes.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
350
             if (enable) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
351
                 nodes[i].classList.add('wrap');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
352
             } else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
353
                 nodes[i].classList.remove('wrap');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
354
             }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
355
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
356
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
357
         var links = document.getElementsByClassName('linewraplink');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
358
         for (i = 0; i < links.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
359
             links[i].innerHTML = enable ? 'on' : 'off';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
360
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
361
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
362
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
363
     setLinewrap(!getLinewrap());
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
364
     event.preventDefault();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
365
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
366
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
367
 function format(str, replacements) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
368
     return str.replace(/%(\w+)%/g, function(match, p1) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
369
         return String(replacements[p1]);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
370
     });
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
371
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
372
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
373
 function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
374
     var xhr = new XMLHttpRequest();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
375
     xhr.onreadystatechange = function() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
376
         if (xhr.readyState === 4) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
377
             try {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
378
                 if (xhr.status === 200) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
379
                     onsuccess(xhr.responseText);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
380
                 } else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
381
                     throw 'server error';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
382
                 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
383
             } catch (e) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
384
                 onerror(e);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
385
             } finally {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
386
                 oncomplete();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
387
             }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
388
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
389
     };
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
390
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
391
     xhr.open(method, url);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
392
     xhr.overrideMimeType("text/xhtml; charset=" + document.characterSet.toLowerCase());
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
393
     xhr.send();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
394
     onstart();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
395
     return xhr;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
396
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
397
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
398
 function removeByClassName(className) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
399
     var nodes = document.getElementsByClassName(className);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
400
     while (nodes.length) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
401
         nodes[0].parentNode.removeChild(nodes[0]);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
402
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
403
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
404
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
405
 function docFromHTML(html) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
406
     var doc = document.implementation.createHTMLDocument('');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
407
     doc.documentElement.innerHTML = html;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
408
     return doc;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
409
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
410
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
411
 function appendFormatHTML(element, formatStr, replacements) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
412
     element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
413
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
414
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
415
 function adoptChildren(from, to) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
416
     var nodes = from.children;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
417
     var curClass = 'c' + Date.now();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
418
     while (nodes.length) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
419
         var node = nodes[0];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
420
         node = document.adoptNode(node);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
421
         node.classList.add(curClass);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
422
         to.appendChild(node);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
423
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
424
     process_dates('.' + curClass);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
425
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
426
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
427
 function ajaxScrollInit(urlFormat,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
428
                         nextPageVar,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
429
                         nextPageVarGet,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
430
                         containerSelector,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
431
                         messageFormat,
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
432
                         mode) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
433
     var updateInitiated = false;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
434
     var container = document.querySelector(containerSelector);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
435
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
436
     function scrollHandler() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
437
         if (updateInitiated) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
438
             return;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
439
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
440
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
441
         var scrollHeight = document.documentElement.scrollHeight;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
442
         var clientHeight = document.documentElement.clientHeight;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
443
         var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
444
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
445
         if (scrollHeight - (scrollTop + clientHeight) < 50) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
446
             updateInitiated = true;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
447
             removeByClassName('scroll-loading-error');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
448
             container.lastElementChild.classList.add('scroll-separator');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
449
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
450
             if (!nextPageVar) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
451
                 var message = {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
452
                     'class': 'scroll-loading-info',
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
453
                     text: 'No more entries'
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
454
                 };
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
455
                 appendFormatHTML(container, messageFormat, message);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
456
                 return;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
457
             }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
458
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
459
             makeRequest(
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
460
                 format(urlFormat, {next: nextPageVar}),
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
461
                 'GET',
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
462
                 function onstart() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
463
                     var message = {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
464
                         'class': 'scroll-loading',
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
465
                         text: 'Loading...'
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
466
                     };
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
467
                     appendFormatHTML(container, messageFormat, message);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
468
                 },
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
469
                 function onsuccess(htmlText) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
470
                     var doc = docFromHTML(htmlText);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
471
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
472
                     if (mode === 'graph') {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
473
                         var graph = window.graph;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
474
                         var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
475
                         var data = JSON.parse(dataStr);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
476
                         graph.reset();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
477
                         adoptChildren(doc.querySelector('#graphnodes'), container.querySelector('#graphnodes'));
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
478
                         graph.render(data);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
479
                     } else {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
480
                         adoptChildren(doc.querySelector(containerSelector), container);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
481
                     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
482
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
483
                     nextPageVar = nextPageVarGet(htmlText);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
484
                 },
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
485
                 function onerror(errorText) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
486
                     var message = {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
487
                         'class': 'scroll-loading-error',
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
488
                         text: 'Error: ' + errorText
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
489
                     };
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
490
                     appendFormatHTML(container, messageFormat, message);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
491
                 },
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
492
                 function oncomplete() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
493
                     removeByClassName('scroll-loading');
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
494
                     updateInitiated = false;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
495
                     scrollHandler();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
496
                 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
497
             );
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
498
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
499
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
500
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
501
     window.addEventListener('scroll', scrollHandler);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
502
     window.addEventListener('resize', scrollHandler);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
503
     scrollHandler();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
504
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
505
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
506
 function renderDiffOptsForm() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
507
     // We use URLSearchParams for query string manipulation. Old browsers don't
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
508
     // support this API.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
509
     if (!("URLSearchParams" in window)) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
510
         return;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
511
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
512
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
513
     var form = document.getElementById("diffopts-form");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
514
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
515
     var KEYS = [
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
516
         "ignorews",
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
517
         "ignorewsamount",
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
518
         "ignorewseol",
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
519
         "ignoreblanklines",
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
520
     ];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
521
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
522
     var urlParams = new window.URLSearchParams(window.location.search);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
523
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
524
     function updateAndRefresh(e) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
525
         var checkbox = e.target;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
526
         var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
527
         urlParams.set(name, checkbox.checked ? "1" : "0");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
528
         window.location.search = urlParams.toString();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
529
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
530
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
531
     var allChecked = form.getAttribute("data-ignorews") === "1";
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
532
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
533
     for (var i = 0; i < KEYS.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
534
         var key = KEYS[i];
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
535
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
536
         var checkbox = document.getElementById(key + "-checkbox");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
537
         if (!checkbox) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
538
             continue;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
539
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
540
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
541
         var currentValue = form.getAttribute("data-" + key);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
542
         checkbox.checked = currentValue !== "0";
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
543
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
544
         // ignorews implies ignorewsamount and ignorewseol.
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
545
         if (allChecked && (key === "ignorewsamount" || key === "ignorewseol")) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
546
             checkbox.checked = true;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
547
             checkbox.disabled = true;
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
548
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
549
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
550
         checkbox.addEventListener("change", updateAndRefresh, false);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
551
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
552
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
553
     form.style.display = 'block';
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
554
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
555
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
556
 function addDiffStatToggle() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
557
     var els = document.getElementsByClassName("diffstattoggle");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
558
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
559
     for (var i = 0; i < els.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
560
         els[i].addEventListener("click", toggleDiffstat, false);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
561
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
562
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
563
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
564
 function addLineWrapToggle() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
565
     var els = document.getElementsByClassName("linewraptoggle");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
566
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
567
     for (var i = 0; i < els.length; i++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
568
         var nodes = els[i].getElementsByClassName("linewraplink");
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
569
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
570
         for (var j = 0; j < nodes.length; j++) {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
571
             nodes[j].addEventListener("click", toggleLinewrap, false);
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
572
         }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
573
     }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
574
 }
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
575
 
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
576
 document.addEventListener('DOMContentLoaded', function() {
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
577
    process_dates();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
578
    addDiffStatToggle();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
579
    addLineWrapToggle();
d25f982fb8a6 init vc
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
580
 }, false);