annotate mercurial/templates/static/mercurial.js @ 35160:69a865dc2ada

hgweb: define locally used variables as actually local in mercurial.js Variables that are used or assigned without any declaration using var (or let, or const) are considered global. In many cases this is inadvertent and actually causes a variable leaking to a broader scope, such as a temporary variable used inside a loop suddenly being accessible in global scope. (This corresponds to "undef" option of jshint). So this patch limits the scope of variables that don't need to be global. There are a lot of helper variables in Graph.render() used in a loop, I've declared them all on one line to reduce patch size. "radius" is special because it wasn't passed to graph.vertex, but was used there (it worked because this variable leaked to global scope). "window.graph" is created by an inline script in graph.tmpl so that it can be used in ajaxScrollInit() function, this patch makes this fact explicit by assigning window.graph to a local variable.
author Anton Shestakov <av6@dwimlabs.net>
date Wed, 22 Nov 2017 21:49:36 +0800
parents 018aac6d7cb0
children 1207a50a6dc3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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.cur = [0, 0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
33 this.bg = [0, 4];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
34 this.cell = [2, 0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
35 this.columns = 0;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
36
19780
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
37 this.reset = function() {
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
38 this.bg = [0, 4];
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
39 this.cell = [2, 0];
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
40 this.columns = 0;
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
41 document.getElementById('nodebgs').innerHTML = '';
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
42 document.getElementById('graphnodes').innerHTML = '';
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
43 };
19780
659bc603bd0d hgweb: add reset javascript function to Graph
Alexander Plavin <alexander@plav.in>
parents: 19760
diff changeset
44
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
45 this.scale = function(height) {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
46 this.bg_height = height;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
47 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
48 this.cell_height = this.box_size;
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
49 };
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
50
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
51 this.setColor = function(color, bg, fg) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
52
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
53 // Set the colour.
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
54 //
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
55 // If color is a string, expect an hexadecimal RGB
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
56 // 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
57 // pick a distinct colour based on an internal wheel;
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
58 // the bg parameter provides the value that should be
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
59 // assigned to the 'zero' colours and the fg parameter
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
60 // provides the multiplier that should be applied to
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
61 // the foreground colours.
16130
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
62 var s;
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
63 if(typeof color === "string") {
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
64 s = "#" + color;
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
65 } else { //typeof color === "number"
16130
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
66 color %= colors.length;
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
67 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
68 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
69 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
70 red = Math.round(red * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
71 green = Math.round(green * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
72 blue = Math.round(blue * 255);
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
73 s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
33f702e52906 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com>
parents: 16129
diff changeset
74 }
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
75 this.ctx.strokeStyle = s;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
76 this.ctx.fillStyle = s;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
77 return s;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
78
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
79 };
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
80
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
81 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
82
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
83 this.setColor(color, 0.0, 0.65);
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
84 if(width >= 0)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
85 this.ctx.lineWidth = width;
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
86 this.ctx.beginPath();
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
87 this.ctx.moveTo(x0, y0);
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
88 this.ctx.lineTo(x1, y1);
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
89 this.ctx.stroke();
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
90
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
91 };
16137
8fd18eb8aab7 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu>
parents: 16130
diff changeset
92
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
93 this.render = function(data) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
94
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
95 var backgrounds = '';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
96 var nodedata = '';
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
97 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
98
35158
241da2de0e9f hgweb: properly iterate over arrays and objects in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35157
diff changeset
99 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
100
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
101 var parity = i % 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
102 this.cell[1] += this.bg_height;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
103 this.bg[1] += this.bg_height;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
104
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
105 var cur = data[i];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
106 var node = cur[1];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
107 var edges = cur[2];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
108 var fold = false;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
109
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
110 var prevWidth = this.ctx.lineWidth;
35158
241da2de0e9f hgweb: properly iterate over arrays and objects in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35157
diff changeset
111 for (var j = 0; j < edges.length; j++) {
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
112
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
113 line = edges[j];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
114 start = line[0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
115 end = line[1];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
116 color = line[2];
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
117 var width = line[3];
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
118 if(width < 0)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
119 width = prevWidth;
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
120 var branchcolor = line[4];
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
121 if(branchcolor)
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
122 color = branchcolor;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
123
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
124 if (end > this.columns || start > this.columns) {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
125 this.columns += 1;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
126 }
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
127
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
128 if (start === this.columns && start > end) {
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
129 fold = true;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
130 }
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
131
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
132 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
133 y0 = this.bg[1] - this.bg_height / 2;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
134 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
135 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
136
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
137 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
138
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
139 }
16138
6e4de55a41a4 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu>
parents: 16137
diff changeset
140 this.ctx.lineWidth = prevWidth;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
141
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
142 // 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
143
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
144 column = node[0];
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
145 color = node[1];
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
146
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
147 radius = this.box_size / 8;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
148 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
149 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
150 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
151 backgrounds += add[0];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
152 nodedata += add[1];
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
153
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
154 if (fold) this.columns -= 1;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
155
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
156 }
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
157
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
158 document.getElementById('nodebgs').innerHTML += backgrounds;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
159 document.getElementById('graphnodes').innerHTML += nodedata;
19530
a63d3ff0d765 hgweb: remove trailing whitespace in mercurial.js
Kevin Bullock <kbullock@ringworld.org>
parents: 19430
diff changeset
160
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
161 };
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
162
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
163 }
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
19858
4a8c5a51f7a1 hgweb: add parentSelector argument to process_dates
Alexander Plavin <alexander@plav.in>
parents: 19857
diff changeset
166 function process_dates(parentSelector){
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
167
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
168 // derived from code from mercurial/templatefilter.py
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
169
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
170 var scales = {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
171 'year': 365 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
172 'month': 30 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
173 'week': 7 * 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
174 'day': 24 * 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
175 'hour': 60 * 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
176 'minute': 60,
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
177 'second': 1
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
178 };
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
179
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
180 function format(count, string){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
181 var ret = count + ' ' + string;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
182 if (count > 1){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
183 ret = ret + 's';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
184 }
14881
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
185 return ret;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
186 }
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
187
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
188 function shortdate(date){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
189 var ret = date.getFullYear() + '-';
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
190 // 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
191 var month = date.getMonth() + 1;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
192 if (month <= 9){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
193 ret += '0' + month;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
194 } else {
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
195 ret += month;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
196 }
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
197 ret += '-';
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
198 var day = date.getDate();
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
199 if (day <= 9){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
200 ret += '0' + day;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
201 } else {
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
202 ret += day;
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
203 }
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
204 return ret;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
205 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
206
14881
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
207 function age(datestr){
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
208 var now = new Date();
2e54387976d4 web: Output a correct date in short format (issue2902)
Benoit Allard <benoit@aeteurope.nl>
parents: 14571
diff changeset
209 var once = new Date(datestr);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
210 if (isNaN(once.getTime())){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
211 // parsing error
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
212 return datestr;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
213 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
214
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
215 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
216
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
217 var future = false;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
218 if (delta < 0){
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
219 future = true;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
220 delta = -delta;
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
221 if (delta > (30 * scales.year)){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
222 return "in the distant future";
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
223 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
224 }
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 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
227 return shortdate(once);
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
228 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
229
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
230 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
231 if (!scales.hasOwnProperty(unit)) { continue; }
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
232 var s = scales[unit];
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
233 var n = Math.floor(delta / s);
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
234 if ((n >= 2) || (s === 1)){
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
235 if (future){
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
236 return format(n, unit) + ' from now';
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
237 } else {
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
238 return format(n, unit) + ' ago';
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 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
241 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
242 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
243
19858
4a8c5a51f7a1 hgweb: add parentSelector argument to process_dates
Alexander Plavin <alexander@plav.in>
parents: 19857
diff changeset
244 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
245 var dateclass = new RegExp('\\bdate\\b');
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
246 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
247 var node = nodes[i];
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
248 var classes = node.className;
19857
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
249 var agevalue = age(node.textContent);
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
250 if (dateclass.test(classes)){
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
251 // We want both: date + (age)
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
252 node.textContent += ' ('+agevalue+')';
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
253 } else {
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
254 node.title = node.textContent;
14fddba036f8 hgweb: optimize process_dates function
Alexander Plavin <alexander@plav.in>
parents: 19834
diff changeset
255 node.textContent = agevalue;
14046
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
256 }
b24e5a708fad web: Made elapsed time calculation dynamic (javascript).
Benoit Allard <benoit@aeteurope.nl>
parents:
diff changeset
257 }
19834
80633eac7b9d hgweb: eliminate extra complexity in process_dates definition
Alexander Plavin <alexander@plav.in>
parents: 19782
diff changeset
258 }
14571
17c0cb1045e5 paper, coal: display diffstat on the changeset page
Steven Brown <StevenGBrown@gmail.com>
parents: 14046
diff changeset
259
19428
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
260 function toggleDiffstat() {
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
261 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
262 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
263 document.getElementById('diffstatdetails').style.display = curexpand;
c3cdba6e5d7f hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat
Alexander Plavin <me@aplavin.ru>
parents: 17694
diff changeset
264 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
265 }
19430
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
266
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
267 function toggleLinewrap() {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
268 function getLinewrap() {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
269 var nodes = document.getElementsByClassName('sourcelines');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
270 // 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
271 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
272 }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
273
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
274 function setLinewrap(enable) {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
275 var nodes = document.getElementsByClassName('sourcelines');
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
276 var i;
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
277 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
278 if (enable) {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
279 nodes[i].classList.add('wrap');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
280 } else {
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
281 nodes[i].classList.remove('wrap');
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
282 }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
283 }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
284
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
285 var links = document.getElementsByClassName('linewraplink');
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
286 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
287 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
288 }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
289 }
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
290
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
291 setLinewrap(!getLinewrap());
5ec5097b4c0f hgweb: add line wrapping switch to file source view
Alexander Plavin <me@aplavin.ru>
parents: 19428
diff changeset
292 }
19739
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
293
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
294 function format(str, replacements) {
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
295 return str.replace(/%(\w+)%/g, function(match, p1) {
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
296 return String(replacements[p1]);
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
297 });
5bdc179e58c1 hgweb: add format javascript function
Alexander Plavin <alexander@plav.in>
parents: 19531
diff changeset
298 }
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
299
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
300 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
301 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
302 xhr.onreadystatechange = function() {
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
303 if (xhr.readyState === 4) {
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
304 try {
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
305 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
306 onsuccess(xhr.responseText);
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
307 } else {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
308 throw 'server error';
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
309 }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
310 } catch (e) {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
311 onerror(e);
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
312 } finally {
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
313 oncomplete();
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
314 }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
315 }
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
316 };
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
317
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
318 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
319 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
320 xhr.send();
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
321 onstart();
35159
018aac6d7cb0 hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35158
diff changeset
322 return xhr;
19740
2228bd109706 hgweb: add makeRequest javascript function
Alexander Plavin <alexander@plav.in>
parents: 19739
diff changeset
323 }
19741
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
324
19742
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
325 function removeByClassName(className) {
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
326 var nodes = document.getElementsByClassName(className);
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
327 while (nodes.length) {
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
328 nodes[0].parentNode.removeChild(nodes[0]);
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
329 }
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
330 }
ac68009c31a4 hgweb: add removeByClassName javascript function
Alexander Plavin <alexander@plav.in>
parents: 19741
diff changeset
331
19741
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
332 function docFromHTML(html) {
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
333 var doc = document.implementation.createHTMLDocument('');
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
334 doc.documentElement.innerHTML = html;
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
335 return doc;
2a9a21e1e1db hgweb: add docFromHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19740
diff changeset
336 }
19743
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
337
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
338 function appendFormatHTML(element, formatStr, replacements) {
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
339 element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
fdd41257def8 hgweb: add appendFormatHTML javascript function
Alexander Plavin <alexander@plav.in>
parents: 19742
diff changeset
340 }
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
341
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
342 function ajaxScrollInit(urlFormat,
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
343 nextPageVar,
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
344 nextPageVarGet,
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
345 containerSelector,
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
346 messageFormat,
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
347 mode) {
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
348 var updateInitiated = false;
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
349 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
350
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
351 function scrollHandler() {
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
352 if (updateInitiated) {
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
353 return;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
354 }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
355
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
356 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
357 var clientHeight = document.documentElement.clientHeight;
35042
5f82e26cbed1 hgweb: fix jshint issues in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 34391
diff changeset
358 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
359
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
360 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
361 updateInitiated = true;
19756
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
362 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
363 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
364
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
365 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
366 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
367 '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
368 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
369 };
c35e8805cf53 hgweb: show a message when there are no more entries in the list
Alexander Plavin <alexander@plav.in>
parents: 19746
diff changeset
370 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
371 return;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
372 }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
373
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
374 makeRequest(
19781
74564c90026b hgweb: make infinite scroll handling more generic and extensible
Alexander Plavin <alexander@plav.in>
parents: 19780
diff changeset
375 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
376 'GET',
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
377 function onstart() {
19755
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
378 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
379 '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
380 text: 'Loading...'
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
381 };
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
382 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
383 },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
384 function onsuccess(htmlText) {
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
385 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
386 var graph = window.graph;
27934
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
387 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
388 var addWidth = sizes[1];
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
389 var addHeight = sizes[2];
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
390 addWidth = parseInt(addWidth);
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
391 addHeight = parseInt(addHeight);
27934
1779ff7426c9 hgweb: update canvas.width before dynamically redrawing graph (issue2683)
Anton Shestakov <av6@dwimlabs.net>
parents: 26867
diff changeset
392 graph.canvas.width = addWidth;
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
393 graph.canvas.height = addHeight;
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
394
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
395 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
396 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
397 if (data.length < nextPageVar) {
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
398 nextPageVar = undefined;
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
399 }
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
400 graph.reset();
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
401 graph.render(data);
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
402 } else {
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
403 var doc = docFromHTML(htmlText);
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
404 var nodes = doc.querySelector(containerSelector).children;
19859
5ba3cf17da9e hgweb: call process_dates with a specified selector in ajax scroll
Alexander Plavin <alexander@plav.in>
parents: 19858
diff changeset
405 var curClass = 'c' + Date.now();
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
406 while (nodes.length) {
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
407 var node = nodes[0];
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
408 node = document.adoptNode(node);
19859
5ba3cf17da9e hgweb: call process_dates with a specified selector in ajax scroll
Alexander Plavin <alexander@plav.in>
parents: 19858
diff changeset
409 node.classList.add(curClass);
19782
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
410 container.appendChild(node);
8123f50555ff hgweb: add graph mode of ajax response processing
Alexander Plavin <alexander@plav.in>
parents: 19781
diff changeset
411 }
19859
5ba3cf17da9e hgweb: call process_dates with a specified selector in ajax scroll
Alexander Plavin <alexander@plav.in>
parents: 19858
diff changeset
412 process_dates('.' + curClass);
19746
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
413 }
19907
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
414
aebfbb68fe92 hgweb: fix unstoppable loading of graph when no more results
Alexander Plavin <alexander@plav.in>
parents: 19859
diff changeset
415 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
416 },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
417 function onerror(errorText) {
19756
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
418 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
419 '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
420 text: 'Error: ' + errorText
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
421 };
54981b899406 hgweb: show message when an error occured during ajax loading
Alexander Plavin <alexander@plav.in>
parents: 19755
diff changeset
422 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
423 },
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
424 function oncomplete() {
19755
00b9f6aab761 hgweb: show loading indicator while an ajax request is in process
Alexander Plavin <alexander@plav.in>
parents: 19754
diff changeset
425 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
426 updateInitiated = false;
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
427 scrollHandler();
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
428 }
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
429 );
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
430 }
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 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
434 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
435 scrollHandler();
9ad7dd9574a9 hgweb: add ajaxScrollInit function, which does the ajax requests and processing
Alexander Plavin <alexander@plav.in>
parents: 19743
diff changeset
436 }
30765
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
437
34391
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
438 function renderDiffOptsForm() {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
439 // 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
440 // support this API.
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
441 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
442 return;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
443 }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
444
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
445 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
446
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
447 var KEYS = [
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
448 "ignorews",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
449 "ignorewsamount",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
450 "ignorewseol",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
451 "ignoreblanklines",
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
452 ];
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
453
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
454 var urlParams = new URLSearchParams(window.location.search);
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 function updateAndRefresh(e) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
457 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
458 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
459 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
460 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
461 }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
462
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
463 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
464
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
465 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
466 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
467
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
468 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
469 if (!checkbox) {
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
470 continue;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
471 }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
472
35160
69a865dc2ada hgweb: define locally used variables as actually local in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35159
diff changeset
473 var currentValue = form.getAttribute("data-" + key);
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
474 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
475
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
476 // ignorews implies ignorewsamount and ignorewseol.
35157
ccf86aa5797c hgweb: use strict equals in mercurial.js
Anton Shestakov <av6@dwimlabs.net>
parents: 35135
diff changeset
477 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
478 checkbox.checked = true;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
479 checkbox.disabled = true;
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
480 }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
481
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
482 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
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 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
486 }
6797f1fbc642 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30765
diff changeset
487
30765
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
488 document.addEventListener('DOMContentLoaded', function() {
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
489 process_dates();
eb7de21b15be hgweb: call process_dates() via DOM event listener
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27934
diff changeset
490 }, false);