##// END OF EJS Templates
deltas: skip if projected delta size is bigger than previous snapshot...
deltas: skip if projected delta size is bigger than previous snapshot Before computing any delta, we get a basic estimation of the delta size we can expect and the resulted compressed value. We then checks this projected size against the `size(snapshotⁿ) > size(snapshotⁿ⁺¹)` constraint. This allows to exclude potential base candidates before doing any expensive computation. This only apply to the intermediate-snapshot case since this constraint only apply to them. For some pathological cases of a private repository this step provide a significant performance boost (timing from `hg perfrevlogwrite`): before: 14.115908 seconds after: 3.145906 seconds

File last commit:

r37850:387af9e5 @23 stable
r42664:66c27df1 default
Show More
mercurial.js
580 lines | 15.4 KiB | application/javascript | JavascriptLexer
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 // mercurial.js - JavaScript utility functions
//
// Rendering of branch DAGs on the client side
// Display of elapsed time
Steven Brown
paper, coal: display diffstat on the changeset page...
r14571 // Show or hide diffstat
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 //
// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
//
// derived from code written by Scott James Remnant <scott@ubuntu.com>
// Copyright 2005 Canonical Ltd.
//
// This software may be used and distributed according to the terms
// of the GNU General Public License, incorporated herein by reference.
var colors = [
[ 1.0, 0.0, 0.0 ],
[ 1.0, 1.0, 0.0 ],
[ 0.0, 1.0, 0.0 ],
[ 0.0, 1.0, 1.0 ],
[ 0.0, 0.0, 1.0 ],
[ 1.0, 0.0, 1.0 ]
];
function Graph() {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 this.canvas = document.getElementById('graph');
this.ctx = this.canvas.getContext('2d');
this.ctx.strokeStyle = 'rgb(0, 0, 0)';
this.ctx.fillStyle = 'rgb(0, 0, 0)';
this.bg = [0, 4];
this.cell = [2, 0];
this.columns = 0;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: create Graph methods using a prototype...
r35255 }
Graph.prototype = {
reset: function() {
Alexander Plavin
hgweb: add reset javascript function to Graph...
r19780 this.bg = [0, 4];
this.cell = [2, 0];
this.columns = 0;
av6
hgweb: create Graph methods using a prototype...
r35255 },
Alexander Plavin
hgweb: add reset javascript function to Graph...
r19780
av6
hgweb: create Graph methods using a prototype...
r35255 scale: function(height) {
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 this.bg_height = height;
this.box_size = Math.floor(this.bg_height / 1.2);
this.cell_height = this.box_size;
av6
hgweb: create Graph methods using a prototype...
r35255 },
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: create Graph methods using a prototype...
r35255 setColor: function(color, bg, fg) {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 // Set the colour.
//
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 // If color is a string, expect an hexadecimal RGB
// value and apply it unchanged. If color is a number,
// pick a distinct colour based on an internal wheel;
// the bg parameter provides the value that should be
// assigned to the 'zero' colours and the fg parameter
// provides the multiplier that should be applied to
// the foreground colours.
Constantine Linnick
graph: in hgrc specify line color for main branch...
r16130 var s;
av6
hgweb: use strict equals in mercurial.js...
r35158 if(typeof color === "string") {
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 s = "#" + color;
av6
hgweb: use strict equals in mercurial.js...
r35158 } else { //typeof color === "number"
Constantine Linnick
graph: in hgrc specify line color for main branch...
r16130 color %= colors.length;
var red = (colors[color][0] * fg) || bg;
var green = (colors[color][1] * fg) || bg;
var blue = (colors[color][2] * fg) || bg;
red = Math.round(red * 255);
green = Math.round(green * 255);
blue = Math.round(blue * 255);
s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
}
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 this.ctx.strokeStyle = s;
this.ctx.fillStyle = s;
return s;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: create Graph methods using a prototype...
r35255 },
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046
av6
hgweb: create Graph methods using a prototype...
r35255 edge: function(x0, y0, x1, y1, color, width) {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Patrick Mezard
templates: move Graph.edge() implementation in mercurial.js...
r16137 this.setColor(color, 0.0, 0.65);
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 if(width >= 0)
this.ctx.lineWidth = width;
Patrick Mezard
templates: move Graph.edge() implementation in mercurial.js...
r16137 this.ctx.beginPath();
this.ctx.moveTo(x0, y0);
this.ctx.lineTo(x1, y1);
this.ctx.stroke();
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: create Graph methods using a prototype...
r35255 },
Patrick Mezard
templates: move Graph.edge() implementation in mercurial.js...
r16137
av6
hgweb: make different kinds of commits look differently on /graph...
r35582 graphNodeCurrent: function(x, y, radius) {
this.ctx.lineWidth = 2;
this.ctx.beginPath();
this.ctx.arc(x, y, radius * 1.75, 0, Math.PI * 2, true);
this.ctx.stroke();
},
graphNodeClosing: function(x, y, radius) {
this.ctx.fillRect(x - radius, y - 1.5, radius * 2, 3);
},
graphNodeUnstable: function(x, y, radius) {
var x30 = radius * Math.cos(Math.PI / 6);
var y30 = radius * Math.sin(Math.PI / 6);
this.ctx.lineWidth = 2;
av6
hgweb: move common vertex code to Graph.prototype...
r35256 this.ctx.beginPath();
av6
hgweb: make different kinds of commits look differently on /graph...
r35582 this.ctx.moveTo(x, y - radius);
this.ctx.lineTo(x, y + radius);
this.ctx.moveTo(x - x30, y - y30);
this.ctx.lineTo(x + x30, y + y30);
this.ctx.moveTo(x - x30, y + y30);
this.ctx.lineTo(x + x30, y - y30);
this.ctx.stroke();
},
graphNodeObsolete: function(x, y, radius) {
var p45 = radius * Math.cos(Math.PI / 4);
this.ctx.lineWidth = 3;
this.ctx.beginPath();
this.ctx.moveTo(x - p45, y - p45);
this.ctx.lineTo(x + p45, y + p45);
this.ctx.moveTo(x - p45, y + p45);
this.ctx.lineTo(x + p45, y - p45);
this.ctx.stroke();
},
graphNodeNormal: function(x, y, radius) {
this.ctx.beginPath();
av6
hgweb: move common vertex code to Graph.prototype...
r35256 this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
this.ctx.fill();
av6
hgweb: make different kinds of commits look differently on /graph...
r35582 },
vertex: function(x, y, radius, color, parity, cur) {
this.ctx.save();
this.setColor(color, 0.25, 0.75);
if (cur.graphnode[0] === '@') {
this.graphNodeCurrent(x, y, radius);
}
switch (cur.graphnode.substr(-1)) {
case '_':
this.graphNodeClosing(x, y, radius);
break;
case '*':
this.graphNodeUnstable(x, y, radius);
break;
case 'x':
this.graphNodeObsolete(x, y, radius);
break;
default:
this.graphNodeNormal(x, y, radius);
}
this.ctx.restore();
av6
hgweb: move common vertex code to Graph.prototype...
r35256
var left = (this.bg_height - this.box_size) + (this.columns + 1) * this.box_size;
var item = document.querySelector('[data-node="' + cur.node + '"]');
if (item) {
item.style.paddingLeft = left + 'px';
}
},
av6
hgweb: create Graph methods using a prototype...
r35255 render: function(data) {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: calculate <canvas> width and height client-side...
r35408 var i, j, cur, line, start, end, color, x, y, x0, y0, x1, y1, column, radius;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: calculate <canvas> width and height client-side...
r35408 var cols = 0;
for (i = 0; i < data.length; i++) {
cur = data[i];
for (j = 0; j < cur.edges.length; j++) {
line = cur.edges[j];
cols = Math.max(cols, line[0], line[1]);
}
}
this.canvas.width = (cols + 1) * this.bg_height;
this.canvas.height = (data.length + 1) * this.bg_height - 27;
for (i = 0; i < data.length; i++) {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 var parity = i % 2;
this.cell[1] += this.bg_height;
this.bg[1] += this.bg_height;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: calculate <canvas> width and height client-side...
r35408 cur = data[i];
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 var fold = false;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 var prevWidth = this.ctx.lineWidth;
av6
hgweb: calculate <canvas> width and height client-side...
r35408 for (j = 0; j < cur.edges.length; j++) {
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: only include graph-related data in jsdata variable on /graph pages (BC)...
r35218 line = cur.edges[j];
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 start = line[0];
end = line[1];
color = line[2];
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 var width = line[3];
if(width < 0)
width = prevWidth;
var branchcolor = line[4];
if(branchcolor)
color = branchcolor;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 if (end > this.columns || start > this.columns) {
this.columns += 1;
}
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: use strict equals in mercurial.js...
r35158 if (start === this.columns && start > end) {
av6
hgweb: fix jshint issues in mercurial.js...
r35033 fold = true;
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 }
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
y0 = this.bg[1] - this.bg_height / 2;
x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
y1 = this.bg[1] + this.bg_height / 2;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 this.edge(x0, y0, x1, y1, color, width);
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 }
Patrick Mezard
hgweb: refactor graph customization javascript...
r16138 this.ctx.lineWidth = prevWidth;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 // Draw the revision node in the right column
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: only include graph-related data in jsdata variable on /graph pages (BC)...
r35218 column = cur.vertex[0];
color = cur.vertex[1];
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 radius = this.box_size / 8;
x = this.cell[0] + this.box_size * column + this.box_size / 2;
y = this.bg[1] - this.bg_height / 2;
av6
hgweb: stop adding strings to innerHTML of #graphnodes and #nodebgs (BC)...
r35551 this.vertex(x, y, radius, color, parity, cur);
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 if (fold) this.columns -= 1;
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 }
Kevin Bullock
hgweb: remove trailing whitespace in mercurial.js
r19530
av6
hgweb: create Graph methods using a prototype...
r35255 }
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046
av6
hgweb: create Graph methods using a prototype...
r35255 };
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046
Alexander Plavin
hgweb: add parentSelector argument to process_dates...
r19858 function process_dates(parentSelector){
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046
// derived from code from mercurial/templatefilter.py
var scales = {
'year': 365 * 24 * 60 * 60,
'month': 30 * 24 * 60 * 60,
'week': 7 * 24 * 60 * 60,
'day': 24 * 60 * 60,
'hour': 60 * 60,
'minute': 60,
'second': 1
};
function format(count, string){
var ret = count + ' ' + string;
if (count > 1){
ret = ret + 's';
}
Benoit Allard
web: Output a correct date in short format (issue2902)
r14881 return ret;
}
function shortdate(date){
var ret = date.getFullYear() + '-';
// getMonth() gives a 0-11 result
var month = date.getMonth() + 1;
if (month <= 9){
ret += '0' + month;
} else {
ret += month;
}
ret += '-';
var day = date.getDate();
if (day <= 9){
ret += '0' + day;
} else {
ret += day;
}
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 return ret;
}
Benoit Allard
web: Output a correct date in short format (issue2902)
r14881 function age(datestr){
var now = new Date();
var once = new Date(datestr);
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 if (isNaN(once.getTime())){
// parsing error
return datestr;
}
var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
Alexander Plavin
hgweb: eliminate extra complexity in process_dates definition...
r19834 var future = false;
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 if (delta < 0){
Alexander Plavin
hgweb: eliminate extra complexity in process_dates definition...
r19834 future = true;
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 delta = -delta;
if (delta > (30 * scales.year)){
return "in the distant future";
}
}
if (delta > (2 * scales.year)){
Benoit Allard
web: Output a correct date in short format (issue2902)
r14881 return shortdate(once);
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 }
av6
hgweb: fix jshint issues in mercurial.js...
r35033 for (var unit in scales){
av6
hgweb: properly iterate over arrays and objects in mercurial.js...
r35159 if (!scales.hasOwnProperty(unit)) { continue; }
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 var s = scales[unit];
var n = Math.floor(delta / s);
av6
hgweb: use strict equals in mercurial.js...
r35158 if ((n >= 2) || (s === 1)){
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 if (future){
return format(n, unit) + ' from now';
} else {
return format(n, unit) + ' ago';
}
}
}
}
Alexander Plavin
hgweb: add parentSelector argument to process_dates...
r19858 var nodes = document.querySelectorAll((parentSelector || '') + ' .age');
Alexander Plavin
hgweb: eliminate extra complexity in process_dates definition...
r19834 var dateclass = new RegExp('\\bdate\\b');
for (var i=0; i<nodes.length; ++i){
var node = nodes[i];
var classes = node.className;
Alexander Plavin
hgweb: optimize process_dates function...
r19857 var agevalue = age(node.textContent);
if (dateclass.test(classes)){
// We want both: date + (age)
node.textContent += ' ('+agevalue+')';
} else {
node.title = node.textContent;
node.textContent = agevalue;
Benoit Allard
web: Made elapsed time calculation dynamic (javascript)....
r14046 }
}
Alexander Plavin
hgweb: eliminate extra complexity in process_dates definition...
r19834 }
Steven Brown
paper, coal: display diffstat on the changeset page...
r14571
Yuya Nishihara
hgweb: prevent triggering dummy href="#" handler...
r37850 function toggleDiffstat(event) {
Alexander Plavin
hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat...
r19428 var curdetails = document.getElementById('diffstatdetails').style.display;
av6
hgweb: use strict equals in mercurial.js...
r35158 var curexpand = curdetails === 'none' ? 'inline' : 'none';
Alexander Plavin
hgweb: toggleDiffstat function instead of showDiffstat and hideDiffstat...
r19428 document.getElementById('diffstatdetails').style.display = curexpand;
document.getElementById('diffstatexpand').style.display = curdetails;
Yuya Nishihara
hgweb: prevent triggering dummy href="#" handler...
r37850 event.preventDefault();
Steven Brown
paper, coal: display diffstat on the changeset page...
r14571 }
Alexander Plavin
hgweb: add line wrapping switch to file source view...
r19430
Yuya Nishihara
hgweb: prevent triggering dummy href="#" handler...
r37850 function toggleLinewrap(event) {
Alexander Plavin
hgweb: add line wrapping switch to file source view...
r19430 function getLinewrap() {
var nodes = document.getElementsByClassName('sourcelines');
// if there are no such nodes, error is thrown here
return nodes[0].classList.contains('wrap');
}
function setLinewrap(enable) {
var nodes = document.getElementsByClassName('sourcelines');
av6
hgweb: fix jshint issues in mercurial.js...
r35033 var i;
for (i = 0; i < nodes.length; i++) {
Alexander Plavin
hgweb: add line wrapping switch to file source view...
r19430 if (enable) {
nodes[i].classList.add('wrap');
} else {
nodes[i].classList.remove('wrap');
}
}
var links = document.getElementsByClassName('linewraplink');
av6
hgweb: fix jshint issues in mercurial.js...
r35033 for (i = 0; i < links.length; i++) {
Alexander Plavin
hgweb: add line wrapping switch to file source view...
r19430 links[i].innerHTML = enable ? 'on' : 'off';
}
}
setLinewrap(!getLinewrap());
Yuya Nishihara
hgweb: prevent triggering dummy href="#" handler...
r37850 event.preventDefault();
Alexander Plavin
hgweb: add line wrapping switch to file source view...
r19430 }
Alexander Plavin
hgweb: add format javascript function...
r19739
function format(str, replacements) {
return str.replace(/%(\w+)%/g, function(match, p1) {
return String(replacements[p1]);
});
}
Alexander Plavin
hgweb: add makeRequest javascript function...
r19740
function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
av6
hgweb: define locally used variables as actually local in mercurial.js...
r35161 var xhr = new XMLHttpRequest();
av6
hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js...
r35160 xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
Alexander Plavin
hgweb: add makeRequest javascript function...
r19740 try {
av6
hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js...
r35160 if (xhr.status === 200) {
onsuccess(xhr.responseText);
Alexander Plavin
hgweb: add makeRequest javascript function...
r19740 } else {
throw 'server error';
}
} catch (e) {
onerror(e);
} finally {
oncomplete();
}
}
};
av6
hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js...
r35160 xhr.open(method, url);
xhr.overrideMimeType("text/xhtml; charset=" + document.characterSet.toLowerCase());
xhr.send();
Alexander Plavin
hgweb: add makeRequest javascript function...
r19740 onstart();
av6
hgweb: rename an instance of XMLHttpRequest to xhr in mercurial.js...
r35160 return xhr;
Alexander Plavin
hgweb: add makeRequest javascript function...
r19740 }
Alexander Plavin
hgweb: add docFromHTML javascript function...
r19741
Alexander Plavin
hgweb: add removeByClassName javascript function...
r19742 function removeByClassName(className) {
var nodes = document.getElementsByClassName(className);
while (nodes.length) {
nodes[0].parentNode.removeChild(nodes[0]);
}
}
Alexander Plavin
hgweb: add docFromHTML javascript function...
r19741 function docFromHTML(html) {
var doc = document.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = html;
return doc;
}
Alexander Plavin
hgweb: add appendFormatHTML javascript function...
r19743
function appendFormatHTML(element, formatStr, replacements) {
element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
}
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746
av6
hgweb: adopt child nodes in ajaxScrollInit on /graph pages too...
r35217 function adoptChildren(from, to) {
var nodes = from.children;
var curClass = 'c' + Date.now();
while (nodes.length) {
var node = nodes[0];
node = document.adoptNode(node);
node.classList.add(curClass);
to.appendChild(node);
}
process_dates('.' + curClass);
}
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 function ajaxScrollInit(urlFormat,
Alexander Plavin
hgweb: make infinite scroll handling more generic and extensible...
r19781 nextPageVar,
nextPageVarGet,
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 containerSelector,
Alexander Plavin
hgweb: add graph mode of ajax response processing...
r19782 messageFormat,
mode) {
av6
hgweb: define locally used variables as actually local in mercurial.js...
r35161 var updateInitiated = false;
var container = document.querySelector(containerSelector);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746
function scrollHandler() {
if (updateInitiated) {
return;
}
var scrollHeight = document.documentElement.scrollHeight;
var clientHeight = document.documentElement.clientHeight;
av6
hgweb: fix jshint issues in mercurial.js...
r35033 var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746
if (scrollHeight - (scrollTop + clientHeight) < 50) {
updateInitiated = true;
Alexander Plavin
hgweb: show message when an error occured during ajax loading
r19756 removeByClassName('scroll-loading-error');
Alexander Plavin
hgweb: add CSS class to the last entry on a page...
r19760 container.lastElementChild.classList.add('scroll-separator');
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746
Alexander Plavin
hgweb: make infinite scroll handling more generic and extensible...
r19781 if (!nextPageVar) {
Alexander Plavin
hgweb: show a message when there are no more entries in the list
r19754 var message = {
av6
hgweb: escape class keyword when used as a js object property (issue4913)
r26832 'class': 'scroll-loading-info',
Alexander Plavin
hgweb: show a message when there are no more entries in the list
r19754 text: 'No more entries'
};
appendFormatHTML(container, messageFormat, message);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 return;
}
makeRequest(
Alexander Plavin
hgweb: make infinite scroll handling more generic and extensible...
r19781 format(urlFormat, {next: nextPageVar}),
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 'GET',
function onstart() {
Alexander Plavin
hgweb: show loading indicator while an ajax request is in process
r19755 var message = {
av6
hgweb: escape class keyword when used as a js object property (issue4913)
r26832 'class': 'scroll-loading',
Alexander Plavin
hgweb: show loading indicator while an ajax request is in process
r19755 text: 'Loading...'
};
appendFormatHTML(container, messageFormat, message);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 },
function onsuccess(htmlText) {
av6
hgweb: adopt child nodes in ajaxScrollInit on /graph pages too...
r35217 var doc = docFromHTML(htmlText);
av6
hgweb: use strict equals in mercurial.js...
r35158 if (mode === 'graph') {
av6
hgweb: define locally used variables as actually local in mercurial.js...
r35161 var graph = window.graph;
Alexander Plavin
hgweb: add graph mode of ajax response processing...
r19782 var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
Takumi IINO
hgweb: add missing semicolon
r19957 var data = JSON.parse(dataStr);
Alexander Plavin
hgweb: add graph mode of ajax response processing...
r19782 graph.reset();
av6
hgweb: adopt child nodes in ajaxScrollInit on /graph pages too...
r35217 adoptChildren(doc.querySelector('#graphnodes'), container.querySelector('#graphnodes'));
Alexander Plavin
hgweb: add graph mode of ajax response processing...
r19782 graph.render(data);
} else {
av6
hgweb: adopt child nodes in ajaxScrollInit on /graph pages too...
r35217 adoptChildren(doc.querySelector(containerSelector), container);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 }
Alexander Plavin
hgweb: fix unstoppable loading of graph when no more results...
r19907
av6
hgweb: remove unused second argument of nextPageVarGet()...
r35672 nextPageVar = nextPageVarGet(htmlText);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 },
function onerror(errorText) {
Alexander Plavin
hgweb: show message when an error occured during ajax loading
r19756 var message = {
av6
hgweb: escape class keyword when used as a js object property (issue4913)
r26832 'class': 'scroll-loading-error',
Alexander Plavin
hgweb: show message when an error occured during ajax loading
r19756 text: 'Error: ' + errorText
};
appendFormatHTML(container, messageFormat, message);
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 },
function oncomplete() {
Alexander Plavin
hgweb: show loading indicator while an ajax request is in process
r19755 removeByClassName('scroll-loading');
Alexander Plavin
hgweb: add ajaxScrollInit function, which does the ajax requests and processing...
r19746 updateInitiated = false;
scrollHandler();
}
);
}
}
window.addEventListener('scroll', scrollHandler);
window.addEventListener('resize', scrollHandler);
scrollHandler();
}
Gregory Szorc
hgweb: call process_dates() via DOM event listener...
r30765
Gregory Szorc
hgweb: add HTML elements to control whitespace settings for annotate...
r34392 function renderDiffOptsForm() {
// We use URLSearchParams for query string manipulation. Old browsers don't
// support this API.
if (!("URLSearchParams" in window)) {
return;
}
var form = document.getElementById("diffopts-form");
var KEYS = [
"ignorews",
"ignorewsamount",
"ignorewseol",
"ignoreblanklines",
];
av6
hgweb: look up "URLSearchParams" in "window" to work around jshint issues...
r35162 var urlParams = new window.URLSearchParams(window.location.search);
Gregory Szorc
hgweb: add HTML elements to control whitespace settings for annotate...
r34392
function updateAndRefresh(e) {
var checkbox = e.target;
var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
urlParams.set(name, checkbox.checked ? "1" : "0");
window.location.search = urlParams.toString();
}
av6
hgweb: use strict equals in mercurial.js...
r35158 var allChecked = form.getAttribute("data-ignorews") === "1";
Gregory Szorc
hgweb: add HTML elements to control whitespace settings for annotate...
r34392
for (var i = 0; i < KEYS.length; i++) {
var key = KEYS[i];
var checkbox = document.getElementById(key + "-checkbox");
if (!checkbox) {
continue;
}
av6
hgweb: define locally used variables as actually local in mercurial.js...
r35161 var currentValue = form.getAttribute("data-" + key);
av6
hgweb: use strict equals in mercurial.js...
r35158 checkbox.checked = currentValue !== "0";
Gregory Szorc
hgweb: add HTML elements to control whitespace settings for annotate...
r34392
// ignorews implies ignorewsamount and ignorewseol.
av6
hgweb: use strict equals in mercurial.js...
r35158 if (allChecked && (key === "ignorewsamount" || key === "ignorewseol")) {
Gregory Szorc
hgweb: add HTML elements to control whitespace settings for annotate...
r34392 checkbox.checked = true;
checkbox.disabled = true;
}
checkbox.addEventListener("change", updateAndRefresh, false);
}
form.style.display = 'block';
}
Gregory Szorc
paper: don't register click handlers with inline javascript (issue5812)...
r37848 function addDiffStatToggle() {
var els = document.getElementsByClassName("diffstattoggle");
for (var i = 0; i < els.length; i++) {
els[i].addEventListener("click", toggleDiffstat, false);
}
}
function addLineWrapToggle() {
var els = document.getElementsByClassName("linewraptoggle");
for (var i = 0; i < els.length; i++) {
var nodes = els[i].getElementsByClassName("linewraplink");
for (var j = 0; j < nodes.length; j++) {
nodes[j].addEventListener("click", toggleLinewrap, false);
}
}
}
Gregory Szorc
hgweb: call process_dates() via DOM event listener...
r30765 document.addEventListener('DOMContentLoaded', function() {
process_dates();
Gregory Szorc
paper: don't register click handlers with inline javascript (issue5812)...
r37848 addDiffStatToggle();
addLineWrapToggle();
Gregory Szorc
hgweb: call process_dates() via DOM event listener...
r30765 }, false);