Commits

kiilerix committed 3eb8547

hgweb: avoid bad $$ processing in graph (issue3601)

JavaScript .replace always magically processed $$ $& $' $` in replacement
strings and thus displayed subject lines incorrectly in the graph view.

Instead of regexps and .replace we now just create the strings the right way in
the first place.

  • Participants
  • Parent commits d79df9f
  • Branches stable

Comments (0)

Files changed (6)

File mercurial/templates/gitweb/graph.tmpl

 var graph = new Graph();
 graph.scale({bg_height});
 
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
-revlink += '</span> _TAGS';
-revlink += '<span class="info">_DATE, by _USER</span></li>';
-
 graph.vertex = function(x, y, color, parity, cur) \{
 	
 	this.ctx.beginPath();
 	var bg = '<li class="bg parity' + parity + '"></li>';
 	var left = (this.columns + 1) * this.bg_height;
 	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
 	
 	var tagspan = '';
 	if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
 		tagspan += '</span>';
 	}
 	
-	item = item.replace(/_TAGS/, tagspan);
+	var item = '<li style="' + nstyle + '"><span class="desc">';
+	item += '<a class="list" href="{url}rev/' + cur[0] + '{sessionvars%urlparameter}" title="' + cur[0] + '"><b>' + cur[3] + '</b></a>';
+	item += '</span> ' + tagspan + '';
+	item += '<span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
+
 	return [bg, item];
 	
 }

File mercurial/templates/monoblue/graph.tmpl

     var graph = new Graph();
     graph.scale({bg_height});
 
-    var revlink = '<li style="_STYLE"><span class="desc">';
-    revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-    revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
-
     graph.vertex = function(x, y, color, parity, cur) \{
 
         this.ctx.beginPath();
         var bg = '<li class="bg parity' + parity + '"></li>';
         var left = (this.columns + 1) * this.bg_height;
         var nstyle = 'padding-left: ' + left + 'px;';
-        var item = revlink.replace(/_STYLE/, nstyle);
-        item = item.replace(/_PARITY/, 'parity' + parity);
-        item = item.replace(/_NODEID/, cur[0]);
-        item = item.replace(/_NODEID/, cur[0]);
-        item = item.replace(/_DESC/, cur[3]);
-        item = item.replace(/_USER/, cur[4]);
-        item = item.replace(/_DATE/, cur[5]);
 
         var tagspan = '';
         if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
             tagspan += '</span>';
         }
 
-        item = item.replace(/_TAGS/, tagspan);
+        var item = '<li style="' + nstyle + '"><span class="desc">';
+        item += '<a href="{url}rev/' + cur[0] + '{sessionvars%urlparameter}" title="' + cur[0] + '">' + cur[3] + '</a>';
+        item += '</span>' + tagspan + '<span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
+
         return [bg, item];
 
     }

File mercurial/templates/paper/graph.tmpl

 var graph = new Graph();
 graph.scale({bg_height});
 
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
-
 graph.vertex = function(x, y, color, parity, cur) \{
 	
 	this.ctx.beginPath();
 	var bg = '<li class="bg parity' + parity + '"></li>';
 	var left = (this.columns + 1) * this.bg_height;
 	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
 
 	var tagspan = '';
 	if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) \{
 		}
 		tagspan += '</span>';
 	}
+
+	var item = '<li style="' + nstyle + '"><span class="desc">';
+	item += '<a href="{url}rev/' + cur[0] + '{sessionvars%urlparameter}" title="' + cur[0] + '">' + cur[3] + '</a>';
+	item += '</span>' + tagspan + '<span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
 	
-	item = item.replace(/_TAGS/, tagspan);
 	return [bg, item];
 	
 }

File mercurial/templates/spartan/graph.tmpl

 var graph = new Graph();
 graph.scale({bg_height});
 
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span><span class="info">_DATE, by _USER</span></li>';
-
 graph.vertex = function(x, y, color, parity, cur) \{
 	
 	this.ctx.beginPath();
 	var bg = '<li class="bg parity' + parity + '"></li>';
 	var left = (this.columns + 1) * this.bg_height;
 	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
-	
+	var item = '<li style="' + nstyle + '"><span class="desc">';
+	item += '<a href="{url}rev/' + cur[0] + '{sessionvars%urlparameter}" title="' + cur[0] + '">' + cur[3] + '</a>';
+	item += '</span><span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
+
 	return [bg, item];
 	
 }

File tests/test-hgweb-commands.t

   var graph = new Graph();
   graph.scale(39);
   
-  var revlink = '<li style="_STYLE"><span class="desc">';
-  revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
-  revlink += '</span> _TAGS';
-  revlink += '<span class="info">_DATE, by _USER</span></li>';
-  
   graph.vertex = function(x, y, color, parity, cur) {
   	
   	this.ctx.beginPath();
   	var bg = '<li class="bg parity' + parity + '"></li>';
   	var left = (this.columns + 1) * this.bg_height;
   	var nstyle = 'padding-left: ' + left + 'px;';
-  	var item = revlink.replace(/_STYLE/, nstyle);
-  	item = item.replace(/_PARITY/, 'parity' + parity);
-  	item = item.replace(/_NODEID/, cur[0]);
-  	item = item.replace(/_NODEID/, cur[0]);
-  	item = item.replace(/_DESC/, cur[3]);
-  	item = item.replace(/_USER/, cur[4]);
-  	item = item.replace(/_DATE/, cur[5]);
   	
   	var tagspan = '';
   	if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) {
   		tagspan += '</span>';
   	}
   	
-  	item = item.replace(/_TAGS/, tagspan);
+  	var item = '<li style="' + nstyle + '"><span class="desc">';
+  	item += '<a class="list" href="/rev/' + cur[0] + '?style=gitweb" title="' + cur[0] + '"><b>' + cur[3] + '</b></a>';
+  	item += '</span> ' + tagspan + '';
+  	item += '<span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
+  
   	return [bg, item];
   	
   }

File tests/test-hgweb-empty.t

   var graph = new Graph();
   graph.scale(39);
   
-  var revlink = '<li style="_STYLE"><span class="desc">';
-  revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
-  revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
-  
   graph.vertex = function(x, y, color, parity, cur) {
   	
   	this.ctx.beginPath();
   	var bg = '<li class="bg parity' + parity + '"></li>';
   	var left = (this.columns + 1) * this.bg_height;
   	var nstyle = 'padding-left: ' + left + 'px;';
-  	var item = revlink.replace(/_STYLE/, nstyle);
-  	item = item.replace(/_PARITY/, 'parity' + parity);
-  	item = item.replace(/_NODEID/, cur[0]);
-  	item = item.replace(/_NODEID/, cur[0]);
-  	item = item.replace(/_DESC/, cur[3]);
-  	item = item.replace(/_USER/, cur[4]);
-  	item = item.replace(/_DATE/, cur[5]);
   
   	var tagspan = '';
   	if (cur[7].length || cur[8].length || (cur[6][0] != 'default' || cur[6][1])) {
   		}
   		tagspan += '</span>';
   	}
+  
+  	var item = '<li style="' + nstyle + '"><span class="desc">';
+  	item += '<a href="/rev/' + cur[0] + '" title="' + cur[0] + '">' + cur[3] + '</a>';
+  	item += '</span>' + tagspan + '<span class="info">' + cur[5] + ', by ' + cur[4] + '</span></li>';
   	
-  	item = item.replace(/_TAGS/, tagspan);
   	return [bg, item];
   	
   }