changeset 1866:fdce3f0bbc81 beta

merge with bb
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 09 Jan 2012 03:48:17 +0200
parents 37b3c3244bbc (diff) c3237c468544 (current diff)
children dbcfa1f43316
files rhodecode/templates/changelog/changelog.html rhodecode/templates/changeset/changeset.html
diffstat 10 files changed, 234 insertions(+), 178 deletions(-) [+]
line wrap: on
line diff
--- a/development.ini	Sun Jan 08 16:57:56 2012 +0200
+++ b/development.ini	Mon Jan 09 03:48:17 2012 +0200
@@ -74,17 +74,17 @@
 ## pattern to get the issues from commit messages
 ## default one used here is #1234
 
-#url_pat = (?:^#|\s#)(\w+)
+url_pat = (?:^#|\s#)(\w+)
 
 ## server url to the issue, each {id} will be replaced with id
 ## fetched from the regex
 
-#issue_server = https://myissueserver.com/issue/{id}
+issue_server = https://myissueserver.com/issue/{id}
 
 ## prefix to add to link to indicate it's an url
 ## #314 will be replaced by <issue_prefix><id>
 
-#issue_prefix = #
+issue_prefix = #
 
 
 ####################################
--- a/rhodecode/controllers/changelog.py	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/controllers/changelog.py	Mon Jan 09 03:48:17 2012 +0200
@@ -37,8 +37,7 @@
 from rhodecode.lib.helpers import RepoPage
 from rhodecode.lib.compat import json
 
-from vcs.exceptions import RepositoryError, ChangesetError, \
-ChangesetDoesNotExistError,BranchDoesNotExistError
+from vcs.exceptions import RepositoryError, ChangesetDoesNotExistError
 
 log = logging.getLogger(__name__)
 
--- a/rhodecode/controllers/changeset.py	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/controllers/changeset.py	Mon Jan 09 03:48:17 2012 +0200
@@ -93,7 +93,8 @@
         params[ctx_key] += [ctx_val]
 
     params['anchor'] = fileid
-    return h.link_to(lbl, h.url.current(**params))
+    img = h.image('/images/icons/text_strikethrough.png', lbl, class_='icon')
+    return h.link_to(img, h.url.current(**params), title=lbl)
 
 
 def get_line_ctx(fid, GET):
@@ -143,7 +144,8 @@
     lbl = _('%s line context') % ln_ctx
 
     params['anchor'] = fileid
-    return h.link_to(lbl, h.url.current(**params))
+    img = h.image('/images/icons/table_add.png', lbl, class_='icon')
+    return h.link_to(img, h.url.current(**params), title=lbl)
 
 
 class ChangesetController(BaseRepoController):
--- a/rhodecode/lib/helpers.py	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/lib/helpers.py	Mon Jan 09 03:48:17 2012 +0200
@@ -758,8 +758,8 @@
             def url_func(match_obj):
                 issue_id = match_obj.groups()[0]
                 tmpl = (
-                '<a class="%(cls)s" href="%(url)s">'
-                ' %(issue-prefix)s%(id-repr)s'
+                ' <a class="%(cls)s" href="%(url)s">'
+                '%(issue-prefix)s%(id-repr)s'
                 '</a>'
                 )
                 return tmpl % (
--- a/rhodecode/public/css/style.css	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/public/css/style.css	Mon Jan 09 03:48:17 2012 +0200
@@ -1130,7 +1130,27 @@
 	clear: both;
 	overflow: hidden;
 	margin: 0;
-	padding: 10px 0;
+	padding: 5px 0;
+    white-space: pre-wrap;
+}
+#content div.box div.expand{
+position:absolute;
+width:inherit;
+height:14px;
+font-size:14px;
+text-align:left;
+cursor: pointer;
+font-family: monospace;
+color:#003367;
+/*
+background:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(255,255,255,1)));
+background:-webkit-linear-gradient(top,rgba(255,255,255,0),rgba(255,255,255,1));
+background:-moz-linear-gradient(top,rgba(255,255,255,0),rgba(255,255,255,1));
+background:-o-linear-gradient(top,rgba(255,255,255,0),rgba(255,255,255,1));
+background:-ms-linear-gradient(top,rgba(255,255,255,0),rgba(255,255,255,1));
+background:linear-gradient(top,rgba(255,255,255,0),rgba(255,255,255,1));
+*/
+display: none;
 }
 
 #content div.box div.message a {
@@ -2115,8 +2135,27 @@
 	padding: 5px !important;
 }
 
+.tablerow0 {
+	background-color: #F8F8F8;
+}
+
+.tablerow1 {
+    background-color: #FFFFFF;
+}
+
+.changeset_id {
+	font-family: monospace;
+	color: #666666;
+}
+
+.changeset_hash {
+	color: #000000;
+}
+
 #changeset_content {
-	border: 1px solid #CCC;
+	border-left: 1px solid #CCC;
+	border-right: 1px solid #CCC;
+	border-bottom: 1px solid #CCC;
 	padding: 5px;
 }
 
@@ -2126,7 +2165,7 @@
 }
 
 #changeset_content .container {
-	min-height: 120px;
+	min-height: 100px;
 	font-size: 1.2em;
 	overflow: hidden;
 }
@@ -2141,7 +2180,7 @@
 
 #changeset_content .container .right {
 	float: right;
-	width: 25%;
+	width: 20%;
 	text-align: right;
 }
 
@@ -2220,47 +2259,48 @@
 }
 
 #graph_content {
-	width: 800px;
+	width: 80%;
 	float: left;
 }
 
 #graph_content .container_header {
-	border: 1px solid #CCC;
+	border-bottom: 1px solid #DDD;
 	padding: 10px;
-	height: 45px;
-    -webkit-border-radius: 6px 6px 0px 0px;
-    -moz-border-radius: 6px 6px 0px 0px;
-    border-radius: 6px 6px 0px 0px;	
+	height: 25px;
 }
 
 #graph_content #rev_range_container {
-	padding: 10px 0px;
-	clear: both;
+	padding: 7px 20px;
+	float: left;
 }
 
 #graph_content .container {
-	border-bottom: 1px solid #CCC;
-	border-left: 1px solid #CCC;
-	border-right: 1px solid #CCC;
-	min-height: 70px;
+	border-bottom: 1px solid #DDD;
+	height: 55px;
 	overflow: hidden;
-	font-size: 1.2em;
 }
 
 #graph_content .container .right {
 	float: right;
-	width: 28%;
+	width: 23%;
 	text-align: right;
-	padding-bottom: 5px;
-}
+}
+
+#graph_content .container .left {
+	float: left;
+	width: 25%;
+	padding-left: 5px;
+}
+
+#graph_content .container .mid {
+	float: left;
+	width: 49%;
+}
+
 
 #graph_content .container .left .date {
-	font-weight: 700;
-	padding-bottom: 5px;
-}
-
-#graph_content .container .left .date span {
-	vertical-align: text-top;
+	color: #444444;
+	padding-left: 22px;
 }
 
 #graph_content .container .left .author {
@@ -2270,7 +2310,6 @@
 #graph_content .container .left .author .user {
 	color: #444444;
 	float: left;
-	font-size: 12px;
 	margin-left: -4px;
 	margin-top: 4px;
 }
@@ -2279,6 +2318,11 @@
 	font-size: 100%;
 	padding-top: 3px;
 	white-space: pre-wrap;
+	border: 1px solid red;
+	position: relative;
+	top: -30px;
+	left: 40%;
+	width: 30%;
 }
 
 #graph_content .container .left .message a:hover{
@@ -2290,69 +2334,44 @@
 }
 
 .right .changes .changed_total {
-	border: 0px solid #DDD;
 	display: block;
 	float: right;
 	text-align: center;
 	min-width: 45px;
 	cursor: pointer;
-	background: #FD8;
-	font-weight: bold;
+	color: #444444;
+	background: #FEA;
 	-webkit-border-radius: 0px 0px 0px 6px;
 	-moz-border-radius: 0px 0px 0px 6px;
 	border-radius: 0px 0px 0px 6px;
-	padding: 2px;	
+	padding: 1px;
 }
 
 .right .changes .added,.changed,.removed {
-	border: 1px solid #DDD;
 	display: block;
+	padding: 1px;
+	color: #444444;
 	float: right;
 	text-align: center;
 	min-width: 15px;
-	cursor: help;
-}
-
-.right .changes .large {
-	border: 1px solid #DDD;
-	display: block;
-	float: right;
-	text-align: center;
-	min-width: 45px;
-	cursor: help;
-	background: #54A9F7;
 }
 
 .right .changes .added {
-	background: #BFB;
+	background: #CFC;
 }
 
 .right .changes .changed {
-	background: #FD8;
+	background: #FEA;
 }
 
 .right .changes .removed {
-	background: #F88;
+	background: #FAA;
 }
 
 .right .merge {
-	vertical-align: top;
-	font-size: 0.75em;
-	font-weight: 700;
-}
-
-.right .parent {
-	font-size: 90%;
-	font-family: monospace;
-	padding: 2px 2px 2px 2px;
-}
-.right .logtags{
-	padding: 2px 2px 2px 2px;
-}
-.right .logtags .branchtag,.logtags .branchtag {
-  padding: 1px 3px 2px;
-  background-color: #bfbfbf;
-  font-size: 9.75px;
+  padding: 1px 3px 1px 3px;
+  background-color: #fca062;
+  font-size: 10px;
   font-weight: bold;
   color: #ffffff;
   text-transform: uppercase;
@@ -2360,7 +2379,26 @@
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
-  padding-left:4px;
+  margin-right: 2px;
+}
+
+.right .parent {
+	color: #666666;
+}
+.right .logtags{
+	padding: 2px 2px 2px 2px;
+}
+.right .logtags .branchtag,.logtags .branchtag {
+  padding: 1px 3px 1px 3px;
+  background-color: #bfbfbf;
+  font-size: 10px;
+  font-weight: bold;
+  color: #ffffff;
+  text-transform: uppercase;
+  white-space: nowrap;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
 }
 .right .logtags .branchtag a:hover,.logtags .branchtag a{
 	color: #ffffff;
@@ -2370,9 +2408,9 @@
 	color: #ffffff;
 }
 .right .logtags .tagtag,.logtags .tagtag {
-  padding: 1px 3px 2px;
+  padding: 1px 3px 1px 3px;
   background-color: #62cffc;
-  font-size: 9.75px;
+  font-size: 10px;
   font-weight: bold;
   color: #ffffff;
   text-transform: uppercase;
@@ -2526,7 +2564,10 @@
     margin-left:1px;
     
 }
-
+.diffblock .diff-actions {
+    padding: 2px 0px 0px 2px;
+    float: left;
+}
 .diffblock  .diff-menu ul li {
 	padding: 0px 0px 0px 0px !important;
 }
@@ -2965,22 +3006,21 @@
 
 div.gravatar {
 	background-color: #FFF;
-	border: 0px solid #D0D0D0;
 	float: left;
 	margin-right: 0.7em;
-	padding: 2px 2px 2px 2px;
+	padding: 1px 1px 1px 1px;
     line-height:0;
-	-webkit-border-radius: 6px;
-	-khtml-border-radius: 6px;
-	-moz-border-radius: 6px;
-	border-radius: 6px;
+	-webkit-border-radius: 3px;
+	-khtml-border-radius: 3px;
+	-moz-border-radius: 3px;
+	border-radius: 3px;
 }
 
 div.gravatar img {
-	-webkit-border-radius: 4px;
-	-khtml-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
+	-webkit-border-radius: 2px;
+	-khtml-border-radius: 2px;
+	-moz-border-radius: 2px;
+	border-radius: 2px;
 }
 
 #header,#content,#footer {
@@ -3447,9 +3487,9 @@
 	width: 600px;
 }
 
-#changeset_content .container .left,#graph_content .container .left {
+#changeset_content .container .left {
 	float: left;
-	width: 70%;
+	width: 75%;
 	padding-left: 5px;
 }
 
@@ -3685,7 +3725,7 @@
 
 .comments .comment .meta {
     background: #f8f8f8;
-    padding: 6px;
+    padding: 4px;
     border-bottom: 1px solid #ddd;
 }
 
@@ -3698,13 +3738,14 @@
 }
 
 .comments .comment .meta .date {
-    float: right;
 }
 
 .comments .comment .text {
-    padding: 8px 6px 6px 14px;
     background-color: #FAFAFA;
 }
+.comment .text div.rst-block p {
+	margin: 0.5em 0px !important;
+}
 
 .comments .comments-number{
 	padding:0px 0px 10px 0px;
@@ -3772,8 +3813,7 @@
 }
 
 .comment .buttons {
-    position: absolute;
-    right:40px;
+	float: right;
 }
 
 
@@ -3860,7 +3900,7 @@
 }
 .inline-comments .comment .meta {
     background: #f8f8f8;
-    padding: 6px;
+    padding: 4px;
     border-bottom: 1px solid #ddd;
 }
 
@@ -3873,11 +3913,9 @@
 }
 
 .inline-comments .comment .meta .date {
-    float: right;
 }
 
 .inline-comments .comment .text {
-    padding: 8px 6px 6px 14px;
     background-color: #FAFAFA;
 }
 
@@ -3977,6 +4015,7 @@
 div.diffblock .code-header .date{
     float:left;
     text-transform: uppercase;
+    padding: 2px 0px 0px 2px;
 }
 div.diffblock .code-header div{
     margin-left:4px;
@@ -4089,4 +4128,4 @@
 	cursor: auto !important;
 	background-color: inherit !important;
 	
-}
\ No newline at end of file
+}
--- a/rhodecode/public/js/graph.js	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/public/js/graph.js	Mon Jan 09 03:48:17 2012 +0200
@@ -63,18 +63,17 @@
 		var rela = document.getElementById('graph');
 		var pad = pad;
 		var scale = 22;
-		
+
 		for (var i in data) {
 			this.scale(scale);
+
 			var row = document.getElementById("chg_"+idx);
 			var	next = document.getElementById("chg_"+idx+1);
+			if(row == null){
+				continue
+			}
 			var extra = 0;
 			
-			//skip this since i don't have DATE in my app
-			//if (next.is('.changesets-date')) {
-			//	extra = next.outerHeight();
-			//}
-						
 			this.cell[1] += row.clientWidth;
 			this.bg[1] += this.bg_height;
 			
@@ -82,7 +81,9 @@
 			nodeid = cur[0];
 			node = cur[1];
 			in_l = cur[2];
-			
+
+			var pos_ = 26;
+
 			for (var j in in_l) {
 				
 				line = in_l[j];
@@ -99,18 +100,27 @@
 				}
 				
 				this.setColor(color, 0.0, 0.65);
-				
-				y = row.offsetTop-rela.offsetTop;
+				y = row.offsetTop-rela.offsetTop+pos_;
 				x = pad-((this.cell[0] + this.box_size * start - 1) + this.bg_height-2);
 				
 				this.ctx.lineWidth=this.line_width;
 				this.ctx.beginPath();
 				this.ctx.moveTo(x, y);
 
-				y += row.offsetHeight;
 				
-				x = pad-((1 + this.box_size * end) + this.bg_height-2);
-				this.ctx.lineTo(x,y+extra,3);
+				if (start == end)
+				{
+					x = pad-((1 + this.box_size * end) + this.bg_height-2);
+					y += row.offsetHeight;
+					this.ctx.lineTo(x,y+extra,3);
+				}
+				else
+				{
+					var x2 = pad-((1 + this.box_size * end) + this.bg_height-2);
+					var y2 = y + row.offsetHeight;
+					var ymid = (y+y2) / 2;
+					this.ctx.bezierCurveTo(x,ymid,x2,ymid,x2,y2);
+				}
 				this.ctx.stroke();
 			}
 			
@@ -118,7 +128,7 @@
 			color = node[1]
 			
 			radius = this.dot_radius;
-			y = row.offsetTop-rela.offsetTop;
+			y = row.offsetTop-rela.offsetTop+pos_;
 			x = pad-(Math.round(this.cell[0] * scale/2 * column + radius) + 15 - (column*4));
 		
 			this.ctx.beginPath();
--- a/rhodecode/templates/changelog/changelog.html	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/templates/changelog/changelog.html	Mon Jan 09 03:48:17 2012 +0200
@@ -36,19 +36,19 @@
 				        <div class="info_box" style="float:left">
 				          ${h.submit('set',_('Show'),class_="ui-btn")}
 				          ${h.text('size',size=1,value=c.size)}
-				          <span class="rev">${_('revisions')}</span>
+				          ${_('revisions')}
 				        </div>
 				        ${h.end_form()}
+					<div id="rev_range_container" style="display:none"></div>
                     <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
-					<div id="rev_range_container" style="display:none"></div>
 					</div>
 					
 				%for cnt,cs in enumerate(c.pagination):
-					<div id="chg_${cnt+1}" class="container">
+					<div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
 						<div class="left">
-							<div class="date">
+							<div>
 							${h.checkbox(cs.short_id,class_="changeset_range")}
-							<span class="tooltip" title="${cs.date}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}">${cs.revision}:${h.short_id(cs.raw_id)}</a></span>
+							<span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span>
 							</div>
 							<div class="author">
 								<div class="gravatar">
@@ -56,19 +56,21 @@
 								</div>
 								<div title="${cs.author}" class="user">${h.person(cs.author)}</div>
 							</div>
-							<div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message))}</div>
+                            <div class="date">${cs.date}</div>
+						</div>
+						<div class="mid">
+                            <div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message))}</div>
+                            <div class="expand ${'tablerow%s' % (cnt%2)}">&darr; ${_('show more')} &darr;</div>
 						</div>	
 						<div class="right">
 									<div id="${cs.raw_id}_changes_info" class="changes">
                                         <span id="${cs.raw_id}" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</span>
 									</div>					
-										%if len(cs.parents)>1:
-										<div class="merge">${_('merge')}</div>
-										%endif
-								   %if cs.parents:							
+								   %if cs.parents:
 									%for p_cs in reversed(cs.parents):
-										<div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
-											h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
+										<div class="parent">${_('Parent')}
+											<span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
+											h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
 										</div>
 									%endfor
 								   %else:	
@@ -76,6 +78,9 @@
                                    %endif  
                     									
 								<span class="logtags">
+									%if len(cs.parents)>1:
+									<span class="merge">${_('merge')}</span>
+									%endif
 									%if cs.branch:
 									<span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
 									   ${h.link_to(cs.branch,h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
@@ -129,6 +134,34 @@
                         }
                     });					
 					
+                    var msgs = YUQ('.message');
+                    // get firts element height;
+                    var el = YUQ('.container')[0];
+                    var row_h = el.clientHeight;
+                    for(var i=0;i<msgs.length;i++){
+                    	var m = msgs[i];
+
+                    	var h = m.clientHeight;
+                    	var pad = YUD.getStyle(m,'padding');
+                    	if(h > row_h){
+                    		YUD.setStyle(m.nextElementSibling,'display','block');
+                    		YUD.setStyle(m.nextElementSibling,'margin-top',row_h-(h+14)+'px');
+                    		YUD.setAttribute(m.nextElementSibling,'expand',h);
+                    	};
+                    }
+                    YUE.on(YUQ('.expand'),'click',function(e){
+                    	var elem = e.currentTarget.parentElement.parentElement;
+                    	YUD.setStyle(e.currentTarget,'display','none');
+                    	YUD.setStyle(elem,'height',YUD.getAttribute(e.currentTarget,'expand')+'px');
+                    	
+                    	//redraw the graph max_w and jsdata are global vars
+                        set_canvas(max_w);
+                        
+                        var r = new BranchRenderer();
+                        r.render(jsdata,max_w);                    	
+                    	
+                    })
+                    
                     // Fetch changeset details 
                     YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
                     	var id = e.currentTarget.id
@@ -184,4 +217,4 @@
 		%endif  
     </div>
 </div>    
-</%def>
\ No newline at end of file
+</%def>
--- a/rhodecode/templates/changeset/changeset.html	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/templates/changeset/changeset.html	Mon Jan 09 03:48:17 2012 +0200
@@ -27,18 +27,15 @@
     <div class="table">
 		<div class="diffblock">
 			<div class="code-header">
-                <div class="date">${_('commit')} ${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} ${c.changeset.date}</div>
-                <div class="diff-menu-wrapper">
-                    <img class="diff-menu-activate" style="cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
-                    <div class="diff-menu" style="display:none">
-                        <ul>
-                          <li>${h.link_to(_('raw diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show'))}</li>
-                          <li>${h.link_to(_('download diff'),h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download'))}</li>
-                          <li>${c.ignorews_url()}</li>
-                          <li>${c.context_url()}</li>
-                        </ul>
-                    </div>                        
-                </div>				
+                <div class="date">
+                  R${c.changeset.revision}:${h.link_to(h.short_id(c.changeset.raw_id),h.url('changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
+                  ${c.changeset.date}</div>
+                <div class="diff-actions">
+                  <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='show')}" title="${_('raw diff')}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
+                  <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}" title="${_('download diff')}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
+                  ${c.ignorews_url()}
+                  ${c.context_url()}
+                </div>
                 <div class="comments-number" style="float:right;padding-right:5px">${len(c.comments)} comment(s) (${c.inline_cnt} ${_('inline')})</div>
 			</div>
 		</div>
@@ -66,22 +63,21 @@
                          <span class="added"   title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>	                    
 	                    % endif		                 
 		             </div>                  
-		                 %if len(c.changeset.parents)>1:
-		                 <div class="merge">
-		                     ${_('merge')}<img alt="merge" src="${h.url('/images/icons/arrow_join.png')}"/>
-		                 </div>
-		                 %endif
 		                 
 		            %if c.changeset.parents:
 		             %for p_cs in reversed(c.changeset.parents):
-		                 <div class="parent">${_('Parent')} ${p_cs.revision}: ${h.link_to(h.short_id(p_cs.raw_id),
-		                     h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}
+		                 <div class="parent">${_('Parent')}
+                     <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
+		                     h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
 		                 </div>
 		             %endfor
                     %else: 
                         <div class="parent">${_('No parents')}</div>   
                     %endif		             
 		         <span class="logtags">
+                 %if len(c.changeset.parents)>1:
+                 <span class="merge">${_('merge')}</span>
+                 %endif
 		             <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
 		             ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
 		             %for tag in c.changeset.tags:
@@ -91,8 +87,8 @@
 		         </span>                                                                 
 	                </div>              
 	        </div>
-	        <span style="font-size:1.1em;font-weight: bold">
-	        ${_('%s files affected with %s additions and %s deletions.') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
+	        <span>
+	        ${_('%s files affected with %s additions and %s deletions:') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
 	        </span>
 	        <div class="cs_files">
 	                %for change,filenode,diff,cs1,cs2,stat in c.changes:
@@ -139,18 +135,6 @@
 
       YUE.onDOMReady(function(){
           
-          YUE.on(YUQ('.diff-menu-activate'),'click',function(e){
-              var act = e.currentTarget.nextElementSibling;
-              
-              if(YUD.hasClass(act,'active')){
-                  YUD.removeClass(act,'active');
-                  YUD.setStyle(act,'display','none');
-              }else{
-                  YUD.addClass(act,'active');
-                  YUD.setStyle(act,'display','');
-              }
-          });
-                  
           YUE.on(YUQ('.show-inline-comments'),'change',function(e){
               var show = 'none';
               var target = e.currentTarget;
--- a/rhodecode/templates/changeset/changeset_file_comment.html	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/templates/changeset/changeset_file_comment.html	Mon Jan 09 03:48:17 2012 +0200
@@ -11,22 +11,16 @@
   			<img src="${h.gravatar_url(co.author.email, 20)}" />
   			${co.author.username}
   		</span>
-  		<a href="${h.url.current(anchor='comment-%s' % co.comment_id)}"> ${_('commented on')} </a>
-  		${h.short_id(co.revision)}
-  		%if co.f_path:
-  			${_(' in file ')}
-  			${co.f_path}:L ${co.line_no}
-  		%endif
   		<span class="date">
   			${h.age(co.modified_at)}
   		</span>
+      %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
+        <span class="buttons">
+          <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
+        </span>
+      %endif
   	</div>
   	<div class="text">
-  		%if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
-  			<div class="buttons">
-  				<span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
-  			</div>
-  		%endif
   		${h.rst_w_mentions(co.text)|n}
   	</div>
     </div>
--- a/rhodecode/templates/changeset/diff_block.html	Sun Jan 08 16:57:56 2012 +0200
+++ b/rhodecode/templates/changeset/diff_block.html	Mon Jan 09 03:48:17 2012 +0200
@@ -15,17 +15,12 @@
                     ${h.link_to_if(change!='removed',h.safe_unicode(filenode.path),h.url('files_home',repo_name=c.repo_name,
                     revision=filenode.changeset.raw_id,f_path=h.safe_unicode(filenode.path)))}
                 </div>
-                <div class="diff-menu-wrapper">
-                    <img class="diff-menu-activate" style="margin-bottom:-6px;cursor: pointer" alt="diff-menu" src="${h.url('/images/icons/script_gear.png')}" />
-                    <div class="diff-menu" style="display:none">
-                        <ul>
-                          <li>${h.link_to(_('diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1))}</li>
-                          <li>${h.link_to(_('raw diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw'))}</li>
-                          <li>${h.link_to(_('download diff'),h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download'))}</li>
-                          <li>${c.ignorews_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
-                          <li>${c.context_url(h.FID(filenode.changeset.raw_id,filenode.path))}</li>
-                        </ul>
-                    </div>                        
+                <div class="diff-actions">
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" title="${_('diff')}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='raw')}" title="${_('raw diff')}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(filenode.path),diff2=cs2,diff1=cs1,diff='download')}" title="${_('download diff')}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
+                  ${c.ignorews_url(h.FID(filenode.changeset.raw_id,filenode.path))}
+                  ${c.context_url(h.FID(filenode.changeset.raw_id,filenode.path))}
                 </div>
                 <span style="float:right;margin-top:-3px">
                   <label>