mercurial/templates/static/mercurial.js
author Anton Shestakov <av6@dwimlabs.net>
Wed, 06 Dec 2017 11:59:19 +0800
changeset 35253 c2e2437f2b2e
parent 35218 d61f2a3d5e53
child 35254 9c99541e3d56
permissions -rw-r--r--
hgweb: remove unused Graph.cur property It was introduced in 0dba955c2636, but was already unused. I missed it in e46f0b653002.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     1
// mercurial.js - JavaScript utility functions
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     2
//
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     3
// Rendering of branch DAGs on the client side
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     4
// Display of elapsed time
14571
17c0cb1045e5 paper, coal: display diffstat on the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents: 14046
diff changeset
     5
// Show or hide diffstat
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     6
//
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     7
// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     8
// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
     9
//
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    10
// derived from code written by Scott James Remnant <scott@ubuntu.com>
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    11
// Copyright 2005 Canonical Ltd.
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    12
//
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    13
// This software may be used and distributed according to the terms
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    14
// of the GNU General Public License, incorporated herein by reference.
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    15
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    16
var colors = [
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    17
	[ 1.0, 0.0, 0.0 ],
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    18
	[ 1.0, 1.0, 0.0 ],
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    19
	[ 0.0, 1.0, 0.0 ],
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    20
	[ 0.0, 1.0, 1.0 ],
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    21
	[ 0.0, 0.0, 1.0 ],
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    22
	[ 1.0, 0.0, 1.0 ]
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    23
];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    24
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    25
function Graph() {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    26
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    27
	this.canvas = document.getElementById('graph');
17694
fa714f3ed298 hgweb: change IE canvas test (issue3639)
Matt Mackall <mpm@selenic.com>
parents: 16138
diff changeset
    28
	if (window.G_vmlCanvasManager) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    29
	this.ctx = this.canvas.getContext('2d');
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    30
	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    31
	this.ctx.fillStyle = 'rgb(0, 0, 0)';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    32
	this.bg = [0, 4];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    33
	this.cell = [2, 0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    34
	this.columns = 0;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    35
19780
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    36
	this.reset = function() {
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    37
		this.bg = [0, 4];
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    38
		this.cell = [2, 0];
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    39
		this.columns = 0;
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    40
		document.getElementById('nodebgs').innerHTML = '';
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    41
		document.getElementById('graphnodes').innerHTML = '';
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
    42
	};
19780
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
    43
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    44
	this.scale = function(height) {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    45
		this.bg_height = height;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    46
		this.box_size = Math.floor(this.bg_height / 1.2);
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    47
		this.cell_height = this.box_size;
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
    48
	};
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    49
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    50
	this.setColor = function(color, bg, fg) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    51
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    52
		// Set the colour.
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    53
		//
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    54
		// If color is a string, expect an hexadecimal RGB
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    55
		// value and apply it unchanged. If color is a number,
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    56
		// pick a distinct colour based on an internal wheel;
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    57
		// the bg parameter provides the value that should be
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    58
		// assigned to the 'zero' colours and the fg parameter
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    59
		// provides the multiplier that should be applied to
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    60
		// the foreground colours.
16130
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    61
		var s;
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
    62
		if(typeof color === "string") {
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    63
			s = "#" + color;
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
    64
		} else { //typeof color === "number"
16130
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    65
			color %= colors.length;
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    66
			var red = (colors[color][0] * fg) || bg;
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    67
			var green = (colors[color][1] * fg) || bg;
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    68
			var blue = (colors[color][2] * fg) || bg;
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    69
			red = Math.round(red * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    70
			green = Math.round(green * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    71
			blue = Math.round(blue * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    72
			s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
    73
		}
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    74
		this.ctx.strokeStyle = s;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    75
		this.ctx.fillStyle = s;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    76
		return s;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    77
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
    78
	};
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    79
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    80
	this.edge = function(x0, y0, x1, y1, color, width) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    81
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    82
		this.setColor(color, 0.0, 0.65);
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    83
		if(width >= 0)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
    84
			 this.ctx.lineWidth = width;
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    85
		this.ctx.beginPath();
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    86
		this.ctx.moveTo(x0, y0);
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    87
		this.ctx.lineTo(x1, y1);
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    88
		this.ctx.stroke();
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    89
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
    90
	};
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
    91
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    92
	this.render = function(data) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    93
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    94
		var backgrounds = '';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
    95
		var nodedata = '';
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
    96
		var line, start, end, color, x, y, x0, y0, x1, y1, column, radius;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    97
35158
241da2de0e9f hgweb: properly iterate over arrays and objects in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35157
diff changeset
    98
		for (var i = 0; i < data.length; i++) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
    99
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   100
			var parity = i % 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   101
			this.cell[1] += this.bg_height;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   102
			this.bg[1] += this.bg_height;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   103
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   104
			var cur = data[i];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   105
			var fold = false;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   106
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   107
			var prevWidth = this.ctx.lineWidth;
35218
d61f2a3d5e53 hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35216
diff changeset
   108
			for (var j = 0; j < cur.edges.length; j++) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   109
35218
d61f2a3d5e53 hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35216
diff changeset
   110
				line = cur.edges[j];
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   111
				start = line[0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   112
				end = line[1];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   113
				color = line[2];
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   114
				var width = line[3];
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   115
				if(width < 0)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   116
					 width = prevWidth;
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   117
				var branchcolor = line[4];
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   118
				if(branchcolor)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   119
					color = branchcolor;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   120
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   121
				if (end > this.columns || start > this.columns) {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   122
					this.columns += 1;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   123
				}
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   124
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   125
				if (start === this.columns && start > end) {
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   126
					fold = true;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   127
				}
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   128
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   129
				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   130
				y0 = this.bg[1] - this.bg_height / 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   131
				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   132
				y1 = this.bg[1] + this.bg_height / 2;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   133
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   134
				this.edge(x0, y0, x1, y1, color, width);
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   135
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   136
			}
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
   137
			this.ctx.lineWidth = prevWidth;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   138
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   139
			// Draw the revision node in the right column
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   140
35218
d61f2a3d5e53 hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35216
diff changeset
   141
			column = cur.vertex[0];
d61f2a3d5e53 hgweb: only include graph-related data in jsdata variable on /graph pages (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35216
diff changeset
   142
			color = cur.vertex[1];
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   143
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   144
			radius = this.box_size / 8;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   145
			x = this.cell[0] + this.box_size * column + this.box_size / 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   146
			y = this.bg[1] - this.bg_height / 2;
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   147
			var add = this.vertex(x, y, radius, color, parity, cur);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   148
			backgrounds += add[0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   149
			nodedata += add[1];
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   150
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   151
			if (fold) this.columns -= 1;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   152
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   153
		}
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   154
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   155
		document.getElementById('nodebgs').innerHTML += backgrounds;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   156
		document.getElementById('graphnodes').innerHTML += nodedata;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
   157
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   158
	};
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   159
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   160
}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   161
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   162
19858
4a8c5a51f7a1 hgweb: add parentSelector argument to process_dates
Alexander Plavin <alexander@plav.in>
parents: 19857
diff changeset
   163
function process_dates(parentSelector){
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   164
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   165
	// derived from code from mercurial/templatefilter.py
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   166
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   167
	var scales = {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   168
		'year':  365 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   169
		'month':  30 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   170
		'week':    7 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   171
		'day':    24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   172
		'hour':   60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   173
		'minute': 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   174
		'second': 1
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   175
	};
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   176
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   177
	function format(count, string){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   178
		var ret = count + ' ' + string;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   179
		if (count > 1){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   180
			ret = ret + 's';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   181
		}
14881
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   182
 		return ret;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   183
 	}
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   184
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   185
	function shortdate(date){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   186
		var ret = date.getFullYear() + '-';
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   187
		// getMonth() gives a 0-11 result
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   188
		var month = date.getMonth() + 1;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   189
		if (month <= 9){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   190
			ret += '0' + month;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   191
		} else {
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   192
			ret += month;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   193
		}
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   194
		ret += '-';
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   195
		var day = date.getDate();
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   196
		if (day <= 9){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   197
			ret += '0' + day;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   198
		} else {
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   199
			ret += day;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   200
		}
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   201
		return ret;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   202
	}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   203
14881
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   204
 	function age(datestr){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   205
 		var now = new Date();
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   206
 		var once = new Date(datestr);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   207
		if (isNaN(once.getTime())){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   208
			// parsing error
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   209
			return datestr;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   210
		}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   211
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   212
		var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   213
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   214
		var future = false;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   215
		if (delta < 0){
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   216
			future = true;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   217
			delta = -delta;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   218
			if (delta > (30 * scales.year)){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   219
				return "in the distant future";
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   220
			}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   221
		}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   222
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   223
		if (delta > (2 * scales.year)){
14881
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
   224
			return shortdate(once);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   225
		}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   226
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   227
		for (var unit in scales){
35158
241da2de0e9f hgweb: properly iterate over arrays and objects in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35157
diff changeset
   228
			if (!scales.hasOwnProperty(unit)) { continue; }
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   229
			var s = scales[unit];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   230
			var n = Math.floor(delta / s);
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   231
			if ((n >= 2) || (s === 1)){
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   232
				if (future){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   233
					return format(n, unit) + ' from now';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   234
				} else {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   235
					return format(n, unit) + ' ago';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   236
				}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   237
			}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   238
		}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   239
	}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   240
19858
4a8c5a51f7a1 hgweb: add parentSelector argument to process_dates
Alexander Plavin <alexander@plav.in>
parents: 19857
diff changeset
   241
	var nodes = document.querySelectorAll((parentSelector || '') + ' .age');
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   242
	var dateclass = new RegExp('\\bdate\\b');
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   243
	for (var i=0; i<nodes.length; ++i){
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   244
		var node = nodes[i];
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   245
		var classes = node.className;
19857
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   246
		var agevalue = age(node.textContent);
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   247
		if (dateclass.test(classes)){
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   248
			// We want both: date + (age)
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   249
			node.textContent += ' ('+agevalue+')';
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   250
		} else {
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   251
			node.title = node.textContent;
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
   252
			node.textContent = agevalue;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   253
		}
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
   254
	}
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
   255
}
14571
17c0cb1045e5 paper, coal: display diffstat on the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents: 14046
diff changeset
   256
19428
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
   257
function toggleDiffstat() {
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
   258
    var curdetails = document.getElementById('diffstatdetails').style.display;
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   259
    var curexpand = curdetails === 'none' ? 'inline' : 'none';
19428
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
   260
    document.getElementById('diffstatdetails').style.display = curexpand;
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
   261
    document.getElementById('diffstatexpand').style.display = curdetails;
14571
17c0cb1045e5 paper, coal: display diffstat on the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents: 14046
diff changeset
   262
}
19430
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   263
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   264
function toggleLinewrap() {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   265
    function getLinewrap() {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   266
        var nodes = document.getElementsByClassName('sourcelines');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   267
        // if there are no such nodes, error is thrown here
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   268
        return nodes[0].classList.contains('wrap');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   269
    }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   270
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   271
    function setLinewrap(enable) {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   272
        var nodes = document.getElementsByClassName('sourcelines');
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   273
        var i;
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   274
        for (i = 0; i < nodes.length; i++) {
19430
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   275
            if (enable) {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   276
                nodes[i].classList.add('wrap');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   277
            } else {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   278
                nodes[i].classList.remove('wrap');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   279
            }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   280
        }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   281
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   282
        var links = document.getElementsByClassName('linewraplink');
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   283
        for (i = 0; i < links.length; i++) {
19430
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   284
            links[i].innerHTML = enable ? 'on' : 'off';
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   285
        }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   286
    }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   287
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   288
    setLinewrap(!getLinewrap());
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
   289
}
19739
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   290
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   291
function format(str, replacements) {
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   292
    return str.replace(/%(\w+)%/g, function(match, p1) {
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   293
        return String(replacements[p1]);
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   294
    });
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
   295
}
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   296
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   297
function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   298
    var xhr = new XMLHttpRequest();
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   299
    xhr.onreadystatechange = function() {
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   300
        if (xhr.readyState === 4) {
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   301
            try {
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   302
                if (xhr.status === 200) {
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   303
                    onsuccess(xhr.responseText);
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   304
                } else {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   305
                    throw 'server error';
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   306
                }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   307
            } catch (e) {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   308
                onerror(e);
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   309
            } finally {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   310
                oncomplete();
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   311
            }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   312
        }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   313
    };
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   314
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   315
    xhr.open(method, url);
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   316
    xhr.overrideMimeType("text/xhtml; charset=" + document.characterSet.toLowerCase());
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   317
    xhr.send();
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   318
    onstart();
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
   319
    return xhr;
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
   320
}
19741
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   321
19742
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   322
function removeByClassName(className) {
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   323
    var nodes = document.getElementsByClassName(className);
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   324
    while (nodes.length) {
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   325
        nodes[0].parentNode.removeChild(nodes[0]);
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   326
    }
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   327
}
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
   328
19741
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   329
function docFromHTML(html) {
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   330
    var doc = document.implementation.createHTMLDocument('');
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   331
    doc.documentElement.innerHTML = html;
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   332
    return doc;
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
   333
}
19743
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
   334
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
   335
function appendFormatHTML(element, formatStr, replacements) {
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
   336
    element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
   337
}
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   338
35216
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   339
function adoptChildren(from, to) {
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   340
    var nodes = from.children;
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   341
    var curClass = 'c' + Date.now();
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   342
    while (nodes.length) {
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   343
        var node = nodes[0];
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   344
        node = document.adoptNode(node);
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   345
        node.classList.add(curClass);
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   346
        to.appendChild(node);
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   347
    }
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   348
    process_dates('.' + curClass);
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   349
}
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   350
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   351
function ajaxScrollInit(urlFormat,
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
   352
                        nextPageVar,
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
   353
                        nextPageVarGet,
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   354
                        containerSelector,
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   355
                        messageFormat,
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   356
                        mode) {
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   357
    var updateInitiated = false;
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   358
    var container = document.querySelector(containerSelector);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   359
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   360
    function scrollHandler() {
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   361
        if (updateInitiated) {
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   362
            return;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   363
        }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   364
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   365
        var scrollHeight = document.documentElement.scrollHeight;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   366
        var clientHeight = document.documentElement.clientHeight;
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
   367
        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   368
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   369
        if (scrollHeight - (scrollTop + clientHeight) < 50) {
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   370
            updateInitiated = true;
19756
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
   371
            removeByClassName('scroll-loading-error');
19760
2ac4e89ad769 hgweb: add CSS class to the last entry on a page
Alexander Plavin <alexander@plav.in>
parents: 19756
diff changeset
   372
            container.lastElementChild.classList.add('scroll-separator');
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   373
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
   374
            if (!nextPageVar) {
19754
c35e8805cf53 hgweb: show a message when there are no more entries in the list
Alexander Plavin <alexander@plav.in>
parents: 19746
diff changeset
   375
                var message = {
26832
3ed635cb108e hgweb: escape class keyword when used as a js object property (issue4913)
Anton Shestakov <av6@dwimlabs.net>
parents: 20973
diff changeset
   376
                    'class': 'scroll-loading-info',
19754
c35e8805cf53 hgweb: show a message when there are no more entries in the list
Alexander Plavin <alexander@plav.in>
parents: 19746
diff changeset
   377
                    text: 'No more entries'
c35e8805cf53 hgweb: show a message when there are no more entries in the list
Alexander Plavin <alexander@plav.in>
parents: 19746
diff changeset
   378
                };
c35e8805cf53 hgweb: show a message when there are no more entries in the list
Alexander Plavin <alexander@plav.in>
parents: 19746
diff changeset
   379
                appendFormatHTML(container, messageFormat, message);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   380
                return;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   381
            }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   382
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   383
            makeRequest(
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
   384
                format(urlFormat, {next: nextPageVar}),
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   385
                'GET',
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   386
                function onstart() {
19755
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
   387
                    var message = {
26832
3ed635cb108e hgweb: escape class keyword when used as a js object property (issue4913)
Anton Shestakov <av6@dwimlabs.net>
parents: 20973
diff changeset
   388
                        'class': 'scroll-loading',
19755
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
   389
                        text: 'Loading...'
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
   390
                    };
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
   391
                    appendFormatHTML(container, messageFormat, message);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   392
                },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   393
                function onsuccess(htmlText) {
35216
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   394
                    var doc = docFromHTML(htmlText);
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   395
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   396
                    if (mode === 'graph') {
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   397
                        var graph = window.graph;
27934
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
   398
                        var sizes = htmlText.match(/^\s*<canvas id="graph" width="(\d+)" height="(\d+)"><\/canvas>$/m);
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
   399
                        var addWidth = sizes[1];
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
   400
                        var addHeight = sizes[2];
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
   401
                        addWidth = parseInt(addWidth);
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   402
                        addHeight = parseInt(addHeight);
27934
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
   403
                        graph.canvas.width = addWidth;
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   404
                        graph.canvas.height = addHeight;
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   405
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   406
                        var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
19957
80aa912dcb2d hgweb: add missing semicolon
Takumi IINO <trot.thunder@gmail.com>
parents: 19907
diff changeset
   407
                        var data = JSON.parse(dataStr);
19907
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
   408
                        if (data.length < nextPageVar) {
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
   409
                            nextPageVar = undefined;
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
   410
                        }
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   411
                        graph.reset();
35216
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   412
                        adoptChildren(doc.querySelector('#graphnodes'), container.querySelector('#graphnodes'));
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   413
                        graph.render(data);
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
   414
                    } else {
35216
fcc96cf0983d hgweb: adopt child nodes in ajaxScrollInit on /graph pages too
Anton Shestakov <av6@dwimlabs.net>
parents: 35161
diff changeset
   415
                        adoptChildren(doc.querySelector(containerSelector), container);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   416
                    }
19907
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
   417
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
   418
                    nextPageVar = nextPageVarGet(htmlText, nextPageVar);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   419
                },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   420
                function onerror(errorText) {
19756
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
   421
                    var message = {
26832
3ed635cb108e hgweb: escape class keyword when used as a js object property (issue4913)
Anton Shestakov <av6@dwimlabs.net>
parents: 20973
diff changeset
   422
                        'class': 'scroll-loading-error',
19756
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
   423
                        text: 'Error: ' + errorText
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
   424
                    };
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
   425
                    appendFormatHTML(container, messageFormat, message);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   426
                },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   427
                function oncomplete() {
19755
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
   428
                    removeByClassName('scroll-loading');
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   429
                    updateInitiated = false;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   430
                    scrollHandler();
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   431
                }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   432
            );
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   433
        }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   434
    }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   435
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   436
    window.addEventListener('scroll', scrollHandler);
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   437
    window.addEventListener('resize', scrollHandler);
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   438
    scrollHandler();
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
   439
}
30765
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
   440
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   441
function renderDiffOptsForm() {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   442
    // We use URLSearchParams for query string manipulation. Old browsers don't
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   443
    // support this API.
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   444
    if (!("URLSearchParams" in window)) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   445
        return;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   446
    }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   447
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   448
    var form = document.getElementById("diffopts-form");
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   449
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   450
    var KEYS = [
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   451
        "ignorews",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   452
        "ignorewsamount",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   453
        "ignorewseol",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   454
        "ignoreblanklines",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   455
    ];
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   456
35161
1207a50a6dc3 hgweb: look up "URLSearchParams" in "window" to work around jshint issues
Anton Shestakov <av6@dwimlabs.net>
parents: 35160
diff changeset
   457
    var urlParams = new window.URLSearchParams(window.location.search);
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   458
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   459
    function updateAndRefresh(e) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   460
        var checkbox = e.target;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   461
        var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   462
        urlParams.set(name, checkbox.checked ? "1" : "0");
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   463
        window.location.search = urlParams.toString();
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   464
    }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   465
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   466
    var allChecked = form.getAttribute("data-ignorews") === "1";
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   467
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   468
    for (var i = 0; i < KEYS.length; i++) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   469
        var key = KEYS[i];
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   470
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   471
        var checkbox = document.getElementById(key + "-checkbox");
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   472
        if (!checkbox) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   473
            continue;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   474
        }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   475
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
   476
        var currentValue = form.getAttribute("data-" + key);
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   477
        checkbox.checked = currentValue !== "0";
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   478
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   479
        // ignorews implies ignorewsamount and ignorewseol.
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
   480
        if (allChecked && (key === "ignorewsamount" || key === "ignorewseol")) {
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   481
            checkbox.checked = true;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   482
            checkbox.disabled = true;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   483
        }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   484
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   485
        checkbox.addEventListener("change", updateAndRefresh, false);
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   486
    }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   487
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   488
    form.style.display = 'block';
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   489
}
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
   490
30765
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
   491
document.addEventListener('DOMContentLoaded', function() {
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
   492
   process_dates();
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
   493
}, false);