##// END OF EJS Templates
copies: add config option for writing copy metadata to file and/or changset...
copies: add config option for writing copy metadata to file and/or changset This introduces a config option that lets you choose to write copy metadata to the changeset extras instead of to filelog. There's also an option to write it to both places. I imagine that may possibly be useful when transitioning an existing repo. The copy metadata is stored as two fields in extras: one for copies since p1 and one for copies since p2. I may need to add more information later in order to make copy tracing faster. Specifically, I'm thinking out recording which files were added or removed so that copies._chaincopies() doesn't have to look at the manifest for that. But that would just be an optimization and that can be added once we know if it's necessary. I have also considered saving space by using replacing the destination file path by an index into the "files" list, but that can also be changed later (but before the feature is ready to release). Differential Revision: https://phab.mercurial-scm.org/D6183

File last commit:

r37850:387af9e5 @23 stable
r42317:0e41f40b 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);